@syncfusion/ej2-treegrid 20.1.59 → 20.1.60
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/CHANGELOG.md +2 -0
- package/dist/ej2-treegrid.umd.min.js +2 -2
- package/dist/ej2-treegrid.umd.min.js.map +1 -1
- package/dist/es6/ej2-treegrid.es2015.js +5 -0
- package/dist/es6/ej2-treegrid.es2015.js.map +1 -1
- package/dist/es6/ej2-treegrid.es5.js +5 -0
- package/dist/es6/ej2-treegrid.es5.js.map +1 -1
- package/dist/global/ej2-treegrid.min.js +2 -2
- package/dist/global/ej2-treegrid.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +7 -7
- package/src/treegrid/base/treegrid.js +3 -0
- package/src/treegrid/renderer/render.js +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-treegrid.umd.min.js","sources":["../src/treegrid/utils.js","../src/treegrid/actions/crud-actions.js","../src/treegrid/models/column.js","../src/treegrid/models/filter-settings.js","../src/treegrid/models/textwrap-settings.js","../src/treegrid/actions/logger.js","../src/treegrid/base/constant.js","../src/treegrid/actions/clipboard.js","../src/treegrid/actions/selection.js","../src/treegrid/actions/freeze-column.js","../src/treegrid/actions/print.js","../src/treegrid/models/search-settings.js","../src/treegrid/models/selection-settings.js","../src/treegrid/renderer/render.js","../src/treegrid/base/data.js","../src/treegrid/enum.js","../src/treegrid/models/page-settings.js","../src/treegrid/models/summary.js","../src/treegrid/models/edit-settings.js","../src/treegrid/models/sort-settings.js","../src/treegrid/models/infinite-scroll-settings.js","../src/treegrid/base/treegrid.js","../src/treegrid/actions/reorder.js","../src/treegrid/actions/resize.js","../src/treegrid/actions/rowdragdrop.js","../src/treegrid/models/rowdrop-settings.js","../src/treegrid/renderer/virtual-row-model-generator.js","../src/treegrid/actions/filter.js","../src/treegrid/actions/excel-export.js","../src/treegrid/actions/pdf-export.js","../src/treegrid/actions/page.js","../src/treegrid/actions/toolbar.js","../src/treegrid/actions/summary.js","../src/treegrid/actions/sort.js","../src/treegrid/actions/column-menu.js","../src/treegrid/actions/context-menu.js","../src/treegrid/actions/batch-edit.js","../src/treegrid/actions/edit.js","../src/treegrid/actions/command-column.js","../src/treegrid/actions/detail-row.js","../src/treegrid/renderer/virtual-tree-content-render.js","../src/treegrid/actions/virtual-scroll.js","../src/treegrid/actions/column-chooser.js","../src/treegrid/actions/infinite-scroll.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords;\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n if (!control.enableImmutableMode) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\n var editModule = 'editModule';\n control.grid.editModule[editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[control.parentIdMapping] = childRecords[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[key] === record[key]) {\n index_1 = i;\n return;\n } });\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[key] !== child[key]) {\n record.childRecords.push(child);\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[control.childMapping].indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[i][primaryKeys] === record[primaryKeys]) {\n data[i] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the textwrap behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[stackedHeader] ? this.parent[columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('aria-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Freeze } from '../actions/freeze-column';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.freezeModule = new Freeze(this);\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || this.freezeModule) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n index = index === 0 ? -1 : index;\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n this.grid.columns = this.getGridColumns(this.columns);\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[columnModel], function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, true);\n }\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('aria-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, false);\n }\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[i][this.expandStateMapping] = state;\n editAction({ value: totalRecords[i], action: 'edit' }, this, this.isSelfReference, totalRecords[i].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[i], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && childRecords[i].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\n });\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n else if (actionArgs.action === 'outdenting') {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping !== null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[rowIndex];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[selectedItemIndex].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n if (parent['expanded'] === false && this.parent.getVisibleRecords().indexOf(record) === -1 && isNullOrUndefined(this.parent['dataResults']['action'])) {\n this.parent.expandRow(this.parent.getRows()[parent['index']], parent);\n }\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.result.length;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var tObj = this.parent;\n var indentElement;\n var outdentElement;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\n item[field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[key] = this.getSummaryValues(summary.columns[i], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[key] = this.getSummaryValues(summary.columns[i], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[summaryColumn.columnName][summaryKey];\n var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n if (indent || outdent) {\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\n var targetElement = args.event.target.closest('td');\n if (isNullOrUndefined(targetElement) || (!isNullOrUndefined(targetElement) && !targetElement.classList.contains('e-rowcell'))) {\n indent.style.display = outdent.style.display = 'none';\n }\n else {\n if (selectedrow.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indent.style.display = outdent.style.display = 'none';\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[selectedrow.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level)) {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) {\n indent.style.display = 'block';\n }\n if (selectedItem.level === 0) {\n outdent.style.display = 'none';\n }\n if (selectedItem.level !== 0) {\n outdent.style.display = 'block';\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indent.style.display = 'none';\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdent.style.display = 'none';\n }\n }\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][parentItem][uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[rowObjectIndex].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[this.addRowIndex][level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && this.parent.grid.selectedRowIndex === -1) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[0].getAttribute('aria-rowindex'), 10);\n data.splice(index_1, 0, addRecords[0]);\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem]) &&\n (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('aria-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('aria-rowindex');\n tr.setAttribute('aria-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.editModule['isAddedRowByMethod']) {\n var args = {\n action: 'add',\n data: this.parent.getBatchChanges()['addedRecords'][0],\n index: index,\n seletedRow: 0\n };\n this.parent.editModule.beginAddEdit(args);\n this.parent.editModule.batchEditModule['batchAddRowRecord'].push(this.parent.editModule.batchEditModule['addRowRecord']);\n this.parent.editModule.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = this.parent.grid.getCurrentViewRecords();\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('aria-rowindex'), 10);\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction());\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && this.startIndex === -1)) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.ariaRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","currentViewRecords","getCurrentViewRecords","extend","newRowPosition","unshift","primaryKeys","currentdata","addAction","Array","k","_loop_1","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","filter","e","p","enableImmutableMode","removeChildRecords","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","rowDataBound","queryCellInfo","beforeDataBound","actionBegin","actionComplete","rowSelected","checkboxChange","rowDeselected","toolbarClick","beforeExcelExport","beforePdfExport","collapsed","remoteExpand","localPagedExpandCollapse","pagingActions","printGridInit","contextMenuOpen","contextMenuClick","crudAction","beginEdit","beginAdd","recordDoubleClick","cellSave","cellSaved","cellEdit","batchDelete","batchCancel","batchAdd","beforeBatchDelete","beforeBatchAdd","beforeBatchSave","batchSave","keyPressed","doubleTap","virtualActionArgs","dataListener","indexModifier","beforeStartEdit","beforeBatchCancel","detailDataBound","rowDragStartHelper","rowsAdd","rowsRemove","rowdraging","rowDropped","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","copyContent","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","events.checkboxChange","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Freeze","FreezeColumn","rowExpandCollapse","dataBoundArg","dblClickHandler","frozenRightRows","movableRows","frozenrows","freeze","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","getFrozenRightRows","detailrows","rData","getRowObjectFromUID","queryselector","cRow","i_1","allowEditOnDblClick","startEdit","freezeModule","addClass","element","getElementsByClassName","Print","GridPrint","events.printGridInit","printTreeGrid","printGrid","gridElement","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","templateFn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","id","portals","isReact","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","undefined","rowsObj","getRowsObject","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","serviceLocator","td","getCellFromIndex","refreshTD","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","events.remoteExpand","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","haveChild","events.actionComplete","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","events.expanded","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","sortArgs","temp","paging","printMode","actArgs","events.pagingActions","isCollapsedStatePersist","actualResults","dataResult","events.crudAction","events.batchSave","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","refreshToolbarItems","renderComplete","destroyTemplateFn","toolbarElement","toolbarModule","getToolbar","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","templateInstance","triggerEvents","bindGridEvents","rowSelecting","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","events.rowSelected","events.rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","callBackPromise","events.toolbarClick","toolbarargs","cellSelecting","cellselectingArgs","events.beginEdit","begineditArgs","isExpandRefresh","events.dataStateChange","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","events.cellSave","cellsaveArgs","events.cellSaved","promise","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","dataManager","isQueryInvokedFromData","callBackPromise_2","events.actionBegin","updateTreeGridModel","events.beginAdd","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","rowDragStart","rowDrag","isEdit","events.rowdraging","rowDrop","events.rowDropped","registeredTemplate","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","currentObject","val","ignoreInArrays","addOnPersist","ignoreOnColumn","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","refreshScrollOffset","collapsingArgs","events.collapsed","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","puniqueID_1","this_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","localExpand","events.localPagedExpandCollapse","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","freezeRightRows","rows_2","getMovableRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","eRows","updateRowAndCellElements","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","rowDragAndDropModule","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","events.rowsAdd","rowsAdded","events.rowsRemove","rowsRemoved","tObj","dropRows","orderToIndex","dropData","totalRecord","parentrow","request","selectedItemIndex","selectedItem","selectedRow","selectedRecord","record_1","eventTrigger","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","getBoundingClientRect","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","events.dataListener","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","event.beforeExcelExport","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","event.beforePdfExport","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","updatePageSize","pageingDetails","updateSize","gridPagerModule","pageSizes","pagerObj","pagerdropdownModule","getLocalizedLabel","pageSize","propname","skip","size","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","indentEle","outdentEle","selectedrow","isCheckBoxSelection","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","event","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleterecords","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","events.keyPressed","lastCellTab","contentready","editActionEvents","events.doubleTap","gridDblClick","customCellSave","savePreviousRowPosition","events.beforeStartEdit","events.beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","treecell","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","detaildataBound","setIndentVisibility","childRowExpand","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","events.virtualActionArgs","virtualOtherAction","events.indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","initialRowTop","gridTop","containerRect","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow"],"mappings":"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AW,eAAW,GAClCyE,IACIc,WAAS,OACVye,EAAShkB,UAAW,oBAAgB,GACvCyE,IACIc,WAAS,OACVye,EAAShkB,UAAW,uBAAmB,GAC1CyE,IACIc,WAAS,IACVye,EAAShkB,UAAW,uBAAmB,GAC1CyE,IACIc,WAAS,OACVye,EAAShkB,UAAW,iBAAa,GACpCyE,IACIc,WAAS,OACVye,EAAShkB,UAAW,uBAAmB,GAC1CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,yBAAqB,GAC5CyE,IACIc,WAAS,OACVye,EAAShkB,UAAW,0BAAsB,GAC7CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,2BAAuB,GAC9CyE,IACIc,gBACDye,EAAShkB,UAAW,kBAAc,GACrCyE,IACIc,cACDye,EAAShkB,UAAW,aAAS,GAChCyE,IACIc,cACDye,EAAShkB,UAAW,kBAAc,GACrCyE,IACIc,WAAS,aACVye,EAAShkB,UAAW,iBAAa,GACpCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,mBAAe,GACtCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,yBAAqB,GAC5CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,qBAAiB,GACxCyE,IACI+9B,aAAY78B,IACbqe,EAAShkB,UAAW,wBAAoB,GAC3CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,uBAAmB,GAC1CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,qBAAiB,GACxCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,0BAAsB,GAC7CyE,IACI+9B,aAAYrgB,KACb6B,EAAShkB,UAAW,oBAAgB,GACvCyE,IACI+9B,aAAYC,oBACbze,EAAShkB,UAAW,uBAAmB,GAC1CyE,IACIc,cACDye,EAAShkB,UAAW,qBAAiB,GACxCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,sBAAkB,GACzCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,yBAAqB,GAC5CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,oBAAgB,GACvCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,yBAAqB,GAC5CyE,IACI+9B,aAAY1e,KACbE,EAAShkB,UAAW,oBAAgB,GACvCyE,IACIiB,gBAAeie,KAChBK,EAAShkB,UAAW,kBAAc,GACrCyE,IACI+9B,aAAY5e,KACbI,EAAShkB,UAAW,oBAAgB,GACvCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,sBAAkB,GACzCyE,IACIc,cACDye,EAAShkB,UAAW,sBAAkB,GACzCyE,IACI+9B,aAAY/8B,IACbue,EAAShkB,UAAW,sBAAkB,GACzCyE,IACI+9B,aAAYrtB,KACb6O,EAAShkB,UAAW,sBAAkB,GACzCyE,IACIc,cACDye,EAAShkB,UAAW,eAAW,GAClCyE,IACIc,cACDye,EAAShkB,UAAW,uBAAmB,GAC1CyE,IACIc,WAAS,YACVye,EAAShkB,UAAW,iBAAa,GACpCyE,IACIc,cACDye,EAAShkB,UAAW,wBAAoB,GAC3CyE,IACIc,cACDye,EAAShkB,UAAW,uBAAmB,GAC1CyE,IACIc,cACDye,EAAShkB,UAAW,mBAAe,GACtCyE,IACIc,WAAS,WACVye,EAAShkB,UAAW,yBAAqB,GAC5CyE,IACIc,WAAS,OACVye,EAAShkB,UAAW,iBAAa,GACpCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,oBAAgB,GACvCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,qBAAiB,GACxCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,mBAAe,GACtCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,sBAAkB,GACzCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,wBAAoB,GAC3CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,2BAAuB,GAC9CyE,IACIc,WAAS,SACVye,EAAShkB,UAAW,cAAU,GACjCyE,IACIc,WAAS,SACVye,EAAShkB,UAAW,aAAS,GAChCyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,4BAAwB,GAC/CyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,kCAA8B,GACrDyE,IACIc,YAAS,IACVye,EAAShkB,UAAW,+BAA2B,GAClDyE,IACI+9B,aAAYze,KACbC,EAAS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"}
|
|
1
|
+
{"version":3,"file":"ej2-treegrid.umd.min.js","sources":["../src/treegrid/utils.js","../src/treegrid/actions/crud-actions.js","../src/treegrid/models/column.js","../src/treegrid/models/filter-settings.js","../src/treegrid/models/textwrap-settings.js","../src/treegrid/actions/logger.js","../src/treegrid/base/constant.js","../src/treegrid/actions/clipboard.js","../src/treegrid/actions/selection.js","../src/treegrid/actions/freeze-column.js","../src/treegrid/actions/print.js","../src/treegrid/models/search-settings.js","../src/treegrid/models/selection-settings.js","../src/treegrid/renderer/render.js","../src/treegrid/base/data.js","../src/treegrid/enum.js","../src/treegrid/models/page-settings.js","../src/treegrid/models/summary.js","../src/treegrid/models/edit-settings.js","../src/treegrid/models/sort-settings.js","../src/treegrid/models/infinite-scroll-settings.js","../src/treegrid/base/treegrid.js","../src/treegrid/actions/reorder.js","../src/treegrid/actions/resize.js","../src/treegrid/actions/rowdragdrop.js","../src/treegrid/models/rowdrop-settings.js","../src/treegrid/renderer/virtual-row-model-generator.js","../src/treegrid/actions/filter.js","../src/treegrid/actions/excel-export.js","../src/treegrid/actions/pdf-export.js","../src/treegrid/actions/page.js","../src/treegrid/actions/toolbar.js","../src/treegrid/actions/summary.js","../src/treegrid/actions/sort.js","../src/treegrid/actions/column-menu.js","../src/treegrid/actions/context-menu.js","../src/treegrid/actions/batch-edit.js","../src/treegrid/actions/edit.js","../src/treegrid/actions/command-column.js","../src/treegrid/actions/detail-row.js","../src/treegrid/renderer/virtual-tree-content-render.js","../src/treegrid/actions/virtual-scroll.js","../src/treegrid/actions/column-chooser.js","../src/treegrid/actions/infinite-scroll.js"],"sourcesContent":["import { getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, ODataAdaptor, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { WebApiAdaptor, WebMethodAdaptor, CacheAdaptor } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Specifies whether remote data binding\n */\nexport function isRemoteData(parent) {\n if (parent.dataSource instanceof DataManager) {\n var adaptor = parent.dataSource.adaptor;\n return (adaptor instanceof ODataAdaptor ||\n (adaptor instanceof WebApiAdaptor) || (adaptor instanceof WebMethodAdaptor) ||\n (adaptor instanceof CacheAdaptor) || adaptor instanceof UrlAdaptor);\n }\n return false;\n}\n/**\n * @param {TreeGrid | IGrid} parent - Tree Grid or Grid instance\n * @returns {boolean} - Returns whether custom binding\n */\nexport function isCountRequired(parent) {\n if (parent.dataSource && 'result' in parent.dataSource) {\n return true;\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether checkbox column is enabled\n */\nexport function isCheckboxcolumn(parent) {\n for (var i = 0; i < parent.columns.length; i++) {\n if (parent.columns[i].showCheckbox) {\n return true;\n }\n }\n return false;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether filtering and searching done\n */\nexport function isFilterChildHierarchy(parent) {\n if ((!isNullOrUndefined(parent.grid.searchSettings.key) && parent.grid.searchSettings.key !== '' &&\n (parent.searchSettings.hierarchyMode === 'Child' || parent.searchSettings.hierarchyMode === 'None')) ||\n (parent.allowFiltering && parent.grid.filterSettings.columns.length &&\n (parent.filterSettings.hierarchyMode === 'Child' || parent.filterSettings.hierarchyMode === 'None'))) {\n return true;\n }\n return false;\n}\n/**\n * @param {Object} records - Define records for which parent records has to be found\n * @hidden\n * @returns {Object} - Returns parent records collection\n */\nexport function findParentRecords(records) {\n var datas = [];\n var recordsLength = Object.keys(records).length;\n for (var i = 0, len = recordsLength; i < len; i++) {\n var hasChild = getObject('hasChildRecords', records[i]);\n if (hasChild) {\n datas.push(records[i]);\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns the expand status of record\n * @param {ITreeData} record - Define the record for which expand status has be found\n * @param {ITreeData[]} parents - Parent Data collection\n * @hidden\n */\nexport function getExpandStatus(parent, record, parents) {\n var parentRecord = isNullOrUndefined(record.parentItem) ? null :\n getParentData(parent, record.parentItem.uniqueID);\n var childParent;\n if (parentRecord != null) {\n if (parent.initialRender && !isNullOrUndefined(parentRecord[parent.expandStateMapping])\n && !parentRecord[parent.expandStateMapping]) {\n parentRecord.expanded = false;\n return false;\n }\n else if (parentRecord.expanded === false) {\n return false;\n }\n else if (parentRecord.parentItem) {\n childParent = getParentData(parent, parentRecord.parentItem.uniqueID);\n if (childParent && parent.initialRender && !isNullOrUndefined(childParent[parent.expandStateMapping])\n && !childParent[parent.expandStateMapping]) {\n childParent.expanded = false;\n return false;\n }\n if (childParent && childParent.expanded === false) {\n return false;\n }\n else if (childParent) {\n return getExpandStatus(parent, childParent, parents);\n }\n return true;\n }\n else {\n return true;\n }\n }\n else {\n return true;\n }\n}\n/**\n * @param {ITreeData} records - Define the record for which child records has to be found\n * @returns {Object[]} - Returns child records collection\n * @hidden\n */\nexport function findChildrenRecords(records) {\n var datas = [];\n if (isNullOrUndefined(records) || (!records.hasChildRecords && !isNullOrUndefined(records.childRecords)\n && !records.childRecords.length)) {\n return [];\n }\n if (!isNullOrUndefined(records.childRecords)) {\n var childRecords = records.childRecords;\n var keys = Object.keys(childRecords);\n for (var i = 0, len = keys.length; i < len; i++) {\n datas.push(childRecords[i]);\n if (childRecords[i].hasChildRecords || (!isNullOrUndefined(childRecords[i].childRecords) &&\n childRecords[i].childRecords.length)) {\n datas = datas.concat(findChildrenRecords(childRecords[i]));\n }\n }\n }\n return datas;\n}\n/**\n * @param {TreeGrid} parent - Tree Grid instance\n * @returns {boolean} - Returns whether local data binding\n */\nexport function isOffline(parent) {\n if (isRemoteData(parent)) {\n var dm = parent.dataSource;\n return !isNullOrUndefined(dm.ready);\n }\n return true;\n}\n/**\n * @param {Object[]} array - Defines the array to be cloned\n * @returns {Object[]} - Returns cloned array collection\n */\nexport function extendArray(array) {\n var objArr = [];\n var obj;\n var keys;\n for (var i = 0; array && i < array.length; i++) {\n keys = Object.keys(array[i]);\n obj = {};\n for (var j = 0; j < keys.length; j++) {\n obj[keys[j]] = array[i][keys[j]];\n }\n objArr.push(obj);\n }\n return objArr;\n}\n/**\n * @param {ITreeData} value - Defined the dirty data to be cleaned\n * @returns {ITreeData} - Returns cleaned original data\n */\nexport function getPlainData(value) {\n delete value.hasChildRecords;\n delete value.childRecords;\n delete value.index;\n delete value.parentItem;\n delete value.level;\n delete value.taskData;\n delete value.uniqueID;\n return value;\n}\n/**\n * @param {TreeGrid} parent - TreeGrid instance\n * @param {string} value - IdMapping field name\n * @param {boolean} requireFilter - Specified whether treegrid data is filtered\n * @returns {ITreeData} - Returns IdMapping matched record\n */\nexport function getParentData(parent, value, requireFilter) {\n if (requireFilter) {\n var idFilter = 'uniqueIDFilterCollection';\n return parent[idFilter][value];\n }\n else {\n var id = 'uniqueIDCollection';\n return parent[id][value];\n }\n}\n/**\n * @param {HTMLTableRowElement} el - Row element\n * @returns {boolean} - Returns whether hidden\n */\nexport function isHidden(el) {\n var style = window.getComputedStyle(el);\n return ((style.display === 'none') || (style.visibility === 'hidden'));\n}\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { extendArray, getPlainData, getParentData } from '../utils';\n/**\n * Performs CRUD update to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {string} columnName - Column field name\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function editAction(details, control, isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord) {\n var value = details.value;\n var action = details.action;\n var changedRecords = 'changedRecords';\n var i;\n var j;\n var addedRecords = 'addedRecords';\n var batchChanges;\n var key = control.grid.getPrimaryKeyFieldNames()[0];\n var treeData = control.dataSource instanceof DataManager ?\n control.dataSource.dataSource.json : control.dataSource;\n var modifiedData = [];\n var originalData = value;\n var isSkip = false;\n if (control.editSettings.mode === 'Batch') {\n batchChanges = control.grid.editModule.getBatchChanges();\n }\n if (action === 'add' || (action === 'batchsave' && (control.editSettings.mode === 'Batch'\n && batchChanges[addedRecords].length))) {\n var addAct = addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord);\n value = addAct.value;\n isSkip = addAct.isSkip;\n }\n if (value instanceof Array) {\n modifiedData = extendArray(value);\n }\n else {\n modifiedData.push(extend({}, value));\n }\n if (!isSkip && (action !== 'add' ||\n (control.editSettings.newRowPosition !== 'Top' && control.editSettings.newRowPosition !== 'Bottom'))) {\n for (var k = 0; k < modifiedData.length; k++) {\n if (typeof (modifiedData[k][key]) === 'object') {\n modifiedData[k] = modifiedData[k][key];\n }\n var keys = modifiedData[k].taskData ? Object.keys(modifiedData[k].taskData) :\n Object.keys(modifiedData[k]);\n i = treeData.length;\n var _loop_1 = function () {\n if (treeData[i][key] === modifiedData[k][key]) {\n if (action === 'delete') {\n var currentData_1 = treeData[i];\n treeData.splice(i, 1);\n if (isSelfReference) {\n if (!isNullOrUndefined(currentData_1[control.parentIdMapping])) {\n var parentData = control.flatData.filter(function (e) {\n return e[control.idMapping] === currentData_1[control.parentIdMapping];\n })[0];\n var childRecords = parentData ? parentData[control.childMapping] : [];\n for (var p = childRecords.length - 1; p >= 0; p--) {\n if (childRecords[p][control.idMapping] === currentData_1[control.idMapping]) {\n if (!control.enableImmutableMode) {\n parentData['childRecords'].splice(p, 1);\n }\n childRecords.splice(p, 1);\n if (!childRecords.length) {\n parentData.hasChildRecords = false;\n updateParentRow(key, parentData, action, control, isSelfReference);\n }\n break;\n }\n }\n }\n return \"break\";\n }\n }\n else {\n if (action === 'edit') {\n for (j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(treeData[i], keys[j]) && ((control.editSettings.mode !== 'Cell'\n || (!isNullOrUndefined(batchChanges) && batchChanges[changedRecords].length === 0))\n || keys[j] === columnName)) {\n var editedData = getParentData(control, modifiedData[k].uniqueID);\n treeData[i][keys[j]] = modifiedData[k][keys[j]];\n if (editedData && editedData.taskData) {\n editedData.taskData[keys[j]] = editedData[keys[j]] = treeData[i][keys[j]];\n }\n }\n }\n }\n else if (action === 'add' || action === 'batchsave') {\n var index = void 0;\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData.taskData[control.parentIdMapping] = treeData[i][control.idMapping];\n treeData.splice(i + 1, 0, originalData.taskData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(treeData[i], control.childMapping)) {\n treeData[i][control.childMapping] = [];\n }\n treeData[i][control.childMapping].push(originalData.taskData);\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n treeData.splice(i + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i + 1], action, control, isSelfReference, originalData);\n }\n }\n else if (!addRowIndex) {\n index = 0;\n treeData.splice(index, 0, originalData.taskData);\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n treeData.splice(i, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference, originalData);\n }\n }\n }\n return \"break\";\n }\n }\n else if (!isNullOrUndefined(treeData[i][control.childMapping])) {\n if (removeChildRecords(treeData[i][control.childMapping], modifiedData[k], action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, treeData[i], action, control, isSelfReference);\n }\n }\n };\n while (i-- && i >= 0) {\n var state_1 = _loop_1();\n if (state_1 === \"break\")\n break;\n }\n }\n }\n}\n/**\n * Performs Add action to Tree Grid data source\n *\n * @param {{value: ITreeData, action: string }} details - Gets modified record value and CRUD action type\n * @param {TreeGrid} details.value - Gets modified record value\n * @param {string} details.action - CRUD action type\n * @param {Object[]} treeData - Tree Grid data source\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Denotes whether Self Referential data binding\n * @param {number} addRowIndex - New add row index\n * @param {number} selectedIndex - Selected Row index\n * @param {ITreeData} addRowRecord - Newly added record\n * @returns {void}\n */\nexport function addAction(details, treeData, control, isSelfReference, addRowIndex, selectedIndex, addRowRecord) {\n var value;\n var isSkip = false;\n var currentViewRecords = control.grid.getCurrentViewRecords();\n value = extend({}, details.value);\n value = getPlainData(value);\n switch (control.editSettings.newRowPosition) {\n case 'Top':\n treeData.unshift(value);\n isSkip = true;\n break;\n case 'Bottom':\n treeData.push(value);\n isSkip = true;\n break;\n case 'Above':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n value = extend({}, currentViewRecords[addRowIndex + 1]);\n value = getPlainData(value);\n }\n break;\n case 'Below':\n case 'Child':\n if (!isNullOrUndefined(addRowRecord)) {\n value = extend({}, addRowRecord);\n value = getPlainData(value);\n }\n else {\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var currentdata = currentViewRecords[addRowIndex];\n if (!isNullOrUndefined(currentdata) && currentdata[primaryKeys] === details.value[primaryKeys] || selectedIndex !== -1) {\n value = extend({}, currentdata);\n }\n else {\n value = extend({}, details.value);\n }\n value = getPlainData(value);\n var internalProperty = 'internalProperties';\n control.editModule[internalProperty].taskData = value;\n }\n if (selectedIndex === -1) {\n treeData.unshift(value);\n isSkip = true;\n }\n }\n return { value: value, isSkip: isSkip };\n}\n/**\n * @param {ITreeData[]} childRecords - Child Records collection\n * @param {Object} modifiedData - Modified data in crud action\n * @param {string} action - crud action type\n * @param {string} key - Primary key field name\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether Self Referential data binding\n * @param {ITreeData} originalData - Non updated data from data source, of edited data\n * @param {string} columnName - column field name\n * @returns {boolean} Returns whether child records exists\n */\nexport function removeChildRecords(childRecords, modifiedData, action, key, control, isSelfReference, originalData, columnName) {\n var isChildAll = false;\n var j = childRecords.length;\n while (j-- && j >= 0) {\n if (childRecords[j][key] === modifiedData[key] ||\n (isSelfReference && childRecords[j][control.parentIdMapping] === modifiedData[control.idMapping])) {\n if (action === 'edit') {\n var keys = Object.keys(modifiedData);\n var editedData = getParentData(control, modifiedData.uniqueID);\n for (var i = 0; i < keys.length; i++) {\n if (Object.prototype.hasOwnProperty.call(childRecords[j], keys[i]) && (control.editSettings.mode !== 'Cell' || keys[i] === columnName)) {\n editedData[keys[i]] = editedData.taskData[keys[i]] = childRecords[j][keys[i]] = modifiedData[keys[i]];\n if (control.grid.editSettings.mode === 'Normal' && control.editSettings.mode === 'Cell') {\n var editModule = 'editModule';\n control.grid.editModule[editModule].editRowIndex = modifiedData.index;\n control.grid.editModule[editModule].updateCurrentViewData(modifiedData);\n }\n }\n }\n break;\n }\n else if (action === 'add' || action === 'batchsave') {\n if (control.editSettings.newRowPosition === 'Child') {\n if (isSelfReference) {\n originalData[control.parentIdMapping] = childRecords[j][control.idMapping];\n childRecords.splice(j + 1, 0, originalData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n else {\n if (!Object.prototype.hasOwnProperty.call(childRecords[j], control.childMapping)) {\n childRecords[j][control.childMapping] = [];\n }\n childRecords[j][control.childMapping].push(originalData.taskData);\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Above') {\n childRecords.splice(j, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n else if (control.editSettings.newRowPosition === 'Below') {\n childRecords.splice(j + 1, 0, originalData.taskData);\n if (!isNullOrUndefined(originalData.parentItem)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference, originalData);\n }\n }\n }\n else {\n childRecords.splice(j, 1);\n if (!childRecords.length) {\n isChildAll = true;\n }\n }\n }\n else if (!isNullOrUndefined(childRecords[j][control.childMapping])) {\n if (removeChildRecords(childRecords[j][control.childMapping], modifiedData, action, key, control, isSelfReference, originalData, columnName)) {\n updateParentRow(key, childRecords[j], action, control, isSelfReference);\n }\n }\n }\n return isChildAll;\n}\n/**\n * @param {string} key - Primary key field name\n * @param {ITreeData} record - Parent Record which has to be updated\n * @param {string} action - CRUD action type\n * @param {TreeGrid} control - Tree Grid instance\n * @param {boolean} isSelfReference - Specified whether self referential data binding\n * @param {ITreeData} child - Specifies child record\n * @returns {void}\n */\nexport function updateParentRow(key, record, action, control, isSelfReference, child) {\n if ((control.editSettings.newRowPosition === 'Above' || control.editSettings.newRowPosition === 'Below')\n && ((action === 'add' || action === 'batchsave')) && !isNullOrUndefined(child.parentItem)) {\n var parentData = getParentData(control, child.parentItem.uniqueID);\n parentData.childRecords.push(child);\n }\n else {\n var currentRecords = control.grid.getCurrentViewRecords();\n var index_1;\n currentRecords.map(function (e, i) { if (e[key] === record[key]) {\n index_1 = i;\n return;\n } });\n if (!isNullOrUndefined(index_1)) {\n record = currentRecords[index_1];\n }\n if (control.enableVirtualization && isNullOrUndefined(record) && !isNullOrUndefined(child)) {\n record = getValue('uniqueIDCollection.' + child.parentUniqueID, control);\n }\n if (!isSelfReference && !isNullOrUndefined(record.childRecords) && record.childRecords.length) {\n record.hasChildRecords = true;\n }\n else {\n record.hasChildRecords = false;\n }\n if (action === 'add' || action === 'batchsave') {\n record.expanded = true;\n record.hasChildRecords = true;\n if (control.sortSettings.columns.length && isNullOrUndefined(child)) {\n child = currentRecords.filter(function (e) {\n if (e.parentUniqueID === record.uniqueID) {\n return e;\n }\n else {\n return null;\n }\n });\n }\n var childRecords = child ? child instanceof Array ? child[0] : child : currentRecords[index_1 + 1];\n if (control.editSettings.newRowPosition !== 'Below') {\n if (!Object.prototype.hasOwnProperty.call(record, 'childRecords')) {\n record.childRecords = [];\n }\n else {\n if (!isNullOrUndefined(child) && record[key] !== child[key]) {\n record.childRecords.push(child);\n }\n }\n if (record.childRecords.indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record.childRecords.unshift(childRecords);\n }\n if (isSelfReference) {\n if (!Object.prototype.hasOwnProperty.call(record, control.childMapping)) {\n record[control.childMapping] = [];\n }\n if (record[control.childMapping].indexOf(childRecords) === -1 && record[key] !== child[key]) {\n record[control.childMapping].unshift(childRecords);\n }\n }\n }\n }\n var primaryKeys = control.grid.getPrimaryKeyFieldNames()[0];\n var data = control.grid.dataSource instanceof DataManager ?\n control.grid.dataSource.dataSource.json : control.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n if (data[i][primaryKeys] === record[primaryKeys]) {\n data[i] = record;\n break;\n }\n }\n control.grid.setRowData(key, record);\n var row = control.getRowByIndex(index_1);\n if (control.editSettings.mode === 'Batch') {\n if (action === 'add') {\n row = control.getRows()[control.grid.getCurrentViewRecords().indexOf(record)];\n }\n else {\n row = control.getRows()[control.grid.getRowIndexByPrimaryKey(record[key])];\n }\n }\n var movableRow = void 0;\n if (control.frozenRows || control.getFrozenColumns()) {\n movableRow = control.getMovableRowByIndex(index_1);\n }\n if (!control.enableVirtualization && !isNullOrUndefined(row) || !isNullOrUndefined(movableRow)) {\n var index_2 = control.treeColumnIndex;\n if (control.allowRowDragAndDrop && control.enableImmutableMode) {\n index_2 = index_2 + 1;\n }\n control.renderModule.cellRender({\n data: record, cell: row.cells[index_2] ? row.cells[index_2]\n : movableRow.cells[index_2 - control.getFrozenColumns()],\n column: control.grid.getColumns()[control.treeColumnIndex],\n requestType: action\n });\n if (control.enableImmutableMode && control['action'] === 'indenting' || control['action'] === 'outdenting') {\n control.renderModule.RowModifier({\n data: record, row: row\n });\n }\n }\n }\n}\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Represents TreeGrid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n *\n * @default true\n */\n this.allowEditing = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n *\n * @default {}\n */\n this.edit = {};\n /**\n * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n *\n * @default true\n */\n this.disableHtmlEncode = true;\n /**\n * If `allowReordering` set to false, then it disables reorder of a particular column.\n * By default all columns can be reorder.\n *\n * @default true\n */\n this.allowReordering = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n *\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n *\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n *\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n *\n * @default true\n */\n this.allowResizing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n *\n * @default null\n */\n this.filter = {};\n merge(this, options);\n }\n /**\n * Update the State changes reflected for TreeGrid columndirective in react platform.\n *\n * @param {Column} column - specifies the column\n * @returns {void}\n * @hidden\n */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n //Refresh the react columnTemplates on state change\n if (this.parent && this.parent['isReact'] && keys[i] === 'template') {\n var refreshReactColumnTemplateByUid = 'refreshReactColumnTemplateByUid';\n this.parent.clipboardModule['treeGridParent'].renderModule[refreshReactColumnTemplateByUid](this.uid);\n }\n }\n };\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Represents the Tree Grid predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"uid\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"isForeignKey\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property('Parent')\n ], FilterSettings.prototype, \"hierarchyMode\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the textwrap behavior of the TreeGrid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Logger as GridLogger, Grid, detailLists } from '@syncfusion/ej2-grids';\n/**\n * Logger module for TreeGrid\n *\n * @hidden\n */\nvar DOC_URL = 'https://ej2.syncfusion.com/documentation/treegrid';\nvar BASE_DOC_URL = 'https://ej2.syncfusion.com/documentation';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar WARNING = '[EJ2TreeGrid.Warning]';\nvar ERROR = '[EJ2TreeGrid.Error]';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar INFO = '[EJ2TreeGrid.Info]';\nvar IsRowDDEnabled = false;\nvar Logger = /** @class */ (function (_super) {\n __extends(Logger, _super);\n function Logger(parent) {\n var _this = this;\n Grid.Inject(GridLogger);\n _this = _super.call(this, parent) || this;\n return _this;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n Logger.prototype.getModuleName = function () {\n return 'logger';\n };\n Logger.prototype.log = function (types, args) {\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n for (var i = 0; i < type.length; i++) {\n var item = detailLists[type[i]];\n var cOp = item.check(args, this.parent);\n if (cOp.success) {\n var message = item.generateMessage(args, this.parent, cOp.options);\n message = message.replace('EJ2Grid', 'EJ2TreeGrid').replace('* Hierarchy Grid', '').replace('* Grouping', '');\n if (IsRowDDEnabled && type[i] === 'primary_column_missing') {\n message = message.replace('Editing', 'Row DragAndDrop');\n IsRowDDEnabled = false;\n }\n var index = message.indexOf('https');\n var gridurl = message.substring(index);\n if (type[i] === 'module_missing') {\n message = message.replace(gridurl, DOC_URL + '/modules');\n }\n else if (type[i] === 'primary_column_missing' || type[i] === 'selection_key_missing') {\n message = message.replace(gridurl, BASE_DOC_URL + '/api/treegrid/column/#isprimarykey');\n }\n else if (type[i] === 'grid_remote_edit') {\n message = message.replace(gridurl, DOC_URL + '/edit');\n }\n else if (type[i] === 'virtual_height') {\n message = message.replace(gridurl, DOC_URL + '/virtual');\n }\n else if (type[i] === 'check_datasource_columns') {\n message = message.replace(gridurl, DOC_URL + '/columns');\n }\n else if (type[i] === 'locale_missing') {\n message = message.replace(gridurl, DOC_URL + '/global-local/#localization');\n }\n if (type[i] === 'datasource_syntax_mismatch') {\n if (!isNullOrUndefined(this.treeGridObj) && !isNullOrUndefined(this.treeGridObj.dataStateChange)) {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n else {\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n }\n };\n Logger.prototype.treeLog = function (types, args, treeGrid) {\n this.treeGridObj = treeGrid;\n if (!(types instanceof Array)) {\n types = [types];\n }\n var type = types;\n if (treeGrid.allowRowDragAndDrop && !treeGrid.columns.filter(function (column) { return column.isPrimaryKey; }).length) {\n IsRowDDEnabled = true;\n this.log('primary_column_missing', args);\n }\n for (var i = 0; i < type.length; i++) {\n var item = treeGridDetails[type[i]];\n var cOp = item.check(args, treeGrid);\n if (cOp.success) {\n var message = item.generateMessage(args, treeGrid, cOp.options);\n // eslint-disable-next-line no-console\n console[item.logType](message);\n }\n }\n };\n return Logger;\n}(GridLogger));\nexport { Logger };\nexport var treeGridDetails = {\n // eslint-disable-next-line camelcase\n mapping_fields_missing: {\n type: 'mapping_fields_missing',\n logType: 'error',\n check: function (args, parent) {\n var opt = { success: false };\n if ((isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.childMapping)\n && isNullOrUndefined(parent.parentIdMapping)) ||\n (!isNullOrUndefined(parent.idMapping) && isNullOrUndefined(parent.parentIdMapping)) ||\n (isNullOrUndefined(parent.idMapping) && !isNullOrUndefined(parent.parentIdMapping))) {\n opt = { success: true };\n }\n return opt;\n },\n generateMessage: function () {\n return ERROR + ':' + ' MAPPING FIELDS MISSING \\n' + 'One of the following fields is missing. It is ' +\n 'required for the hierarchical relationship of records in TreeGrid:\\n' +\n '* childMapping\\n' + '* idMapping\\n' + '* parentIdMapping\\n' +\n 'Refer to the following documentation links for more details.\\n' +\n (BASE_DOC_URL + \"/api/treegrid#childmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#idmapping\") + '\\n' +\n (BASE_DOC_URL + \"/api/treegrid#$parentidmapping\");\n }\n }\n};\n","/**\n * @hidden\n */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var checkboxChange = 'checkboxChange';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var expanded = 'expanded';\n/** @hidden */\nexport var expanding = 'expanding';\n/** @hidden */\nexport var collapsed = 'collapsed';\n/** @hidden */\nexport var collapsing = 'collapsing';\n/** @hidden */\nexport var remoteExpand = 'remoteExpand';\n/** @hidden */\nexport var localPagedExpandCollapse = 'localPagedExpandCollapse';\n/** @hidden */\nexport var pagingActions = 'pagingActions';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var savePreviousRowPosition = 'savePreviousRowPosition';\n/** @hidden */\nexport var crudAction = 'crudAction';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var beginAdd = 'beginAdd';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var batchSave = 'batchSave';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var virtualColumnIndex = 'virtualColumnIndex';\n/** @hidden */\nexport var virtualActionArgs = 'virtual-action-args';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var dataListener = 'data-listener';\n/** @hidden */\nexport var indexModifier = 'index-modifier';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowsAdd = 'rows-add';\n/** @hidden */\nexport var rowsRemove = 'rows-remove';\n/** @hidden */\nexport var rowdraging = 'row-draging';\n/** @hidden */\nexport var rowDropped = 'row-dropped';\n/** @hidden */\nexport var autoCol = 'auto-col';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Clipboard as GridClipboard } from '@syncfusion/ej2-grids';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n *\n * @hidden\n */\nvar TreeClipboard = /** @class */ (function (_super) {\n __extends(TreeClipboard, _super);\n function TreeClipboard(parent) {\n var _this = _super.call(this, parent.grid) || this;\n _this.treeCopyContent = '';\n _this.copiedUniqueIdCollection = [];\n _this.treeGridParent = parent;\n return _this;\n }\n TreeClipboard.prototype.setCopyData = function (withHeader) {\n var copyContent = 'copyContent';\n var getCopyData = 'getCopyData';\n var isSelect = 'isSelect';\n var uniqueID = 'uniqueID';\n var currentRecords = this.treeGridParent.getCurrentViewRecords();\n if (window.getSelection().toString() === '') {\n this.clipBoardTextArea.value = this[copyContent] = '';\n var rows = this.treeGridParent.grid.getRows();\n if (this.treeGridParent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.treeGridParent.getSelectedRowIndexes().sort(function (a, b) {\n return a - b;\n });\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.treeCopyContent += '\\n';\n }\n if (!rows[selectedIndexes[i]].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n var uniqueid = this.treeGridParent.getSelectedRecords()[i][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n if (this.treeGridParent.copyHierarchyMode === 'Parent' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.parentContentData(currentRecords, selectedIndexes[i], rows, withHeader, i);\n }\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += this[copyContent];\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n if (this.treeGridParent.copyHierarchyMode === 'Child' || this.treeGridParent.copyHierarchyMode === 'Both') {\n this.childContentData(currentRecords, selectedIndexes[i], rows, withHeader);\n }\n }\n }\n }\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.treeGridParent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.treeGridParent.getVisibleColumns()[i].headerText;\n }\n this[getCopyData](headerTextArray, false, '\\t', withHeader);\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n var args = {\n data: this.treeCopyContent,\n cancel: false\n };\n this.treeGridParent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this[copyContent] = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this[isSelect] = true;\n this.copiedUniqueIdCollection = [];\n this.treeCopyContent = '';\n }\n else {\n _super.prototype.setCopyData.call(this, withHeader);\n }\n }\n };\n TreeClipboard.prototype.parentContentData = function (currentRecords, selectedIndex, rows, withHeader, index) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var level = 'level';\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem])) {\n var treeLevel = currentRecords[selectedIndex][parentItem][level];\n for (var i = 0; i < treeLevel + 1; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(currentRecords[selectedIndex][parentItem]) &&\n currentRecords[j][uniqueID] === currentRecords[selectedIndex][parentItem][uniqueID]) {\n selectedIndex = j;\n var cells = [].slice.call(rows[selectedIndex].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n if (index > 0) {\n this.treeCopyContent = this.treeCopyContent + this[copyContent] + '\\n';\n }\n else {\n this.treeCopyContent = this[copyContent] + '\\n' + this.treeCopyContent;\n }\n this.copiedUniqueIdCollection.push(uniqueid);\n this[copyContent] = '';\n break;\n }\n }\n }\n }\n }\n };\n TreeClipboard.prototype.copy = function (withHeader) {\n _super.prototype.copy.call(this, withHeader);\n };\n TreeClipboard.prototype.paste = function (data, rowIndex, colIndex) {\n _super.prototype.paste.call(this, data, rowIndex, colIndex);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns clipboard module name\n */\n TreeClipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n *\n * @returns {void}\n * @hidden\n */\n TreeClipboard.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n TreeClipboard.prototype.childContentData = function (currentRecords, selectedIndex, rows, withHeader) {\n var getCopyData = 'getCopyData';\n var copyContent = 'copyContent';\n var childRecords = 'childRecords';\n var hasChildRecords = 'hasChildRecords';\n var uniqueID = 'uniqueID';\n if (currentRecords[selectedIndex][hasChildRecords]) {\n var childData = currentRecords[selectedIndex][childRecords];\n for (var i = 0; i < childData.length; i++) {\n for (var j = 0; j < currentRecords.length; j++) {\n if (!isNullOrUndefined(childData[i][uniqueID]) && currentRecords[j][uniqueID] === childData[i][uniqueID]) {\n if ((!isNullOrUndefined(rows[j])) && !rows[j].classList.contains('e-summaryrow')) {\n var cells = [].slice.call(rows[j].querySelectorAll('.e-rowcell'));\n var uniqueid = currentRecords[j][uniqueID];\n if (this.copiedUniqueIdCollection.indexOf(uniqueid) === -1) {\n this[getCopyData](cells, false, '\\t', withHeader);\n this.treeCopyContent += ('\\n' + this[copyContent]);\n this[copyContent] = '';\n this.copiedUniqueIdCollection.push(uniqueid);\n this.childContentData(currentRecords, j, rows, withHeader);\n }\n }\n break;\n }\n }\n }\n }\n };\n return TreeClipboard;\n}(GridClipboard));\nexport { TreeClipboard };\n","import { isNullOrUndefined, removeClass } from '@syncfusion/ej2-base';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, getObject } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { getParentData, isRemoteData, isCheckboxcolumn, findChildrenRecords } from '../utils';\n/**\n * TreeGrid Selection module\n *\n * @hidden\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for Selection module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Selection(parent) {\n this.parent = parent;\n this.selectedItems = [];\n this.selectedIndexes = [];\n this.filteredList = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Selection module name\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n Selection.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.headerCheckbox, this);\n this.parent.on('columnCheckbox', this.columnCheckbox, this);\n this.parent.on('updateGridActions', this.updateGridActions, this);\n this.parent.grid.on('colgroup-refresh', this.headerCheckbox, this);\n this.parent.on('checkboxSelection', this.checkboxSelection, this);\n };\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.headerCheckbox);\n this.parent.off('columnCheckbox', this.columnCheckbox);\n this.parent.grid.off('colgroup-refresh', this.headerCheckbox);\n this.parent.off('checkboxSelection', this.checkboxSelection);\n this.parent.off('updateGridActions', this.updateGridActions);\n };\n /**\n * To destroy the Selection\n *\n * @returns {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.removeEventListener();\n };\n Selection.prototype.checkboxSelection = function (args) {\n var target = getObject('target', args);\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n var checkBox;\n if (checkWrap && checkWrap.querySelectorAll('.e-treecheckselect').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n var rowIndex = [];\n rowIndex.push(target.closest('tr').rowIndex);\n this.selectCheckboxes(rowIndex);\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'), target.closest('tr'));\n }\n else if (checkWrap && checkWrap.querySelectorAll('.e-treeselectall').length > 0 && this.parent.autoCheckHierarchy) {\n var checkBoxvalue = !checkWrap.querySelector('.e-frame').classList.contains('e-check')\n && !checkWrap.querySelector('.e-frame').classList.contains('e-stop');\n this.headerSelection(checkBoxvalue);\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n this.triggerChkChangeEvent(checkBox, checkBoxvalue, target.closest('tr'));\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState, rowElement) {\n var data = this.parent.getCurrentViewRecords()[rowElement.rowIndex];\n var args = { checked: checkState, target: checkBox, rowElement: rowElement,\n rowData: checkBox.classList.contains('e-treeselectall')\n ? this.parent.getCheckedRecords() : data };\n this.parent.trigger(events.checkboxChange, args);\n };\n Selection.prototype.getCheckboxcolumnIndex = function () {\n var mappingUid;\n var columnIndex;\n var stackedHeader = 'stackedHeader';\n var columnModel = 'columnModel';\n var columns = this.parent[stackedHeader] ? this.parent[columnModel] : (this.parent.columns);\n for (var col = 0; col < columns.length; col++) {\n if (columns[col].showCheckbox) {\n mappingUid = columns[col].uid;\n }\n }\n var headerCelllength = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv').length;\n for (var j = 0; j < headerCelllength; j++) {\n var headercell = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[j];\n if (headercell.getAttribute('e-mappinguid') === mappingUid) {\n columnIndex = j;\n }\n }\n return columnIndex;\n };\n Selection.prototype.headerCheckbox = function () {\n this.columnIndex = this.getCheckboxcolumnIndex();\n if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length === 0) {\n var headerElement = this.parent.getHeaderContent().querySelectorAll('.e-headercelldiv')[this.columnIndex];\n var value = false;\n var rowChkBox = this.parent.createElement('input', { className: 'e-treeselectall', attrs: { 'type': 'checkbox' } });\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n if (!isNullOrUndefined(headerElement)) {\n headerElement.insertBefore(checkWrap, headerElement.firstChild);\n }\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n else if (this.columnIndex > -1 && this.parent.getHeaderContent().querySelectorAll('.e-treeselectall').length > 0) {\n var checkWrap = this.parent.getHeaderContent().querySelectorAll('.e-checkbox-wrapper')[0];\n var checkBoxvalue = checkWrap.querySelector('.e-frame').classList.contains('e-check');\n if (this.parent.autoCheckHierarchy && checkBoxvalue) {\n this.headerSelection(checkBoxvalue);\n }\n }\n };\n Selection.prototype.renderColumnCheckbox = function (args) {\n var rowChkBox = this.parent.createElement('input', { className: 'e-treecheckselect', attrs: { 'type': 'checkbox' } });\n var data = args.data;\n args.cell.classList.add('e-treegridcheckbox');\n args.cell.setAttribute('aria-label', 'checkbox');\n var value = (isNullOrUndefined(data.checkboxState) || data.checkboxState === 'uncheck') ? false : true;\n var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n checkWrap.classList.add('e-hierarchycheckbox');\n if (this.parent.allowTextWrap) {\n checkWrap.querySelector('.e-frame').style.width = '18px';\n }\n if (data.checkboxState === 'indeterminate') {\n var checkbox = checkWrap.querySelectorAll('.e-frame')[0];\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n checkWrap.querySelector('.e-frame').classList.add('e-stop');\n }\n checkWrap.insertBefore(rowChkBox.cloneNode(), checkWrap.firstChild);\n return checkWrap;\n };\n Selection.prototype.columnCheckbox = function (container) {\n var checkWrap = this.renderColumnCheckbox(container);\n var containerELe = container.cell.querySelector('.e-treecolumn-container');\n if (!isNullOrUndefined(containerELe)) {\n if (!container.cell.querySelector('.e-hierarchycheckbox')) {\n containerELe.insertBefore(checkWrap, containerELe.querySelectorAll('.e-treecell')[0]);\n }\n }\n else {\n var spanEle = this.parent.createElement('span', { className: 'e-treecheckbox' });\n var data = container.cell.innerHTML;\n container.cell.innerHTML = '';\n spanEle.innerHTML = data;\n var divEle = this.parent.createElement('div', { className: 'e-treecheckbox-container' });\n divEle.appendChild(checkWrap);\n divEle.appendChild(spanEle);\n container.cell.appendChild(divEle);\n }\n };\n Selection.prototype.selectCheckboxes = function (rowIndexes) {\n for (var i = 0; i < rowIndexes.length; i++) {\n var record = this.parent.getCurrentViewRecords()[rowIndexes[i]];\n var flatRecord = getParentData(this.parent, record.uniqueID);\n record = flatRecord;\n var checkboxState = (record.checkboxState === 'uncheck') ? 'check' : 'uncheck';\n record.checkboxState = checkboxState;\n var keys = Object.keys(record);\n for (var j = 0; j < keys.length; j++) {\n if (Object.prototype.hasOwnProperty.call(flatRecord, keys[j])) {\n flatRecord[keys[j]] = record[keys[j]];\n }\n }\n this.traverSelection(record, checkboxState, false);\n if (this.parent.autoCheckHierarchy) {\n this.headerSelection();\n }\n }\n };\n Selection.prototype.traverSelection = function (record, checkboxState, ischildItem) {\n var length = 0;\n this.updateSelectedItems(record, checkboxState);\n if (!ischildItem && record.parentItem && this.parent.autoCheckHierarchy) {\n this.updateParentSelection(record.parentItem);\n }\n if (record.childRecords && this.parent.autoCheckHierarchy) {\n var childRecords = record.childRecords;\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords.length;\n for (var count = 0; count < length; count++) {\n if (!childRecords[count].isSummaryRow) {\n if (childRecords[count].hasChildRecords) {\n this.traverSelection(childRecords[count], checkboxState, true);\n }\n else {\n this.updateSelectedItems(childRecords[count], checkboxState);\n }\n }\n }\n }\n };\n Selection.prototype.getFilteredChildRecords = function (childRecords) {\n var _this = this;\n var filteredChildRecords = childRecords.filter(function (e) {\n return _this.parent.filterModule.filteredResult.indexOf(e) > -1;\n });\n return filteredChildRecords;\n };\n Selection.prototype.updateParentSelection = function (parentRecord) {\n var length = 0;\n var childRecords = [];\n var record = getParentData(this.parent, parentRecord.uniqueID);\n if (record && record.childRecords) {\n childRecords = record.childRecords;\n }\n if (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length > 0 && this.parent.autoCheckHierarchy) {\n childRecords = this.getFilteredChildRecords(childRecords);\n }\n length = childRecords && childRecords.length;\n var indeter = 0;\n var checkChildRecords = 0;\n if (!isNullOrUndefined(record)) {\n for (var i = 0; i < childRecords.length; i++) {\n var currentRecord = getParentData(this.parent, childRecords[i].uniqueID);\n var checkBoxRecord = currentRecord;\n if (!isNullOrUndefined(checkBoxRecord)) {\n if (checkBoxRecord.checkboxState === 'indeterminate') {\n indeter++;\n }\n else if (checkBoxRecord.checkboxState === 'check') {\n checkChildRecords++;\n }\n }\n }\n if (indeter > 0 || (checkChildRecords > 0 && checkChildRecords !== length)) {\n record.checkboxState = 'indeterminate';\n }\n else if (checkChildRecords === 0 && indeter === 0) {\n record.checkboxState = 'uncheck';\n }\n else {\n record.checkboxState = 'check';\n }\n this.updateSelectedItems(record, record.checkboxState);\n if (record.parentItem) {\n this.updateParentSelection(record.parentItem);\n }\n }\n };\n Selection.prototype.headerSelection = function (checkAll) {\n var _this = this;\n var index = -1;\n var length = 0;\n if (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) {\n var filterResult = this.parent.filterModule.filteredResult;\n if (this.filteredList.length === 0) {\n this.filteredList = filterResult;\n }\n else {\n if (this.filteredList !== filterResult) {\n this.filteredList = filterResult;\n }\n }\n }\n if (this.filteredList.length > 0) {\n if (!this.parent.filterSettings.columns.length && this.filteredList.length) {\n this.filteredList = [];\n }\n }\n var data = (!isNullOrUndefined(this.parent.filterModule) &&\n (this.filteredList.length > 0)) ? this.filteredList :\n this.parent.flatData;\n data = isRemoteData(this.parent) ? this.parent.getCurrentViewRecords() : data;\n if (!isNullOrUndefined(checkAll)) {\n for (var i = 0; i < data.length; i++) {\n if (checkAll) {\n if (data[i].checkboxState === 'check') {\n continue;\n }\n data[i].checkboxState = 'check';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n }\n else {\n index = this.selectedItems.indexOf(data[i]);\n if (index > -1) {\n data[i].checkboxState = 'uncheck';\n this.updateSelectedItems(data[i], data[i].checkboxState);\n if (this.parent.autoCheckHierarchy) {\n this.updateParentSelection(data[i]);\n }\n }\n }\n }\n }\n if (checkAll === false && this.parent.enableVirtualization) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n data.filter(function (rec) {\n rec.checkboxState = 'uncheck';\n _this.updateSelectedItems(rec, rec.checkboxState);\n });\n }\n length = this.selectedItems.length;\n var checkbox = this.parent.getHeaderContent().querySelectorAll('.e-frame')[0];\n if (length > 0 && data.length > 0) {\n if (length !== data.length && !checkAll) {\n removeClass([checkbox], ['e-check']);\n checkbox.classList.add('e-stop');\n }\n else {\n removeClass([checkbox], ['e-stop']);\n checkbox.classList.add('e-check');\n }\n }\n else {\n removeClass([checkbox], ['e-check', 'e-stop']);\n }\n };\n Selection.prototype.updateSelectedItems = function (currentRecord, checkState) {\n var record = this.parent.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === currentRecord.uniqueID;\n });\n var checkedRecord;\n var recordIndex = this.parent.getCurrentViewRecords().indexOf(record[0]);\n var checkboxRecord = getParentData(this.parent, currentRecord.uniqueID);\n var checkbox;\n if (recordIndex > -1) {\n var tr = this.parent.getRows()[recordIndex];\n var movableTr = void 0;\n if (this.parent.frozenRows || this.parent.getFrozenColumns()) {\n movableTr = this.parent.getMovableDataRows()[recordIndex];\n }\n checkbox = tr.querySelectorAll('.e-frame')[0] ? tr.querySelectorAll('.e-frame')[0]\n : movableTr.querySelectorAll('.e-frame')[0];\n if (!isNullOrUndefined(checkbox)) {\n removeClass([checkbox], ['e-check', 'e-stop', 'e-uncheck']);\n }\n }\n checkedRecord = checkboxRecord;\n if (isNullOrUndefined(checkedRecord)) {\n checkedRecord = currentRecord;\n }\n checkedRecord.checkboxState = checkState;\n if (checkState === 'check' && isNullOrUndefined(currentRecord.isSummaryRow)) {\n if (recordIndex !== -1 && this.selectedIndexes.indexOf(recordIndex) === -1) {\n this.selectedIndexes.push(recordIndex);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (recordIndex !== -1 &&\n (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && this.parent.enableVirtualization && ((!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0))) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && (!isNullOrUndefined(this.parent.filterModule) &&\n this.parent.filterModule.filteredResult.length === 0)) {\n this.selectedItems.push(checkedRecord);\n }\n if (this.selectedItems.indexOf(checkedRecord) === -1 && isNullOrUndefined(this.parent.filterModule)) {\n this.selectedItems.push(checkedRecord);\n }\n }\n else if ((checkState === 'uncheck' || checkState === 'indeterminate') && isNullOrUndefined(currentRecord.isSummaryRow)) {\n var index = this.selectedItems.indexOf(checkedRecord);\n if (index !== -1) {\n this.selectedItems.splice(index, 1);\n }\n if (this.selectedIndexes.indexOf(recordIndex) !== -1) {\n var checkedIndex = this.selectedIndexes.indexOf(recordIndex);\n this.selectedIndexes.splice(checkedIndex, 1);\n }\n }\n var checkBoxclass = checkState === 'indeterminate' ? 'e-stop' : 'e-' + checkState;\n if (recordIndex > -1) {\n if (!isNullOrUndefined(checkbox)) {\n checkbox.classList.add(checkBoxclass);\n }\n }\n };\n Selection.prototype.updateGridActions = function (args) {\n var _this = this;\n var requestType = args.requestType;\n var childData;\n var childLength;\n if (isCheckboxcolumn(this.parent)) {\n if (this.parent.autoCheckHierarchy) {\n if ((requestType === 'sorting' || requestType === 'paging')) {\n var rows = this.parent.grid.getRows();\n childData = this.parent.getCurrentViewRecords();\n childLength = childData.length;\n this.selectedIndexes = [];\n for (var i = 0; i < childLength; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n this.updateSelectedItems(childData[i], childData[i].checkboxState);\n }\n }\n }\n else if (requestType === 'delete' || args.action === 'add') {\n var updatedData = [];\n if (requestType === 'delete') {\n updatedData = args.data;\n }\n else {\n updatedData.push(args.data);\n }\n for (var i = 0; i < updatedData.length; i++) {\n if (requestType === 'delete') {\n var index = this.parent.flatData.indexOf(updatedData[i]);\n var checkedIndex = this.selectedIndexes.indexOf(index);\n this.selectedIndexes.splice(checkedIndex, 1);\n this.updateSelectedItems(updatedData[i], 'uncheck');\n }\n if (!isNullOrUndefined(updatedData[i].parentItem)) {\n this.updateParentSelection(updatedData[i].parentItem);\n }\n }\n }\n else if (args.requestType === 'add' && this.parent.autoCheckHierarchy) {\n args.data.checkboxState = 'uncheck';\n }\n else if (requestType === 'filtering' || requestType === 'searching' || requestType === 'refresh'\n && !isRemoteData(this.parent)) {\n this.selectedItems = [];\n this.selectedIndexes = [];\n childData = (!isNullOrUndefined(this.parent.filterModule) && this.parent.filterModule.filteredResult.length > 0) ?\n this.parent.getCurrentViewRecords() : this.parent.flatData;\n childData.forEach(function (record) {\n if (_this.parent.enableVirtualization) {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n var child = findChildrenRecords(record);\n child = _this.getFilteredChildRecords(child);\n for (var i = 0; i < child.length; i++) {\n if (child[i].hasChildRecords) {\n _this.updateParentSelection(child[i]);\n }\n else if (!(child[i].hasChildRecords) && !isNullOrUndefined(child[i])) {\n _this.updateSelectedItems(child[i], child[i].checkboxState);\n }\n }\n }\n else {\n if (record.hasChildRecords) {\n _this.updateParentSelection(record);\n }\n else {\n _this.updateSelectedItems(record, record.checkboxState);\n }\n }\n });\n this.headerSelection();\n }\n }\n }\n };\n Selection.prototype.getCheckedrecords = function () {\n return this.selectedItems;\n };\n Selection.prototype.getCheckedRowIndexes = function () {\n return this.selectedIndexes;\n };\n return Selection;\n}());\nexport { Selection };\n","import { parentsUntil } from '@syncfusion/ej2-grids';\nimport { Grid, Freeze as FreezeColumn } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Freeze module\n *\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Freeze(parent) {\n Grid.Inject(FreezeColumn);\n this.parent = parent;\n this.addEventListener();\n }\n Freeze.prototype.addEventListener = function () {\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.grid.on('dblclick', this.dblClickHandler, this);\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.grid.off('dblclick', this.dblClickHandler);\n };\n Freeze.prototype.rowExpandCollapse = function (args) {\n var movableRows = this.parent.getMovableDataRows();\n var frozenrows = this.parent.getRows();\n var rows;\n var frozenRightRows;\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n frozenRightRows = this.parent.getFrozenRightRows().filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n if (!args.detailrows.length) {\n rows = movableRows.filter(function (e) {\n return e.querySelector('.e-gridrowindex' + args.record.index + 'level' + (args.record.level + 1));\n });\n }\n else {\n rows = args.detailrows;\n }\n for (var i = 0; i < rows.length; i++) {\n var rData = this.parent.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n rows[i].style.display = args.action;\n if (freeze) {\n frozenRightRows[i].style.display = args.action;\n }\n var queryselector = args.action === 'none' ? '.e-treecolumn-container .e-treegridcollapse'\n : '.e-treecolumn-container .e-treegridexpand';\n if (frozenrows[rows[i].rowIndex].querySelector(queryselector)) {\n var cRow = [];\n for (var i_1 = 0; i_1 < movableRows.length; i_1++) {\n if (movableRows[i_1].querySelector('.e-gridrowindex' + rData.index + 'level' + (rData.level + 1))) {\n cRow.push(movableRows[i_1]);\n }\n }\n if (cRow.length) {\n this.rowExpandCollapse({ detailrows: cRow, action: args.action });\n }\n }\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') &&\n this.parent.grid.editSettings.allowEditOnDblClick && this.parent.editSettings.mode !== 'Cell') {\n this.parent.grid.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n Freeze.prototype.dataBoundArg = function () {\n var checkboxColumn = this.parent.getColumns().filter(function (e) {\n return e.showCheckbox;\n });\n if (checkboxColumn.length && this.parent.freezeModule && this.parent.initialRender) {\n addClass([this.parent.element.getElementsByClassName('e-grid')[0]], 'e-checkselection');\n }\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Freeze module name\n */\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n return Freeze;\n}());\nexport { Freeze };\n","import * as events from '../base/constant';\nimport { Grid, getObject, Print as GridPrint } from '@syncfusion/ej2-grids';\nimport { addClass } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Print module\n *\n * @hidden\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for Print module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Print(parent) {\n this.parent = parent;\n Grid.Inject(GridPrint);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Print module name\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Print.prototype.addEventListener = function () {\n this.parent.grid.on(events.printGridInit, this.printTreeGrid, this);\n };\n Print.prototype.removeEventListener = function () {\n this.parent.grid.off(events.printGridInit, this.printTreeGrid);\n };\n Print.prototype.printTreeGrid = function (printGrid) {\n var grid = getObject('printgrid', printGrid);\n var gridElement = getObject('element', printGrid);\n grid.addEventListener(events.queryCellInfo, this.parent.grid.queryCellInfo);\n grid.addEventListener(events.rowDataBound, this.parent.grid.rowDataBound);\n grid.addEventListener(events.beforeDataBound, this.parent.grid.beforeDataBound);\n addClass([gridElement], 'e-treegrid');\n };\n Print.prototype.print = function () {\n this.parent.grid.print();\n };\n /**\n * To destroy the Print\n *\n * @returns {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the filtering behavior of the TreeGrid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property()\n ], SearchSettings.prototype, \"hierarchyMode\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the selection behavior of the TreeGrid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n __decorate([\n Property('Default')\n ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(true)\n ], SelectionSettings.prototype, \"enableToggle\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n","import { getObject, appendChildren } from '@syncfusion/ej2-grids';\nimport { templateCompiler, extend, CellRenderer } from '@syncfusion/ej2-grids';\nimport { addClass, createElement, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isRemoteData, isOffline, getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * TreeGrid render module\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Render(parent) {\n this.parent = parent;\n this.templateResult = null;\n this.parent.grid.on('template-result', this.columnTemplateResult, this);\n this.parent.grid.on('reactTemplateRender', this.reactTemplateRender, this);\n }\n /**\n * Updated row elements for TreeGrid\n *\n * @param {RowDataBoundEventArgs} args - Row details before its bound to DOM\n * @returns {void}\n */\n Render.prototype.RowModifier = function (args) {\n if (!args.data) {\n return;\n }\n var data = args.data;\n var parentData = data.parentItem;\n if (!isNullOrUndefined(data.parentItem) && !isFilterChildHierarchy(this.parent) &&\n (!(this.parent.allowPaging && !(this.parent.pageSettings.pageSizeMode === 'Root')) ||\n (isRemoteData(this.parent) && !isOffline(this.parent)))) {\n var collapsed = (this.parent.initialRender && (!(isNullOrUndefined(parentData[this.parent.expandStateMapping]) ||\n parentData[this.parent.expandStateMapping]) || this.parent.enableCollapseAll)) ||\n !getExpandStatus(this.parent, args.data, this.parent.grid.getCurrentViewRecords());\n if (collapsed) {\n args.row.style.display = 'none';\n }\n }\n if (isRemoteData(this.parent) && !isOffline(this.parent)) {\n var proxy_1 = this.parent;\n var parentrec = this.parent.getCurrentViewRecords().filter(function (rec) {\n return getValue(proxy_1.idMapping, rec) === getValue(proxy_1.parentIdMapping, data);\n });\n if (parentrec.length > 0) {\n var display = parentrec[0].expanded ? 'table-row' : 'none';\n args.row.setAttribute('style', 'display: ' + display + ';');\n }\n }\n //addClass([args.row], 'e-gridrowindex' + index + 'level' + (<ITreeData>args.data).level);\n var summaryRow = getObject('isSummaryRow', args.data);\n if (summaryRow) {\n addClass([args.row], 'e-summaryrow');\n }\n if (args.row.querySelector('.e-treegridexpand')) {\n args.row.setAttribute('aria-expanded', 'true');\n }\n else if (args.row.querySelector('.e-treegridcollapse')) {\n args.row.setAttribute('aria-expanded', 'false');\n }\n if (this.parent.enableCollapseAll && this.parent.initialRender) {\n if (!isNullOrUndefined(data.parentItem)) {\n args.row.style.display = 'none';\n }\n }\n this.parent.trigger(events.rowDataBound, args);\n };\n /**\n * cell renderer for tree column index cell\n *\n * @param {QueryCellInfoEventArgs} args - Cell detail before its bound to DOM\n * @returns {void}\n */\n Render.prototype.cellRender = function (args) {\n if (!args.data) {\n return;\n }\n var grid = this.parent.grid;\n var data = args.data;\n var index;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n var totalIconsWidth = 0;\n var cellElement;\n var column = this.parent.getColumnByUid(args.column.uid);\n var summaryRow = data.isSummaryRow;\n var frozenColumns = this.parent.getFrozenColumns();\n if (!isNullOrUndefined(data.parentItem)) {\n index = data.parentItem.index;\n }\n else {\n index = data.index;\n }\n var columnIndex;\n var getVirtualColIndexByUid = 'getVirtualColIndexByUid';\n if (this.parent.enableColumnVirtualization && !this.parent.initialRender) {\n columnIndex = this.parent[getVirtualColIndexByUid](args.column.uid);\n }\n else {\n columnIndex = grid.getColumnIndexByUid(args.column.uid);\n }\n if (columnIndex === this.parent.treeColumnIndex && (args.requestType === 'add' || args.requestType\n === 'rowDragAndDrop' || args.requestType === 'delete' || isNullOrUndefined(args.cell.querySelector('.e-treecell')))) {\n var container = createElement('div', { className: 'e-treecolumn-container' });\n var emptyExpandIcon = createElement('span', {\n className: 'e-icons e-none',\n styles: 'width: 10px; display: inline-block'\n });\n for (var n = 0; n < pad; n++) {\n totalIconsWidth += 10;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n var iconRequired = !isNullOrUndefined(data.hasFilteredChildRecords)\n ? data.hasFilteredChildRecords : data.hasChildRecords;\n if (iconRequired && !isNullOrUndefined(data.childRecords)) {\n iconRequired = !(data.childRecords.length === 0);\n }\n if (iconRequired) {\n addClass([args.cell], 'e-treerowcell');\n var expandIcon = createElement('span', { className: 'e-icons' });\n var expand = void 0;\n if (this.parent.initialRender) {\n expand = data.expanded &&\n (isNullOrUndefined(data[this.parent.expandStateMapping]) || data[this.parent.expandStateMapping]) &&\n !this.parent.enableCollapseAll;\n }\n else {\n expand = !(!data.expanded || !getExpandStatus(this.parent, data, this.parent.grid.getCurrentViewRecords()));\n }\n addClass([expandIcon], (expand) ? 'e-treegridexpand' : 'e-treegridcollapse');\n totalIconsWidth += 18;\n container.appendChild(expandIcon);\n emptyExpandIcon.style.width = '7px';\n totalIconsWidth += 7;\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n else if (pad || !pad && !data.level) {\n // icons width\n totalIconsWidth += 20;\n container.appendChild(emptyExpandIcon.cloneNode());\n container.appendChild(emptyExpandIcon.cloneNode());\n }\n //should add below code when paging funcitonality implemented\n // if (data.hasChildRecords) {\n // addClass([expandIcon], data.expanded ? 'e-treegridexpand' : 'e-treegridcollapse');\n // }\n cellElement = createElement('span', { className: 'e-treecell' });\n if (this.parent.allowTextWrap) {\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n this.updateTreeCell(args, cellElement);\n container.appendChild(cellElement);\n args.cell.appendChild(container);\n }\n else if (this.templateResult) {\n this.templateResult = null;\n }\n var freeze = (grid.getFrozenLeftColumnsCount() > 0 || grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (!freeze) {\n if (frozenColumns > this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === frozenColumns) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns < this.parent.treeColumnIndex && frozenColumns > 0 &&\n (grid.getColumnIndexByUid(args.column.uid) === frozenColumns\n || grid.getColumnIndexByUid(args.column.uid) === frozenColumns - 1)) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if (frozenColumns === this.parent.treeColumnIndex && frozenColumns > 0 &&\n grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex - 1) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n else {\n var freezerightColumns = grid.getFrozenRightColumns();\n var freezeLeftColumns = grid.getFrozenLeftColumns();\n var movableColumns = grid.getMovableColumns();\n if ((freezerightColumns.length > 0) && freezerightColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((freezeLeftColumns.length > 0) && freezeLeftColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n else if ((movableColumns.length > 0) && movableColumns[0].field === args.column.field) {\n addClass([args.cell], 'e-gridrowindex' + index + 'level' + data.level);\n }\n }\n if (!isNullOrUndefined(column) && column.showCheckbox) {\n this.parent.notify('columnCheckbox', args);\n if (this.parent.allowTextWrap) {\n var checkboxElement = args.cell.querySelectorAll('.e-frame')[0];\n var width = parseInt(checkboxElement.style.width, 16);\n totalIconsWidth += width;\n totalIconsWidth += 10;\n if (grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n cellElement = args.cell.querySelector('.e-treecell');\n }\n else {\n cellElement = args.cell.querySelector('.e-treecheckbox');\n }\n cellElement.style.width = 'Calc(100% - ' + totalIconsWidth + 'px)';\n }\n }\n if (summaryRow) {\n addClass([args.cell], 'e-summarycell');\n var summaryData = getObject(args.column.field, args.data);\n if (args.cell.querySelector('.e-treecell') != null) {\n args.cell.querySelector('.e-treecell').innerHTML = summaryData;\n }\n else {\n args.cell.innerHTML = summaryData;\n }\n }\n if (isNullOrUndefined(this.parent.rowTemplate)) {\n this.parent.trigger(events.queryCellInfo, args);\n }\n };\n Render.prototype.updateTreeCell = function (args, cellElement) {\n var columnModel = getValue('columnModel', this.parent);\n var treeColumn = columnModel[this.parent.treeColumnIndex];\n var templateFn = 'templateFn';\n var colindex = args.column.index;\n if (isNullOrUndefined(treeColumn.field)) {\n args.cell.setAttribute('aria-colindex', colindex + '');\n }\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n args.column.template = treeColumn.template;\n args.column[templateFn] = templateCompiler(args.column.template);\n args.cell.classList.add('e-templatecell');\n }\n var textContent = args.cell.querySelector('.e-treecell') != null ?\n args.cell.querySelector('.e-treecell').innerHTML : args.cell.innerHTML;\n if (typeof (args.column.template) === 'object' && this.templateResult) {\n appendChildren(cellElement, this.templateResult);\n this.templateResult = null;\n args.cell.innerHTML = '';\n }\n else if (args.cell.classList.contains('e-templatecell')) {\n var len = args.cell.children.length;\n var tempID = this.parent.element.id + args.column.uid;\n if (treeColumn.field === args.column.field && !isNullOrUndefined(treeColumn.template)) {\n var portals = 'portals';\n var renderReactTemplates = 'renderReactTemplates';\n if (this.parent.isReact && typeof (args.column.template) !== 'string') {\n args.column[templateFn](args.data, this.parent, 'template', tempID, null, null, cellElement);\n if (isNullOrUndefined(this.parent.grid[portals])) {\n this.parent.grid[portals] = this.parent[portals];\n }\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n }\n else {\n var str = 'isStringTemplate';\n var result = args.column[templateFn](extend({ 'index': '' }, args.data), this.parent, 'template', tempID, this.parent[str]);\n appendChildren(cellElement, result);\n }\n delete args.column.template;\n delete args.column[templateFn];\n args.cell.innerHTML = '';\n }\n else {\n for (var i = 0; i < len; len = args.cell.children.length) {\n cellElement.appendChild(args.cell.children[i]);\n }\n }\n }\n else {\n cellElement.innerHTML = textContent;\n args.cell.innerHTML = '';\n }\n };\n /**\n * @param {string} columnUid - Defines column uid\n * @returns {void}\n * @hidden\n */\n Render.prototype.refreshReactColumnTemplateByUid = function (columnUid) {\n var _this = this;\n if (this.parent.isReact) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.parent.clearTemplate(['columnTemplate'], undefined, function () {\n var cells = 'cells';\n var rowIdx = 'index';\n var rowsObj = _this.parent.grid.getRowsObject();\n var indent = _this.parent.grid.getIndentCount();\n var cellIndex = _this.parent.grid.getNormalizedColumnIndex(columnUid);\n for (var j = 0; j < rowsObj.length; j++) {\n if (rowsObj[j].isDataRow && !isNullOrUndefined(rowsObj[j].index)) {\n var cell = rowsObj[j][cells][cellIndex];\n var cellRenderer = new CellRenderer(_this.parent.grid, _this.parent.grid.serviceLocator);\n var td = _this.parent.getCellFromIndex(rowsObj[j].index, cellIndex - indent);\n cellRenderer.refreshTD(td, cell, rowsObj[j].data, { index: rowsObj[j][rowIdx] });\n var treecell = _this.parent.getRows()[j].cells[cellIndex];\n _this.cellRender({ data: rowsObj[j].data, cell: treecell, column: cell.column });\n }\n }\n });\n }\n };\n Render.prototype.columnTemplateResult = function (args) {\n this.templateResult = args.template;\n };\n Render.prototype.reactTemplateRender = function (args) {\n var renderReactTemplates = 'renderReactTemplates';\n var portals = 'portals';\n this.parent[portals] = args;\n this.parent.notify('renderReactTemplate', this.parent[portals]);\n this.parent[renderReactTemplates]();\n };\n Render.prototype.destroy = function () {\n this.parent.grid.off('template-result', this.columnTemplateResult);\n this.parent.grid.off('reactTemplateRender', this.reactTemplateRender);\n };\n return Render;\n}());\nexport { Render };\n","import { extend, isNullOrUndefined, setValue, getValue, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { getObject, getUid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, isCountRequired, getExpandStatus } from '../utils';\nimport * as events from './constant';\n/**\n * Internal dataoperations for tree grid\n *\n * @hidden\n */\nvar DataManipulation = /** @class */ (function () {\n function DataManipulation(grid) {\n this.addedRecords = 'addedRecords';\n this.parent = grid;\n this.parentItems = [];\n this.taskIds = [];\n this.hierarchyData = [];\n this.storedIndex = -1;\n this.sortedData = [];\n this.isSortAction = false;\n this.addEventListener();\n this.dataResults = {};\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n }\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.addEventListener = function () {\n this.parent.on('updateRemoteLevel', this.updateParentRemoteData, this);\n this.parent.grid.on('sorting-begin', this.beginSorting, this);\n this.parent.on('updateAction', this.updateData, this);\n this.parent.on(events.remoteExpand, this.collectExpandingRecs, this);\n this.parent.on('dataProcessor', this.dataProcessor, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.remoteExpand, this.collectExpandingRecs);\n this.parent.off('updateRemoteLevel', this.updateParentRemoteData);\n this.parent.off('updateAction', this.updateData);\n this.parent.off('dataProcessor', this.dataProcessor);\n this.parent.grid.off('sorting-begin', this.beginSorting);\n };\n /**\n * To destroy the dataModule\n *\n * @returns {void}\n * @hidden\n */\n DataManipulation.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {boolean} -Returns whether remote data binding\n */\n DataManipulation.prototype.isRemote = function () {\n if (!(this.parent.dataSource instanceof DataManager)) {\n return false;\n }\n return true;\n // let gridData: DataManager = <DataManager>this.parent.dataSource;\n // return gridData.dataSource.offline !== true && gridData.dataSource.url !== undefined;\n };\n /**\n * Function to manipulate datasource\n *\n * @param {Object} data - Provide tree grid datasource to convert to flat data\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.convertToFlatData = function (data) {\n var _this = this;\n this.parent.flatData = (Object.keys(data).length === 0 && !(this.parent.dataSource instanceof DataManager) ?\n this.parent.dataSource : []);\n this.parent.parentData = [];\n if ((isRemoteData(this.parent) && !isOffline(this.parent)) && data instanceof DataManager && !(data instanceof Array)) {\n var dm = this.parent.dataSource;\n if (this.parent.parentIdMapping) {\n this.parent.query = isNullOrUndefined(this.parent.query) ?\n new Query() : this.parent.query;\n if (this.parent.parentIdMapping) {\n var filterKey = this.parent.query.params.filter(function (param) { return param.key === 'IdMapping'; });\n if (this.parent.initialRender && !filterKey.length) {\n this.parent.query.where(this.parent.parentIdMapping, 'equal', null);\n this.parent.query.addParams('IdMapping', this.parent.idMapping);\n }\n }\n if (!this.parent.hasChildMapping) {\n var qry = this.parent.query.clone();\n qry.queries = [];\n qry = qry.select([this.parent.parentIdMapping]);\n qry.isCountRequired = true;\n dm.executeQuery(qry).then(function (e) {\n _this.parentItems = DataUtil.distinct(e.result, _this.parent.parentIdMapping, false);\n var req = getObject('dataSource.requests', _this.parent).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n if (req === 0) {\n setValue('grid.contentModule.isLoaded', true, _this.parent);\n if (!isNullOrUndefined(_this.zerothLevelData)) {\n setValue('cancel', false, _this.zerothLevelData);\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(_this.zerothLevelData);\n _this.zerothLevelData = null;\n }\n _this.parent.grid.hideSpinner();\n }\n });\n }\n }\n }\n else if (data instanceof Array) {\n this.convertJSONData(data);\n }\n };\n DataManipulation.prototype.convertJSONData = function (data) {\n this.hierarchyData = [];\n this.taskIds = [];\n if (!this.parent.idMapping) {\n this.hierarchyData = data;\n }\n else {\n var keys = Object.keys(data);\n for (var i = 0; i < keys.length; i++) {\n var tempData = data[i];\n this.hierarchyData.push(extend({}, tempData));\n if (!isNullOrUndefined(tempData[this.parent.idMapping])) {\n this.taskIds.push(tempData[this.parent.idMapping]);\n }\n }\n }\n if (this.isSelfReference) {\n var selfData = [];\n var mappingData = new DataManager(this.hierarchyData).executeLocal(new Query()\n .group(this.parent.parentIdMapping));\n for (var i = 0; i < mappingData.length; i++) {\n var groupData = mappingData[i];\n var index = this.taskIds.indexOf(groupData.key);\n if (!isNullOrUndefined(groupData.key)) {\n if (index > -1) {\n var childData = (groupData.items);\n this.hierarchyData[index][this.parent.childMapping] = childData;\n continue;\n }\n }\n selfData.push.apply(selfData, groupData.items);\n }\n this.hierarchyData = this.selfReferenceUpdate(selfData);\n }\n if (!Object.keys(this.hierarchyData).length) {\n var isGantt = 'isGantt';\n var referenceData = !(this.parent.dataSource instanceof DataManager) && this.parent[isGantt];\n this.parent.flatData = referenceData ? (this.parent.dataSource) : [];\n }\n else {\n this.createRecords(this.hierarchyData);\n }\n this.storedIndex = -1;\n };\n // private crudActions(): void {\n // if (this.parent.dataSource instanceof DataManager && (this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n // let oldUpdate: Function = this.parent.dataSource.adaptor.update;\n // this.parent.dataSource.adaptor.update =\n // function (dm: DataManager, keyField: string, value: Object, tableName?: string, query?: Query, original?: Object): Object {\n // value = getPlainData(value);\n // return oldUpdate.apply(this, [dm, keyField, value, tableName, query, original]);\n // }\n // }\n // }\n DataManipulation.prototype.selfReferenceUpdate = function (selfData) {\n var result = [];\n while (this.hierarchyData.length > 0 && selfData.length > 0) {\n var index = selfData.indexOf(this.hierarchyData[0]);\n if (index === -1) {\n this.hierarchyData.shift();\n }\n else {\n result.push(this.hierarchyData.shift());\n selfData.splice(index, 1);\n }\n }\n return result;\n };\n /**\n * Function to update the zeroth level parent records in remote binding\n *\n * @param {BeforeDataBoundArgs} args - contains data before its bounds to tree grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.updateParentRemoteData = function (args) {\n var records = args.result;\n if (!this.parent.hasChildMapping && !this.parentItems.length &&\n (!this.parent.loadChildOnDemand)) {\n this.zerothLevelData = args;\n setValue('cancel', true, args);\n }\n else {\n if (!this.parent.loadChildOnDemand) {\n for (var rec = 0; rec < records.length; rec++) {\n if (isCountRequired(this.parent) && records[rec].hasChildRecords && this.parent.initialRender) {\n records[rec].expanded = false;\n }\n if (isNullOrUndefined(records[rec].index)) {\n records[rec].taskData = extend({}, records[rec]);\n records[rec].uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + records[rec].uniqueID, records[rec], this.parent);\n records[rec].level = 0;\n records[rec].index = Math.ceil(Math.random() * 1000);\n if ((records[rec][this.parent.hasChildMapping] ||\n this.parentItems.indexOf(records[rec][this.parent.idMapping]) !== -1)) {\n records[rec].hasChildRecords = true;\n }\n records[rec].checkboxState = 'uncheck';\n }\n }\n }\n else {\n if (!isNullOrUndefined(records)) {\n this.convertToFlatData(records);\n }\n }\n }\n args.result = this.parent.loadChildOnDemand ? this.parent.flatData : records;\n this.parent.notify('updateResults', args);\n };\n /**\n * Function to manipulate datasource\n *\n * @param {{record: ITreeData, rows: HTMLTableRowElement[], parentRow: HTMLTableRowElement}} rowDetails - Row details for which child rows has to be fetched\n * @param {ITreeData} rowDetails.record - current expanding record\n * @param {HTMLTableRowElement[]} rowDetails.rows - Expanding Row element\n * @param {HTMLTableRowElement} rowDetails.parentRow - Curent expanding row element\n * @param {boolean} isChild - Specified whether current record is already a child record\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.collectExpandingRecs = function (rowDetails, isChild) {\n var gridRows = this.parent.getRows();\n if (this.parent.rowTemplate) {\n var rows = this.parent.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var childRecord;\n if (rowDetails.rows.length > 0) {\n if (!isChild) {\n rowDetails.record.expanded = true;\n }\n for (var i = 0; i < rowDetails.rows.length; i++) {\n rowDetails.rows[i].style.display = 'table-row';\n if (this.parent.loadChildOnDemand) {\n var targetEle = rowDetails.rows[i].getElementsByClassName('e-treegridcollapse')[0];\n childRecord = this.parent.rowTemplate ? this.parent.grid.getCurrentViewRecords()[rowDetails.rows[i].rowIndex] :\n this.parent.grid.getRowObjectFromUID(rowDetails.rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(targetEle) && childRecord.expanded) {\n addClass([targetEle], 'e-treegridexpand');\n removeClass([targetEle], 'e-treegridcollapse');\n }\n var childRows = [];\n childRows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1));\n });\n if (childRows.length && childRecord.expanded) {\n this.collectExpandingRecs({ record: childRecord, rows: childRows, parentRow: rowDetails.parentRow }, true);\n }\n }\n var expandingTd = rowDetails.rows[i].querySelector('.e-detailrowcollapse');\n if (!isNullOrUndefined(expandingTd)) {\n this.parent.grid.detailRowModule.expand(expandingTd);\n }\n }\n }\n else {\n this.fetchRemoteChildData({ record: rowDetails.record, rows: rowDetails.rows, parentRow: rowDetails.parentRow });\n }\n };\n DataManipulation.prototype.fetchRemoteChildData = function (rowDetails) {\n var _this = this;\n var args = { row: rowDetails.parentRow, data: rowDetails.record };\n var dm = this.parent.dataSource;\n var qry = this.parent.grid.getDataModule().generateQuery();\n var clonequries = qry.queries.filter(function (e) { return e.fn !== 'onPage' && e.fn !== 'onWhere'; });\n qry.queries = clonequries;\n qry.isCountRequired = true;\n qry.where(this.parent.parentIdMapping, 'equal', rowDetails.record[this.parent.idMapping]);\n showSpinner(this.parent.element);\n dm.executeQuery(qry).then(function (e) {\n var datas = _this.parent.grid.currentViewData.slice();\n var inx = datas.indexOf(rowDetails.record);\n if (inx === -1) {\n _this.parent.grid.getRowsObject().forEach(function (rows) {\n if (rows.data.uniqueID === rowDetails.record.uniqueID) {\n inx = rows.index;\n }\n });\n }\n var haveChild = getObject('actual.nextLevel', e);\n var result = e.result;\n rowDetails.record.childRecords = result;\n for (var r = 0; r < result.length; r++) {\n result[r].taskData = extend({}, result[r]);\n result[r].level = rowDetails.record.level + 1;\n result[r].index = Math.ceil(Math.random() * 1000);\n var parentData = extend({}, rowDetails.record);\n delete parentData.childRecords;\n result[r].parentItem = parentData;\n result[r].parentUniqueID = rowDetails.record.uniqueID;\n result[r].uniqueID = getUid(_this.parent.element.id + '_data_');\n result[r].checkboxState = 'uncheck';\n setValue('uniqueIDCollection.' + result[r].uniqueID, result[r], _this.parent);\n // delete result[r].parentItem.childRecords;\n if ((result[r][_this.parent.hasChildMapping] || _this.parentItems.indexOf(result[r][_this.parent.idMapping]) !== -1)\n && !(haveChild && !haveChild[r])) {\n result[r].hasChildRecords = true;\n result[r].expanded = false;\n }\n datas.splice(inx + r + 1, 0, result[r]);\n }\n setValue('result', datas, e);\n setValue('action', 'beforecontentrender', e);\n _this.parent.trigger(events.actionComplete, e);\n hideSpinner(_this.parent.element);\n if (_this.parent.grid.aggregates.length > 0 && !_this.parent.enableVirtualization) {\n var gridQuery = getObject('query', e);\n var result_1 = 'result';\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', _this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(gridQuery)) {\n var summaryQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n e[result_1] = _this.parent.summaryModule.calculateSummaryValue(summaryQuery, e[result_1], true);\n }\n }\n e.count = _this.parent.grid.pageSettings.totalRecordsCount;\n var virtualArgs = {};\n if (_this.parent.enableVirtualization) {\n _this.remoteVirtualAction(virtualArgs);\n }\n var notifyArgs = { index: inx, childData: result };\n if (_this.parent.enableInfiniteScrolling) {\n _this.parent.notify('infinite-remote-expand', notifyArgs);\n }\n else {\n getValue('grid.renderModule', _this.parent).dataManagerSuccess(e, virtualArgs);\n }\n _this.parent.trigger(events.expanded, args);\n });\n };\n DataManipulation.prototype.remoteVirtualAction = function (virtualArgs) {\n virtualArgs.requestType = 'refresh';\n setValue('isExpandCollapse', true, virtualArgs);\n var contentModule = getValue('grid.contentModule', this.parent);\n var currentInfo = getValue('currentInfo', contentModule);\n var prevInfo = getValue('prevInfo', contentModule);\n if (currentInfo.loadNext && this.parent.grid.pageSettings.currentPage === currentInfo.nextInfo.page) {\n this.parent.grid.pageSettings.currentPage = prevInfo.page;\n }\n };\n DataManipulation.prototype.beginSorting = function () {\n this.isSortAction = true;\n };\n DataManipulation.prototype.createRecords = function (data, parentRecords) {\n var treeGridData = [];\n var keys = Object.keys(data);\n for (var i = 0, len = keys.length; i < len; i++) {\n var currentData = extend({}, data[i]);\n currentData.taskData = data[i];\n var level = 0;\n this.storedIndex++;\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = this.storedIndex;\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping]) ||\n (currentData[this.parent.hasChildMapping] && isCountRequired(this.parent))) {\n currentData.hasChildRecords = true;\n if (this.parent.enableCollapseAll || !isNullOrUndefined(this.parent.dataStateChange)\n && isNullOrUndefined(currentData[this.parent.childMapping])) {\n currentData.expanded = false;\n }\n else {\n currentData.expanded = !isNullOrUndefined(currentData[this.parent.expandStateMapping])\n ? currentData[this.parent.expandStateMapping] : true;\n }\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'index')) {\n currentData.index = currentData.hasChildRecords ? this.storedIndex : this.storedIndex;\n }\n if (this.isSelfReference && isNullOrUndefined(currentData[this.parent.parentIdMapping])) {\n this.parent.parentData.push(currentData);\n }\n currentData.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + currentData.uniqueID, currentData, this.parent);\n if (!isNullOrUndefined(parentRecords)) {\n var parentData = extend({}, parentRecords);\n delete parentData.childRecords;\n delete parentData[this.parent.childMapping];\n if (this.isSelfReference) {\n delete parentData.taskData[this.parent.childMapping];\n }\n currentData.parentItem = parentData;\n currentData.parentUniqueID = parentData.uniqueID;\n level = parentRecords.level + 1;\n }\n if (!Object.prototype.hasOwnProperty.call(currentData, 'level')) {\n currentData.level = level;\n }\n currentData.checkboxState = 'uncheck';\n if (isNullOrUndefined(currentData[this.parent.parentIdMapping]) || currentData.parentItem) {\n this.parent.flatData.push(currentData);\n }\n if (!this.isSelfReference && currentData.level === 0) {\n this.parent.parentData.push(currentData);\n }\n if (!isNullOrUndefined(currentData[this.parent.childMapping] && currentData[this.parent.childMapping].length)) {\n var record = this.createRecords(currentData[this.parent.childMapping], currentData);\n currentData.childRecords = record;\n }\n treeGridData.push(currentData);\n }\n return treeGridData;\n };\n /**\n * Function to perform filtering/sorting action for local data\n *\n * @param {BeforeDataBoundArgs} args - data details to be processed before binding to grid\n * @hidden\n * @returns {void}\n */\n DataManipulation.prototype.dataProcessor = function (args) {\n var isExport = getObject('isExport', args);\n var expresults = getObject('expresults', args);\n var exportType = getObject('exportType', args);\n var isPrinting = getObject('isPrinting', args);\n var dataObj;\n var actionArgs = getObject('actionArgs', args);\n var requestType = getObject('requestType', args);\n var actionData = getObject('data', args);\n var action = getObject('action', args);\n var actionAddArgs = actionArgs;\n var primaryKeyColumnName = this.parent.getPrimaryKeyFieldNames()[0];\n var dataValue = getObject('data', actionAddArgs);\n if ((!isNullOrUndefined(actionAddArgs)) && (!isNullOrUndefined(actionAddArgs.action)) && (actionAddArgs.action === 'add')\n && (!isNullOrUndefined(actionAddArgs.data)) && isNullOrUndefined(actionAddArgs.data[primaryKeyColumnName])) {\n actionAddArgs.data[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n dataValue.taskData[primaryKeyColumnName] = args.result[actionAddArgs.index][primaryKeyColumnName];\n }\n if ((!isNullOrUndefined(actionArgs) && Object.keys(actionArgs).length) || requestType === 'save') {\n requestType = requestType ? requestType : actionArgs.requestType;\n actionData = actionData ? actionData : getObject('data', actionArgs);\n action = action ? action : getObject('action', actionArgs);\n if (this.parent.editSettings.mode === 'Batch') {\n this.batchChanges = this.parent.grid.editModule.getBatchChanges();\n }\n if (this.parent.isLocalData) {\n this.updateAction(actionData, action, requestType);\n }\n }\n if (isExport && !isNullOrUndefined(expresults)) {\n dataObj = expresults;\n }\n else {\n dataObj = isCountRequired(this.parent) ? getValue('result', this.parent.grid.dataSource)\n : this.parent.grid.dataSource;\n }\n var results = dataObj instanceof DataManager ? dataObj.dataSource.json : dataObj;\n var count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var qry = new Query();\n var gridQuery = getObject('query', args);\n var filterQuery;\n var searchQuery;\n if (!isNullOrUndefined(gridQuery)) {\n filterQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n searchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n }\n if ((this.parent.grid.allowFiltering && this.parent.grid.filterSettings.columns.length) ||\n (this.parent.grid.searchSettings.key.length > 0) || (!isNullOrUndefined(gridQuery) &&\n (filterQuery.length || searchQuery.length) && this.parent.isLocalData)) {\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = new Query();\n gridQuery = getValue('grid.renderModule.data', this.parent).filterQuery(gridQuery);\n gridQuery = getValue('grid.renderModule.data', this.parent).searchQuery(gridQuery);\n }\n var fltrQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onWhere'; });\n var srchQuery = gridQuery.queries.filter(function (q) { return q.fn === 'onSearch'; });\n qry.queries = fltrQuery.concat(srchQuery);\n var filteredData = new DataManager(results).executeLocal(qry);\n this.parent.notify('updateFilterRecs', { data: filteredData });\n results = this.dataResults.result;\n this.dataResults.result = null;\n if (this.parent.grid.aggregates.length > 0) {\n var query = getObject('query', args);\n if (isNullOrUndefined(gridQuery)) {\n gridQuery = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n if (!isNullOrUndefined(query)) {\n var summaryQuery = query.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, results, true);\n }\n }\n }\n if (this.parent.grid.aggregates.length && this.parent.grid.sortSettings.columns.length === 0\n && this.parent.grid.filterSettings.columns.length === 0 && !this.parent.grid.searchSettings.key.length) {\n var gridQuery_1 = getObject('query', args);\n if (isNullOrUndefined(gridQuery_1)) {\n gridQuery_1 = getValue('grid.renderModule.data', this.parent).aggregateQuery(new Query());\n }\n var summaryQuery = gridQuery_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.parent.flatData, true);\n }\n if (this.parent.grid.sortSettings.columns.length > 0 || this.isSortAction) {\n this.isSortAction = false;\n var parentData = this.parent.parentData;\n var query = getObject('query', args);\n var srtQry = new Query();\n for (var srt = this.parent.grid.sortSettings.columns.length - 1; srt >= 0; srt--) {\n var getColumnByField = 'getColumnByField';\n var col = this.parent.grid.renderModule.data[getColumnByField](this.parent.grid.\n sortSettings.columns[srt].field);\n var compFun = col.sortComparer && isOffline(this.parent) ?\n col.sortComparer.bind(col) :\n this.parent.grid.sortSettings.columns[srt].direction;\n srtQry.sortBy(this.parent.grid.sortSettings.columns[srt].field, compFun);\n }\n var modifiedData = new DataManager(parentData).executeLocal(srtQry);\n var sortArgs = { modifiedData: modifiedData, filteredData: results, srtQry: srtQry };\n this.parent.notify('createSort', sortArgs);\n results = sortArgs.modifiedData;\n this.dataResults.result = null;\n this.sortedData = results;\n this.parent.notify('updateModel', {});\n if (this.parent.grid.aggregates.length > 0 && !isNullOrUndefined(query)) {\n var isSort = false;\n var query_1 = getObject('query', args);\n var summaryQuery = query_1.queries.filter(function (q) { return q.fn === 'onAggregates'; });\n results = this.parent.summaryModule.calculateSummaryValue(summaryQuery, this.sortedData, isSort);\n }\n }\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : results.length;\n var temp = this.paging(results, count, isExport, isPrinting, exportType, args);\n results = temp.result;\n count = temp.count;\n args.result = results;\n args.count = count;\n this.parent.notify('updateResults', args);\n };\n DataManipulation.prototype.paging = function (results, count, isExport, isPrinting, exportType, args) {\n if (this.parent.allowPaging && (!isExport || exportType === 'CurrentPage')\n && (!isPrinting || this.parent.printMode === 'CurrentPage')) {\n this.parent.notify(events.pagingActions, { result: results, count: count });\n results = this.dataResults.result;\n count = isCountRequired(this.parent) ? getValue('count', this.parent.dataSource)\n : this.dataResults.count;\n }\n else if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) && (!isExport || exportType === 'CurrentPage')\n && getValue('requestType', args) !== 'save') {\n var actArgs = this.parent.enableInfiniteScrolling ? args : getValue('actionArgs', args);\n this.parent.notify(events.pagingActions, { result: results, count: count, actionArgs: actArgs });\n results = this.dataResults.result;\n count = this.dataResults.count;\n }\n var isPdfExport = 'isPdfExport';\n var isCollapsedStatePersist = 'isCollapsedStatePersist';\n if ((isPrinting === true || (args[isPdfExport] && (isNullOrUndefined(args[isCollapsedStatePersist])\n || args[isCollapsedStatePersist]))) && this.parent.printMode === 'AllPages') {\n var actualResults = [];\n for (var i = 0; i < results.length; i++) {\n var expandStatus = getExpandStatus(this.parent, results[i], this.parent.parentData);\n if (expandStatus) {\n actualResults.push(results[i]);\n }\n }\n results = actualResults;\n count = results.length;\n }\n var value = { result: results, count: count };\n return value;\n };\n DataManipulation.prototype.updateData = function (dataResult) {\n this.dataResults = dataResult;\n };\n DataManipulation.prototype.updateAction = function (actionData, action, requestType) {\n if ((requestType === 'delete' || requestType === 'save')) {\n this.parent.notify(events.crudAction, { value: actionData, action: action || requestType });\n }\n if (requestType === 'batchsave' && this.parent.editSettings.mode === 'Batch') {\n this.parent.notify(events.batchSave, {});\n }\n };\n return DataManipulation;\n}());\nexport { DataManipulation };\n","/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Search\"] = 5] = \"Search\";\n ToolbarItem[ToolbarItem[\"ExpandAll\"] = 6] = \"ExpandAll\";\n ToolbarItem[ToolbarItem[\"CollapseAll\"] = 7] = \"CollapseAll\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 8] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 9] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"Print\"] = 11] = \"Print\";\n ToolbarItem[ToolbarItem[\"RowIndent\"] = 12] = \"RowIndent\";\n ToolbarItem[ToolbarItem[\"RowOutdent\"] = 13] = \"RowOutdent\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines predefined contextmenu items.\n *\n * @hidden\n */\nexport var ContextMenuItems;\n(function (ContextMenuItems) {\n ContextMenuItems[ContextMenuItems[\"AutoFit\"] = 0] = \"AutoFit\";\n ContextMenuItems[ContextMenuItems[\"AutoFitAll\"] = 1] = \"AutoFitAll\";\n ContextMenuItems[ContextMenuItems[\"SortAscending\"] = 2] = \"SortAscending\";\n ContextMenuItems[ContextMenuItems[\"SortDescending\"] = 3] = \"SortDescending\";\n ContextMenuItems[ContextMenuItems[\"Edit\"] = 4] = \"Edit\";\n ContextMenuItems[ContextMenuItems[\"Delete\"] = 5] = \"Delete\";\n ContextMenuItems[ContextMenuItems[\"Save\"] = 6] = \"Save\";\n ContextMenuItems[ContextMenuItems[\"Cancel\"] = 7] = \"Cancel\";\n ContextMenuItems[ContextMenuItems[\"PdfExport\"] = 8] = \"PdfExport\";\n ContextMenuItems[ContextMenuItems[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ContextMenuItems[ContextMenuItems[\"CsvExport\"] = 10] = \"CsvExport\";\n ContextMenuItems[ContextMenuItems[\"FirstPage\"] = 11] = \"FirstPage\";\n ContextMenuItems[ContextMenuItems[\"PrevPage\"] = 12] = \"PrevPage\";\n ContextMenuItems[ContextMenuItems[\"LastPage\"] = 13] = \"LastPage\";\n ContextMenuItems[ContextMenuItems[\"NextPage\"] = 14] = \"NextPage\";\n ContextMenuItems[ContextMenuItems[\"AddRow\"] = 15] = \"AddRow\";\n ContextMenuItems[ContextMenuItems[\"RowIndent\"] = 16] = \"RowIndent\";\n ContextMenuItems[ContextMenuItems[\"RowOutdent\"] = 17] = \"RowOutdent\";\n})(ContextMenuItems || (ContextMenuItems = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the TreeGrid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n __decorate([\n Property('All')\n ], PageSettings.prototype, \"pageSizeMode\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Collection, getEnumValue, compile } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { CellType } from '@syncfusion/ej2-grids';\n/**\n * Configures the TreeGrid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.intl = new Internationalization();\n _this.templateFn = {};\n return _this;\n }\n /**\n * Custom format function\n *\n * @hidden\n * @param {string} cultureName - culture name to format\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n AggregateColumn.prototype.setFormatter = function (cultureName) {\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = this.getFormatFunction(this.format);\n }\n };\n /**\n * @param {NumberFormatOptions | DateFormatOptions} format - formatting options for number and date values\n * @hidden\n * @returns {Function} - return formatter function\n */\n AggregateColumn.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n /**\n * @hidden\n * @returns {Function} - Returns formatter function\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @param {Object} helper - Specified the helper\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n };\n /**\n * @param {CellType} type - specifies the cell type\n * @returns {Object} returns the object\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @param {Object} prop - updates aggregate properties without change detection\n * @hidden\n * @returns {void}\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], AggregateRow.prototype, \"showChildSummary\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property } from '@syncfusion/ej2-base';\n/**\n * Configures the edit behavior of the TreeGrid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Cell')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Top')\n ], EditSettings.prototype, \"newRowPosition\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n __decorate([\n Property('')\n ], EditSettings.prototype, \"template\", void 0);\n __decorate([\n Property({})\n ], EditSettings.prototype, \"dialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Collection } from '@syncfusion/ej2-base';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of TreeGrid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the infinite scroll behavior of Tree Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n __extends(InfiniteScrollSettings, _super);\n function InfiniteScrollSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n __decorate([\n Property(3)\n ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, addClass, createElement, EventHandler, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { removeClass, Complex, Collection, getValue } from '@syncfusion/ej2-base';\nimport { Event, Property, NotifyPropertyChanges, setValue, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { RowDropSettings, getUid } from '@syncfusion/ej2-grids';\nimport { FilterSettings } from '../models/filter-settings';\nimport { TextWrapSettings } from '../models/textwrap-settings';\nimport { Logger as TreeLogger } from '../actions/logger';\nimport { TreeClipboard } from '../actions/clipboard';\nimport { Selection as TreeGridSelection } from '../actions/selection';\nimport { Freeze } from '../actions/freeze-column';\nimport { Print } from '../actions/print';\nimport * as events from '../base/constant';\nimport { SearchSettings } from '../models/search-settings';\nimport { SelectionSettings } from '../models/selection-settings';\nimport { getActualProperties, getObject } from '@syncfusion/ej2-grids';\nimport { DataManager, RemoteSaveAdaptor, Query, JsonAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { isRemoteData, isOffline, extendArray, isCountRequired, findChildrenRecords } from '../utils';\nimport { Grid, Logger } from '@syncfusion/ej2-grids';\nimport { Render } from '../renderer/render';\nimport { DataManipulation } from './data';\nimport { iterateArrayOrObject } from '@syncfusion/ej2-grids';\nimport { ToolbarItem, ContextMenuItems } from '../enum';\nimport { PageSettings } from '../models/page-settings';\nimport { AggregateRow } from '../models/summary';\nimport { EditSettings } from '../models/edit-settings';\nimport { SortSettings } from '../models/sort-settings';\nimport { isHidden, getExpandStatus } from '../utils';\nimport { editAction } from '../actions/crud-actions';\nimport { InfiniteScrollSettings } from '../models/infinite-scroll-settings';\n/**\n * Represents the TreeGrid component.\n * ```html\n * <div id='treegrid'></div>\n * <script>\n * var treegridObj = new TreeGrid({ allowPaging: true });\n * treegridObj.appendTo('#treegrid');\n * </script>\n * ```\n */\nvar TreeGrid = /** @class */ (function (_super) {\n __extends(TreeGrid, _super);\n function TreeGrid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.dataResults = {};\n _this.uniqueIDCollection = {};\n _this.uniqueIDFilterCollection = {};\n _this.changedRecords = 'changedRecords';\n _this.deletedRecords = 'deletedRecords';\n _this.addedRecords = 'addedRecords';\n _this.indentOutdentAction = 'indentOutdentAction';\n _this.modifiedRecords = [];\n _this.stackedHeader = false;\n _this.objectEqualityChecker = function (old, current) {\n if (old) {\n var keys = Object.keys(old);\n var isEqual = true;\n var excludeKeys = ['Children', 'childRecords', 'taskData', 'uniqueID', 'parentItem', 'parentUniqueID', 'index'];\n for (var i = 0; i < keys.length; i++) {\n if (old[keys[i]] !== current[keys[i]] && excludeKeys.indexOf(keys[i]) === -1) {\n var isDate = old[keys[i]] instanceof Date && current[keys[i]] instanceof Date;\n if (!isDate || (old[keys[i]].getTime() !== current[keys[i]].getTime())) {\n isEqual = false;\n break;\n }\n }\n }\n return isEqual;\n }\n else {\n return false;\n }\n };\n TreeGrid_1.Inject(TreeGridSelection);\n setValue('mergePersistData', _this.mergePersistTreeGridData, _this);\n var logger = 'Logger';\n if (!isNullOrUndefined(_this.injectedModules[logger])) {\n Grid.Inject(Logger);\n }\n _this.grid = new Grid();\n return _this;\n }\n TreeGrid_1 = TreeGrid;\n /**\n * Export TreeGrid data to Excel file(.xlsx).\n *\n * @param {ExcelExportProperties | TreeGridExcelExportProperties} excelExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.excelExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, false);\n };\n /**\n * Export TreeGrid data to CSV file.\n *\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the TreeGrid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n /* eslint-disable */\n TreeGrid.prototype.csvExport = function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n /* eslint-enable */\n return this.excelExportModule.Map(excelExportProperties, isMultipleExport, workbook, isBlob, true);\n };\n /**\n * Export TreeGrid data to PDF document.\n *\n * @param {PdfExportProperties | TreeGridPdfExportProperties} pdfExportProperties - Defines the export properties of the Tree Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {Object} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @returns {Promise<any>} - Returns promise object of export action\n */\n TreeGrid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns TreeGrid module name\n */\n TreeGrid.prototype.getModuleName = function () {\n return 'treegrid';\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.preRender = function () {\n this.TreeGridLocale();\n this.initProperties();\n this.defaultLocale = {\n Above: 'Above',\n Below: 'Below',\n Child: 'Child',\n AddRow: 'Add Row',\n ExpandAll: 'Expand All',\n CollapseAll: 'Collapse All',\n RowIndent: 'Indent',\n RowOutdent: 'Outdent'\n };\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n if (this.isSelfReference && isNullOrUndefined(this.childMapping)) {\n this.childMapping = 'Children';\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n TreeGrid.prototype.sortByColumn = function (columnName, direction, isMultiSort) {\n if (this.sortModule) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n }\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSorting = function () {\n if (this.sortModule) {\n this.sortModule.clearSorting();\n }\n };\n /**\n * Remove sorted column by field name.\n *\n * @param {string} field - Defines the column field name to remove sort.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeSortColumn = function (field) {\n if (this.sortModule) {\n this.sortModule.removeSortColumn(field);\n }\n };\n /**\n * Searches TreeGrid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./#searchsettings/).\n *\n * @param {string} searchString - Defines the key.\n * @returns {void}\n */\n TreeGrid.prototype.search = function (searchString) {\n this.grid.search(searchString);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n *\n * @param {string |string[]} fieldNames - Defines the column names.\n * @returns {void}\n *\n *\n *\n */\n TreeGrid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n this.updateColumnModel();\n };\n /**\n * Changes the TreeGrid column positions by field names.\n *\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @returns {void}\n */\n TreeGrid.prototype.reorderColumns = function (fromFName, toFName) {\n this.grid.reorderColumns(fromFName, toFName);\n };\n TreeGrid.prototype.TreeGridLocale = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var locale = L10n.locale;\n var localeObject = {};\n setValue(this.locale, {}, localeObject);\n var gridLocale;\n gridLocale = {};\n gridLocale = getObject(this.locale, locale);\n var treeGridLocale;\n treeGridLocale = {};\n treeGridLocale = getObject(this.getModuleName(), gridLocale);\n setValue('grid', treeGridLocale, getObject(this.locale, localeObject));\n L10n.load(localeObject);\n };\n /**\n * By default, prints all the pages of the TreeGrid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./#printmode).\n *\n * @returns {void}\n */\n TreeGrid.prototype.print = function () {\n this.printModule.print();\n };\n TreeGrid.prototype.treeGridkeyActionHandler = function (e) {\n if (this.allowKeyboard) {\n var target = void 0;\n var parentTarget = void 0;\n var column = void 0;\n var row = void 0;\n var summaryElement = void 0;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'ctrlShiftUpArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridexpand'));\n }\n break;\n case 'ctrlShiftDownArrow':\n target = e.target;\n column = target.closest('.e-rowcell');\n row = column.closest('tr');\n if (row !== null && row !== undefined) {\n this.expandCollapseRequest(row.querySelector('.e-treegridcollapse'));\n }\n break;\n case 'downArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findnextRowElement(parentTarget);\n if (summaryElement !== null) {\n var rowIndex = summaryElement.rowIndex;\n this.selectRow(rowIndex);\n var cellIndex = e.target.cellIndex;\n var row_1 = summaryElement.children[cellIndex];\n addClass([row_1], 'e-focused');\n addClass([row_1], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n break;\n case 'upArrow':\n if (!this.enableVirtualization) {\n parentTarget = e.target.parentElement;\n summaryElement = this.findPreviousRowElement(parentTarget);\n if (summaryElement !== null) {\n var rIndex = summaryElement.rowIndex;\n this.selectRow(rIndex);\n var cIndex = e.target.cellIndex;\n var rows = summaryElement.children[cIndex];\n addClass([rows], 'e-focused');\n addClass([rows], 'e-focus');\n }\n else {\n this.clearSelection();\n }\n }\n }\n }\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findnextRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.nextElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findnextRowElement(rowElement);\n }\n return rowElement;\n };\n // Get Proper Row Element from the summary\n TreeGrid.prototype.findPreviousRowElement = function (summaryRowElement) {\n var rowElement = summaryRowElement.previousElementSibling;\n if (rowElement !== null && (rowElement.className.indexOf('e-summaryrow') !== -1 ||\n rowElement.style.display === 'none')) {\n rowElement = this.findPreviousRowElement(rowElement);\n }\n return rowElement;\n };\n TreeGrid.prototype.initProperties = function () {\n this.defaultLocale = {};\n this.flatData = [];\n this.parentData = [];\n this.columnModel = [];\n this.isExpandAll = false;\n this.isCollapseAll = false;\n this.keyConfigs = {\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlShiftUpArrow: 'ctrl+shift+uparrow',\n ctrlShiftDownArrow: 'ctrl+shift+downarrow',\n downArrow: 'downArrow',\n upArrow: 'upArrow'\n };\n this.isLocalData = (!(this.dataSource instanceof DataManager) || this.dataSource.dataSource.offline\n || (!isNullOrUndefined(this.dataSource.ready)) || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.isSelfReference = !isNullOrUndefined(this.parentIdMapping);\n };\n /**\n * Binding events to the element while component creation.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.wireEvents = function () {\n EventHandler.add(this.grid.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.treeGridkeyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n };\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - Returns TreeGrid modules collection\n * @hidden\n */\n TreeGrid.prototype.requiredModules = function () {\n var modules = [];\n var splitFrozenCount = 'splitFrozenCount';\n this.freezeModule = new Freeze(this);\n this.grid[splitFrozenCount](this.getGridColumns(this.columns));\n if (this.isDestroyed) {\n return modules;\n }\n modules.push({\n member: 'filter', args: [this, this.filterSettings]\n });\n if (!isNullOrUndefined(this.toolbar)) {\n modules.push({\n member: 'toolbar',\n args: [this]\n });\n }\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this]\n });\n }\n if (this.aggregates.length > 0) {\n modules.push({\n member: 'summary', args: [this]\n });\n }\n modules.push({\n member: 'resize', args: [this]\n });\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport', args: [this]\n });\n }\n if (this.frozenColumns || this.frozenRows || this.getFrozenColumns() ||\n this.grid.getFrozenLeftColumnsCount() || this.grid.getFrozenRightColumnsCount() || this.freezeModule) {\n modules.push({\n member: 'freeze', args: [this]\n });\n }\n if (this.detailTemplate) {\n modules.push({\n member: 'detailRow', args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport', args: [this]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu', args: [this]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'ColumnChooser', args: [this]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n TreeGrid.prototype.extendRequiredModules = function (modules) {\n var IsRowDDInjected = this.injectedModules.filter(function (e) {\n return e.prototype.getModuleName() === 'rowDragAndDrop';\n });\n if (this.allowRowDragAndDrop || IsRowDDInjected.length) {\n if ((!isNullOrUndefined(this.toolbar) && (this.toolbar['includes']('Indent') ||\n this.toolbar['includes']('Outdent')))) {\n this.isIndentEnabled = true;\n }\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this]\n });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this]\n });\n }\n if (this.enableVirtualization) {\n modules.push({\n member: 'virtualScroll',\n args: [this]\n });\n }\n if (this.enableInfiniteScrolling) {\n modules.push({\n member: 'infiniteScroll',\n args: [this]\n });\n }\n modules.push({\n member: 'logger',\n args: [this.grid]\n });\n };\n TreeGrid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n /**\n * Unbinding events from the element while component destroy.\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.unwireEvents = function () {\n if (this.grid && this.grid.element) {\n EventHandler.remove(this.grid.element, 'click', this.mouseClickHandler);\n }\n };\n /**\n * Logs tree grid error message on console\n *\n * @param {string | string[]} types - Tree Grid error type\n * @param {object} args - Error details\n * @hidden\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.log = function (types, args) {\n if (this.loggerModule) {\n this.loggerModule.treeLog(types, args, this);\n }\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.render = function () {\n var _this = this;\n if (this.isReact) {\n this.grid.isReact = true;\n this.grid.portals = [];\n }\n if (this.isVue) {\n this.grid.isVue = true;\n }\n createSpinner({ target: this.element }, this.createElement);\n this.log(['mapping_fields_missing']);\n this.renderModule = new Render(this);\n this.dataModule = new DataManipulation(this);\n this.printModule = new Print(this);\n this.trigger(events.load);\n this.autoGenerateColumns();\n this.initialRender = true;\n if (!isNullOrUndefined(this.dataSource)) {\n this.convertTreeData(this.dataSource);\n }\n this.loadGrid();\n if (this.element.classList.contains('e-treegrid') && this.rowDropSettings.targetID) {\n this.grid.rowDropSettings.targetID += '_gridcontrol';\n }\n this.addListener();\n var gridContainer = createElement('div', { id: this.element.id + '_gridcontrol' });\n addClass([this.element], 'e-treegrid');\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.element.appendChild(gridContainer);\n var gridRequiredModules = this.grid.requiredModules;\n this.grid.requiredModules = function () {\n var modules = [];\n modules = gridRequiredModules.apply(this);\n for (var i = 0; i < modules.length; i++) {\n if (modules[i].member === 'virtualscroll') {\n modules[i].member = 'treeVirtualScroll';\n }\n }\n return modules;\n };\n var root = 'root';\n this.grid[root] = this[root] ? this[root] : this;\n this.grid.appendTo(gridContainer);\n if (this.isIndentEnabled) {\n this.refreshToolbarItems();\n }\n this.wireEvents();\n this.renderComplete();\n var destroyTemplate = 'destroyTemplate';\n var destroyTemplateFn = this.grid[destroyTemplate];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.grid[destroyTemplate] = function (args, index) {\n destroyTemplateFn.apply(_this.grid);\n var portals = 'portals';\n if (!(_this.isReact && isNullOrUndefined(_this[portals]))) {\n _this.clearTemplate(args, index);\n }\n };\n };\n TreeGrid.prototype.refreshToolbarItems = function () {\n var toolbarElement = this.toolbarModule.getToolbar();\n var indentID = this.element.id + '_gridcontrol_indent';\n var outdentID = this.element.id + '_gridcontrol_outdent';\n var indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n var outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n };\n TreeGrid.prototype.afterGridRender = function () {\n if (!isNullOrUndefined(this.grid.clipboardModule)) {\n this.grid.clipboardModule.destroy();\n }\n this.clipboardModule = this.grid.clipboardModule = new TreeClipboard(this);\n };\n TreeGrid.prototype.convertTreeData = function (data) {\n var _this = this;\n if (isCountRequired(this)) {\n data = getValue('result', data);\n }\n if (data instanceof Array && data.length > 0 && Object.prototype.hasOwnProperty.call(data[0], 'level')) {\n this.flatData = data;\n this.flatData.filter(function (e) {\n setValue('uniqueIDCollection.' + e.uniqueID, e, _this);\n if (e.level === 0) {\n _this.parentData.push(e);\n }\n });\n }\n else {\n if (isCountRequired(this)) {\n var griddata = getValue('result', this.dataSource);\n this.dataModule.convertToFlatData(griddata);\n }\n else {\n this.dataModule.convertToFlatData(data);\n }\n }\n };\n // private getGridData(): Object {\n // if (isRemoteData(this)) {\n // return this.dataSource;\n // } else if (this.isLocalData && this.dataSource instanceof DataManager) {\n // this.dataSource.dataSource.json = this.flatData;\n // return this.dataSource;\n // }\n // return this.flatData;\n // }\n TreeGrid.prototype.bindGridProperties = function () {\n this.bindedDataSource();\n this.grid.enableRtl = this.enableRtl;\n this.grid.allowKeyboard = this.allowKeyboard;\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.allowExcelExport = this.allowExcelExport;\n this.grid.allowPdfExport = this.allowPdfExport;\n this.grid.query = this.query;\n this.grid.columnQueryMode = this.columnQueryMode;\n this.grid.allowPaging = this.allowPaging;\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n this.grid.pagerTemplate = this.pagerTemplate;\n this.grid.showColumnMenu = this.showColumnMenu;\n this.grid.allowSorting = this.allowSorting;\n this.grid.allowFiltering = this.allowFiltering;\n this.grid.enableVirtualization = this.enableVirtualization;\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n this.grid.infiniteScrollSettings = this.infiniteScrollSettings;\n this.grid.width = this.width;\n this.grid.height = this.height;\n this.grid.enableAltRow = this.enableAltRow;\n this.grid.allowReordering = this.allowReordering;\n this.grid.allowTextWrap = this.allowTextWrap;\n this.grid.allowResizing = this.allowResizing;\n this.grid.enableHover = this.enableHover;\n this.grid.enableAutoFill = this.enableAutoFill;\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n this.grid.enableImmutableMode = this.enableImmutableMode;\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n this.grid.rowDropSettings = getActualProperties(this.rowDropSettings);\n this.grid.rowHeight = this.rowHeight;\n this.grid.gridLines = this.gridLines;\n this.grid.allowSelection = this.allowSelection;\n this.grid.toolbar = getActualProperties(this.getGridToolbar());\n this.grid.toolbarTemplate = this.toolbarTemplate;\n this.grid.showColumnChooser = this.showColumnChooser;\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n this.grid.aggregates = getActualProperties(this.aggregates);\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n this.grid.printMode = getActualProperties(this.printMode);\n this.grid.locale = getActualProperties(this.locale);\n this.grid.selectedRowIndex = this.selectedRowIndex;\n this.grid.contextMenuItems = getActualProperties(this.getContextMenu());\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n this.grid.editSettings = this.getGridEditSettings();\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n this.grid.frozenRows = this.frozenRows;\n this.grid.frozenColumns = this.frozenColumns;\n this.grid.clipMode = getActualProperties(this.clipMode);\n var templateInstance = 'templateDotnetInstance';\n this.grid[templateInstance] = this[templateInstance];\n var isJsComponent = 'isJsComponent';\n this.grid[isJsComponent] = true;\n };\n TreeGrid.prototype.triggerEvents = function (args) {\n this.trigger(getObject('name', args), args);\n };\n TreeGrid.prototype.bindGridEvents = function () {\n var _this = this;\n this.grid.rowSelecting = function (args) {\n if (!isNullOrUndefined(args.target) && (args.target.classList.contains('e-treegridexpand')\n || args.target.classList.contains('e-treegridcollapse') || args.target.classList.contains('e-summarycell'))) {\n args.cancel = true;\n return;\n }\n _this.trigger(events.rowSelecting, args);\n };\n this.grid.rowSelected = function (args) {\n if (_this.enableVirtualization && args.isHeaderCheckboxClicked &&\n _this.grid.currentViewData.length !== _this.grid.selectionModule.selectedRowIndexes.length) {\n var updateRowSelection = 'updateRowSelection';\n for (var i = 0; i < _this.getRows().length; i++) {\n if (_this.getRows()[i].getElementsByClassName('e-frame e-icons e-uncheck').length) {\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[i], _this.getCurrentViewRecords()[i].index);\n }\n }\n }\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n _this.notify(events.rowSelected, args);\n _this.trigger(events.rowSelected, args);\n };\n this.grid.rowDeselected = function (args) {\n _this.selectedRowIndex = _this.grid.selectedRowIndex;\n if (!isNullOrUndefined(args.data)) {\n _this.notify(events.rowDeselected, args);\n }\n _this.trigger(events.rowDeselected, args);\n };\n this.grid.resizeStop = function (args) {\n _this.updateColumnModel();\n _this.trigger(events.resizeStop, args);\n };\n this.grid.excelQueryCellInfo = function (args) {\n _this.notify('excelCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.pdfQueryCellInfo = function (args) {\n _this.notify('pdfCellInfo', args);\n args = _this.dataResults;\n };\n this.grid.checkBoxChange = function (args) {\n _this.trigger(events.checkboxChange, args);\n };\n this.grid.pdfExportComplete = this.triggerEvents.bind(this);\n this.grid.excelExportComplete = this.triggerEvents.bind(this);\n this.grid.excelHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.pdfHeaderQueryCellInfo = this.triggerEvents.bind(this);\n this.grid.dataSourceChanged = this.triggerEvents.bind(this);\n this.grid.recordDoubleClick = this.triggerEvents.bind(this);\n this.grid.rowDeselecting = this.triggerEvents.bind(this);\n this.grid.cellDeselected = this.triggerEvents.bind(this);\n this.grid.cellDeselecting = this.triggerEvents.bind(this);\n this.grid.columnMenuOpen = this.triggerEvents.bind(this);\n this.grid.columnMenuClick = this.triggerEvents.bind(this);\n this.grid.cellSelected = this.triggerEvents.bind(this);\n this.grid.headerCellInfo = this.triggerEvents.bind(this);\n this.grid.resizeStart = this.triggerEvents.bind(this);\n this.grid.resizing = this.triggerEvents.bind(this);\n this.grid.columnDrag = this.triggerEvents.bind(this);\n this.grid.columnDragStart = this.triggerEvents.bind(this);\n this.grid.columnDrop = this.triggerEvents.bind(this);\n this.grid.beforePrint = this.triggerEvents.bind(this);\n this.grid.beforeCopy = this.triggerEvents.bind(this);\n this.grid.beforePaste = function (args) {\n var rows = _this.getRows();\n var rowIndex = 'rowIndex';\n while (rows[args[rowIndex]].classList.contains('e-summaryrow')) {\n args[rowIndex]++;\n }\n _this.trigger(events.beforePaste, args);\n };\n this.grid.load = function () {\n _this.grid.on('initial-end', _this.afterGridRender, _this);\n if (!isNullOrUndefined(_this.loggerModule)) {\n var loggerModule = 'loggerModule';\n _this.loggerModule = _this.grid[loggerModule] = new TreeLogger(_this.grid);\n }\n };\n this.grid.printComplete = this.triggerEvents.bind(this);\n this.grid.actionFailure = this.triggerEvents.bind(this);\n this.extendedGridDataBoundEvent();\n this.extendedGridEvents();\n this.extendedGridActionEvents();\n this.extendedGridEditEvents();\n this.bindGridDragEvents();\n this.bindCallBackEvents();\n };\n TreeGrid.prototype.lastRowBorder = function (visiblerow, isAddBorder) {\n for (var j = 0; j < visiblerow.cells.length; j++) {\n if (isAddBorder) {\n addClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n else {\n removeClass([visiblerow.cells[j]], 'e-lastrowcell');\n }\n }\n };\n TreeGrid.prototype.isPixelHeight = function () {\n if (this.height !== 'auto' && this.height.toString().indexOf('%') === -1) {\n return true;\n }\n else {\n return false;\n }\n };\n TreeGrid.prototype.extendedGridDataBoundEvent = function () {\n var _this = this;\n this.grid.dataBound = function (args) {\n _this.updateRowTemplate();\n _this.updateColumnModel();\n _this.updateAltRow(_this.getRows());\n _this.notify('dataBoundArg', args);\n if (isRemoteData(_this) && !isOffline(_this) && !_this.hasChildMapping) {\n var req = getObject('dataSource.requests', _this).filter(function (e) {\n return e.httpRequest.statusText !== 'OK';\n }).length;\n setValue('grid.contentModule.isLoaded', !(req > 0), _this);\n }\n if (_this.isPixelHeight() && _this.initialRender) {\n var rows = _this.getContentTable().rows;\n var totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i > 0; i--) {\n if (!isHidden(totalRows[i])) {\n if (totalRows[i].nextElementSibling) {\n _this.lastRowBorder(totalRows[i], true);\n }\n break;\n }\n }\n }\n var action = 'action';\n if (_this.enableVirtualization && _this.selectionSettings.persistSelection && (_this.dataResults[action] === 'expand' || _this.dataResults[action] === 'collapse')) {\n var refreshPersistSelection = 'refreshPersistSelection';\n _this.grid.selectionModule[refreshPersistSelection]();\n if (_this.grid.selectionSettings.type === 'Single') {\n var updateRowSelection = 'updateRowSelection';\n var index = _this.getCurrentViewRecords().indexOf(_this.grid.selectionModule['data']);\n _this.grid.selectionModule[updateRowSelection](_this.getRows()[index], index);\n }\n }\n _this.trigger(events.dataBound, args);\n _this.initialRender = false;\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.beforeDataBound = function (args) {\n var dataSource = 'dataSource';\n var requestType = getObject('action', args);\n if (((isRemoteData(treeGrid) && !isOffline(treeGrid)) || isCountRequired(this)) && requestType !== 'edit') {\n treeGrid.notify('updateRemoteLevel', args);\n args = (treeGrid.dataResults);\n }\n else if (treeGrid.flatData.length === 0 && isOffline(treeGrid) && treeGrid.dataSource instanceof DataManager) {\n var dm = treeGrid.dataSource;\n treeGrid.dataModule.convertToFlatData(dm.dataSource.json);\n args.result = treeGrid.grid.dataSource[dataSource].json = treeGrid.flatData;\n }\n if (!isRemoteData(treeGrid) && !isCountRequired(this) && !isNullOrUndefined(treeGrid.dataSource)) {\n if (this.isPrinting) {\n setValue('isPrinting', true, args);\n }\n treeGrid.notify('dataProcessor', args);\n //args = treeGrid.dataModule.dataProcessor(args);\n }\n extend(args, treeGrid.dataResults);\n if (treeGrid.enableImmutableMode) {\n args.result = args.result.slice();\n }\n if (treeGrid.initialRender) {\n this.contentModule.objectEqualityChecker = treeGrid.objectEqualityChecker;\n }\n // treeGrid.notify(events.beforeDataBound, args);\n if (!this.isPrinting) {\n var callBackPromise_1 = new Deferred();\n treeGrid.trigger(events.beforeDataBound, args, function (beforeDataBoundArgs) {\n callBackPromise_1.resolve(beforeDataBoundArgs);\n });\n return callBackPromise_1;\n }\n };\n this.grid.log = function (type, args) {\n if (_this.loggerModule) {\n _this.loggerModule.log(type, args);\n }\n };\n };\n TreeGrid.prototype.bindCallBackEvents = function () {\n var _this = this;\n this.grid.toolbarClick = function (args) {\n if ((args.item.id === _this.grid.element.id + '_excelexport' && _this.allowExcelExport === false) ||\n (args.item.id === _this.grid.element.id + '_pdfexport' && _this.allowPdfExport === false) ||\n (args.item.id === _this.grid.element.id + '_csvexport' && _this.allowExcelExport === false)) {\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.toolbarClick, args, function (toolbarargs) {\n if (!toolbarargs.cancel) {\n _this.notify(events.toolbarClick, args);\n }\n callBackPromise.resolve(toolbarargs);\n });\n return callBackPromise;\n };\n this.grid.cellSelecting = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger(getObject('name', args), args, function (cellselectingArgs) {\n callBackPromise.resolve(cellselectingArgs);\n });\n return callBackPromise;\n };\n this.grid.beginEdit = function (args) {\n if (!isNullOrUndefined(args.row) && args.row.classList.contains('e-summaryrow')) {\n args.cancel = true;\n return;\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.beginEdit, args, function (begineditArgs) {\n callBackPromise.resolve(begineditArgs);\n });\n return callBackPromise;\n };\n };\n TreeGrid.prototype.extendedGridEditEvents = function () {\n var _this = this;\n this.grid.dataStateChange = function (args) {\n if (_this.isExpandRefresh) {\n _this.isExpandRefresh = false;\n _this.grid.dataSource = { result: _this.flatData, count: getValue('count', _this.grid.dataSource) };\n }\n else {\n _this.trigger(events.dataStateChange, args);\n }\n };\n this.grid.cellSave = function (args) {\n if (_this.grid.isContextMenuOpen()) {\n var contextitems = _this.grid.contextMenuModule.contextMenu.element.getElementsByClassName('e-selected')[0];\n if ((isNullOrUndefined(contextitems) || contextitems.id !== _this.element.id + '_gridcontrol_cmenu_Save')) {\n args.cancel = true;\n }\n }\n var callBackPromise = new Deferred();\n _this.trigger(events.cellSave, args, function (cellsaveArgs) {\n if (!cellsaveArgs.cancel) {\n _this.notify(events.cellSave, cellsaveArgs);\n }\n callBackPromise.resolve(cellsaveArgs);\n });\n return callBackPromise;\n };\n this.grid.cellSaved = function (args) {\n _this.trigger(events.cellSaved, args);\n _this.notify(events.cellSaved, args);\n };\n this.grid.cellEdit = function (args) {\n var prom = 'promise';\n var promise = new Deferred();\n args[prom] = promise;\n _this.notify(events.cellEdit, args);\n return promise;\n };\n this.grid.batchAdd = function (args) {\n _this.trigger(events.batchAdd, args);\n _this.notify(events.batchAdd, args);\n };\n this.grid.beforeBatchSave = function (args) {\n _this.trigger(events.beforeBatchSave, args);\n _this.notify(events.beforeBatchSave, args);\n };\n this.grid.beforeBatchAdd = function (args) {\n _this.trigger(events.beforeBatchAdd, args);\n _this.notify(events.beforeBatchAdd, args);\n };\n this.grid.batchDelete = function (args) {\n _this.trigger(events.batchDelete, args);\n _this.notify(events.batchDelete, args);\n };\n this.grid.beforeBatchDelete = function (args) {\n _this.trigger(events.beforeBatchDelete, args);\n _this.notify(events.beforeBatchDelete, args);\n };\n this.grid.batchCancel = function (args) {\n if (_this.editSettings.mode !== 'Cell') {\n _this.trigger(events.batchCancel, args);\n }\n _this.notify(events.batchCancel, args);\n };\n };\n TreeGrid.prototype.updateRowTemplate = function () {\n this.treeColumnRowTemplate();\n };\n TreeGrid.prototype.bindedDataSource = function () {\n var dataSource = 'dataSource';\n var isDataAvailable = 'isDataAvailable';\n var adaptor = 'adaptor';\n var ready = 'ready';\n if (this.dataSource && isCountRequired(this)) {\n var data = this.flatData;\n var datacount = getValue('count', this.dataSource);\n this.grid.dataSource = { result: data, count: datacount };\n }\n else {\n this.grid.dataSource = !(this.dataSource instanceof DataManager) ?\n this.flatData : new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor);\n }\n if (this.dataSource instanceof DataManager && (this.dataSource.dataSource.offline || this.dataSource.ready)) {\n this.grid.dataSource[dataSource].json = extendArray(this.dataSource[dataSource].json);\n this.grid.dataSource[ready] = this.dataSource.ready;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if (!isNullOrUndefined(this.grid.dataSource[ready])) {\n this.grid.dataSource[ready].then(function (e) {\n var dm = proxy_1.grid.dataSource;\n dm[dataSource].offline = true;\n dm[isDataAvailable] = true;\n dm[dataSource].json = e.result;\n dm[adaptor] = new JsonAdaptor();\n });\n }\n }\n };\n TreeGrid.prototype.extendedGridActionEvents = function () {\n var _this = this;\n this.grid.actionBegin = function (args) {\n if (args.requestType === 'sorting' && args.target && args.target.parentElement &&\n args.target.parentElement.classList.contains('e-hierarchycheckbox')) {\n args.cancel = true;\n }\n var requestType = getObject('requestType', args);\n if (requestType === 'reorder') {\n _this.notify('getColumnIndex', {});\n }\n _this.notify('actionBegin', { editAction: args });\n if (!isRemoteData(_this) && !isNullOrUndefined(_this.filterModule) && !isCountRequired(_this)\n && (_this.grid.filterSettings.columns.length === 0 || _this.grid.searchSettings.key.length === 0)) {\n _this.notify('clearFilters', { flatData: _this.grid.dataSource });\n _this.grid.setProperties({ dataSource: _this.dataResults.result }, true);\n if (isNullOrUndefined(_this.grid['changedProperties'].dataSource)) {\n _this.grid.renderModule.data.dataManager = _this.grid.dataSource instanceof DataManager ?\n _this.grid.dataSource :\n (isNullOrUndefined(_this.grid.dataSource) ? new DataManager() : new DataManager(_this.grid.dataSource));\n _this.grid.renderModule.data.isQueryInvokedFromData = true;\n _this.grid.query = _this.grid.query instanceof Query ? _this.grid.query : new Query();\n }\n }\n if (_this.action !== 'indenting' && _this.action !== 'outdenting') {\n var callBackPromise_2 = new Deferred();\n _this.trigger(events.actionBegin, args, function (actionArgs) {\n if (!actionArgs.cancel) {\n _this.notify(events.beginEdit, actionArgs);\n }\n callBackPromise_2.resolve(actionArgs);\n });\n return callBackPromise_2;\n }\n };\n this.grid.actionComplete = function (args) {\n _this.notify('actioncomplete', args);\n _this.updateColumnModel();\n _this.updateTreeGridModel();\n if (args.requestType === 'reorder') {\n _this.notify('setColumnIndex', {});\n }\n _this.notify('actionComplete', { editAction: args });\n if (args.requestType === 'add' && (_this.editSettings.newRowPosition !== 'Top' && _this.editSettings.newRowPosition !== 'Bottom')) {\n _this.notify(events.beginAdd, args);\n }\n if (args.requestType === 'batchsave') {\n _this.notify(events.batchSave, args);\n }\n _this.notify('updateGridActions', args);\n if (args.requestType === 'save' && _this.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n _this.grid.refresh();\n }\n if (_this.action === 'indenting' || _this.action === 'outdenting') {\n _this.action = _this.action === 'indenting' ? 'indented' : 'outdented';\n var selectedItem_1 = [_this.selectedRecords];\n var actionArgs = {\n data: selectedItem_1,\n dropIndex: _this.dropIndex,\n dropPosition: _this.dropPosition,\n modifiedRecords: _this.modifiedRecords,\n requestType: _this.action,\n row: _this.selectedRows\n };\n _this.trigger(events.actionComplete, actionArgs);\n var currentPageItem = _this.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === selectedItem_1[0].uniqueID;\n });\n if (!currentPageItem.length) {\n _this.refreshToolbarItems();\n }\n _this.action = '';\n _this.selectedRecords = _this.selectedRows = _this.modifiedRecords = [];\n }\n else {\n _this.trigger(events.actionComplete, args);\n }\n };\n };\n TreeGrid.prototype.extendedGridEvents = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var treeGrid = this;\n this.grid.recordDoubleClick = function (args) {\n _this.trigger(events.recordDoubleClick, args);\n _this.notify(events.recordDoubleClick, args);\n };\n this.grid.detailDataBound = function (args) {\n _this.notify('detaildataBound', args);\n _this.trigger(events.detailDataBound, args);\n };\n this.grid.rowDataBound = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.RowModifier(args);\n };\n this.grid.queryCellInfo = function (args) {\n if (isNullOrUndefined(this.isPrinting)) {\n setValue('isPrinting', false, args);\n }\n else {\n setValue('isPrinting', this.isPrinting, args);\n }\n treeGrid.renderModule.cellRender(args);\n };\n this.grid.contextMenuClick = function (args) {\n _this.notify(events.contextMenuClick, args);\n _this.trigger(events.contextMenuClick, args);\n };\n this.grid.contextMenuOpen = function (args) {\n _this.notify(events.contextMenuOpen, args);\n _this.trigger(events.contextMenuOpen, args);\n };\n this.grid.queryCellInfo = function (args) {\n _this.renderModule.cellRender(args);\n };\n };\n TreeGrid.prototype.bindGridDragEvents = function () {\n var _this = this;\n this.grid.rowDragStartHelper = function (args) {\n _this.trigger(events.rowDragStartHelper, args);\n };\n this.grid.rowDragStart = function (args) {\n _this.trigger(events.rowDragStart, args);\n };\n this.grid.rowDrag = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowdraging, args);\n _this.trigger(events.rowDrag, args);\n };\n this.grid.rowDrop = function (args) {\n if (_this.grid.isEdit) {\n args.cancel = true;\n return;\n }\n _this.notify(events.rowDropped, args);\n args.cancel = true;\n };\n };\n /**\n * Renders TreeGrid component\n *\n * @private\n * @returns {void}\n */\n TreeGrid.prototype.loadGrid = function () {\n this.bindGridProperties();\n this.bindGridEvents();\n setValue('registeredTemplate', this.registeredTemplate, this.grid);\n var ref = 'viewContainerRef';\n setValue('viewContainerRef', this[ref], this.grid);\n };\n /**\n * AutoGenerate TreeGrid columns from first record\n *\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.autoGenerateColumns = function () {\n if (!this.columns.length && (!this.dataModule.isRemote() && Object.keys(this.dataSource).length)) {\n this.columns = [];\n // if (this.dataSource instanceof DataManager) {\n // record = (<DataManager>this.dataSource).dataSource.json[0];\n // } else {\n var record = this.dataSource[0];\n // }\n var keys = Object.keys(record);\n for (var i = 0; i < keys.length; i++) {\n if ([this.childMapping, this.parentIdMapping].indexOf(keys[i]) === -1) {\n this.columns.push(keys[i]);\n }\n }\n }\n };\n TreeGrid.prototype.getGridEditSettings = function () {\n var edit = {};\n var guid = 'guid';\n edit.allowAdding = this.editSettings.allowAdding;\n edit.allowEditing = this.editSettings.allowEditing;\n edit.allowDeleting = this.editSettings.allowDeleting;\n edit.newRowPosition = this.editSettings.newRowPosition === 'Bottom' ? 'Bottom' : 'Top';\n edit.allowEditOnDblClick = this.editSettings.allowEditOnDblClick;\n edit.showConfirmDialog = this.editSettings.showConfirmDialog;\n edit.template = this.editSettings.template;\n edit.showDeleteConfirmDialog = this.editSettings.showDeleteConfirmDialog;\n edit.allowNextRowEdit = this.editSettings.allowNextRowEdit;\n edit[guid] = this.editSettings[guid];\n edit.dialog = this.editSettings.dialog;\n switch (this.editSettings.mode) {\n case 'Dialog':\n edit.mode = this.editSettings.mode;\n break;\n case 'Batch':\n edit.mode = this.editSettings.mode;\n break;\n case 'Row':\n edit.mode = 'Normal';\n break;\n case 'Cell':\n edit.mode = 'Normal';\n edit.showConfirmDialog = false;\n break;\n }\n return edit;\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - returns context menu items\n */\n TreeGrid.prototype.getContextMenu = function () {\n if (this.contextMenuItems) {\n var items = [];\n for (var i = 0; i < this.contextMenuItems.length; i++) {\n switch (this.contextMenuItems[i]) {\n case 'AddRow':\n case ContextMenuItems.AddRow:\n items.push({ text: this.l10n.getConstant('AddRow'),\n target: '.e-content', id: this.element.id + '_gridcontrol_cmenu_AddRow',\n items: [{ text: this.l10n.getConstant('Above'), id: 'Above' }, { text: this.l10n.getConstant('Below'), id: 'Below' }, { text: this.l10n.getConstant('Child'), id: 'Child' }] });\n break;\n case 'Indent':\n case ContextMenuItems.RowIndent:\n items.push({ text: this.l10n.getConstant('RowIndent'),\n target: '.e-content', iconCss: 'e-indent e-icons', id: this.element.id + '_gridcontrol_cmenu_Indent' });\n break;\n case 'Outdent':\n case ContextMenuItems.RowOutdent:\n items.push({ text: this.l10n.getConstant('RowOutdent'),\n target: '.e-content', iconCss: 'e-outdent e-icons', id: this.element.id + '_gridcontrol_cmenu_Outdent' });\n break;\n default:\n items.push(this.contextMenuItems[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n /**\n * Defines grid toolbar from treegrid toolbar model\n *\n * @hidden\n * @returns {Object[]} - Returns toolbar items\n */\n TreeGrid.prototype.getGridToolbar = function () {\n if (this.toolbar) {\n this.l10n = new L10n('treegrid', this.defaultLocale, this.locale);\n var items = [];\n var tooltipText = void 0;\n for (var i = 0; i < this.toolbar.length; i++) {\n switch (this.toolbar[i]) {\n case 'Search':\n case ToolbarItem.Search:\n items.push('Search');\n break;\n case 'Print':\n case ToolbarItem.Print:\n items.push('Print');\n break;\n case 'ExpandAll':\n case ToolbarItem.ExpandAll:\n tooltipText = this.l10n.getConstant('ExpandAll');\n items.push({ text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-expand', id: this.element.id + '_gridcontrol_expandall' });\n break;\n case 'CollapseAll':\n case ToolbarItem.CollapseAll:\n tooltipText = this.l10n.getConstant('CollapseAll');\n items.push({ text: tooltipText,\n tooltipText: tooltipText, prefixIcon: 'e-collapse', id: this.element.id + '_gridcontrol_collapseall'\n });\n break;\n case 'Indent':\n case ToolbarItem.RowIndent:\n tooltipText = this.l10n.getConstant('RowIndent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-indent', id: this.element.id + '_gridcontrol_indent'\n });\n break;\n case 'Outdent':\n case ToolbarItem.RowOutdent:\n tooltipText = this.l10n.getConstant('RowOutdent');\n items.push({\n text: tooltipText, tooltipText: tooltipText,\n prefixIcon: 'e-outdent', id: this.element.id + '_gridcontrol_outdent'\n });\n break;\n default:\n items.push(this.toolbar[i]);\n }\n }\n return items;\n }\n else {\n return null;\n }\n };\n TreeGrid.prototype.getGridColumns = function (columns, isEmptyColumnModel, index) {\n if (isEmptyColumnModel === void 0) { isEmptyColumnModel = true; }\n if (index === void 0) { index = 0; }\n var column = columns;\n var stackedColumn = 'columns';\n if (isEmptyColumnModel) {\n this.columnModel = [];\n }\n var treeGridColumn;\n var gridColumn;\n index = index === 0 ? -1 : index;\n var gridColumnCollection = [];\n for (var i = 0; i < column.length; i++) {\n index = index + 1;\n var treeColumn = this.grid.getColumnByUid(column[i].uid);\n gridColumn = treeColumn ? treeColumn : {};\n treeGridColumn = {};\n if (typeof this.columns[i] === 'string') {\n gridColumn.field = treeGridColumn.field = this.columns[i];\n }\n else {\n for (var _i = 0, _a = Object.keys(column[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n if (index === this.treeColumnIndex && prop === 'template') {\n treeGridColumn[prop] = column[i][prop];\n }\n else if (prop === 'columns' && !isNullOrUndefined(column[i][prop])) {\n gridColumn[prop] = this.getGridColumns(column[i][prop], false, index);\n treeGridColumn[prop] = column[i][prop];\n }\n else if (this.initialRender && !isNullOrUndefined(treeColumn) && this.enablePersistence && prop === 'edit') {\n gridColumn[prop] = treeGridColumn[prop] = treeColumn[prop];\n }\n else if (!(treeColumn) || prop !== 'sortComparer') {\n gridColumn[prop] = treeGridColumn[prop] = column[i][prop];\n }\n }\n }\n if (!treeGridColumn[stackedColumn]) {\n this.columnModel.push(new Column(treeGridColumn));\n }\n gridColumnCollection.push(gridColumn);\n if (!isNullOrUndefined(this.columnModel[this.treeColumnIndex]) && this.enableRtl) {\n if (gridColumn.field === this.columnModel[this.treeColumnIndex].field) {\n if (isNullOrUndefined(this.treeColumnTextAlign)) {\n this.treeColumnTextAlign = this.columnModel[this.treeColumnIndex].textAlign;\n this.treeColumnField = this.columnModel[this.treeColumnIndex].field;\n }\n gridColumn.textAlign = 'Right';\n }\n }\n }\n return gridColumnCollection;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeGridModel} newProp - properties details which has to be modified\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.onPropertyChanged = function (newProp) {\n var properties = Object.keys(newProp);\n var requireRefresh = false;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'columns':\n this.grid.columns = this.getGridColumns(this.columns);\n break;\n case 'treeColumnIndex':\n this.grid.refreshColumns();\n break;\n case 'allowPaging':\n this.grid.allowPaging = this.allowPaging;\n break;\n case 'pageSettings':\n this.grid.pageSettings = getActualProperties(this.pageSettings);\n requireRefresh = true;\n break;\n case 'enableVirtualization':\n this.grid.enableVirtualization = this.enableVirtualization;\n break;\n case 'enableColumnVirtualization':\n this.grid.enableColumnVirtualization = this.enableColumnVirtualization;\n break;\n case 'toolbar':\n this.grid.toolbar = this.getGridToolbar();\n break;\n case 'allowSelection':\n this.grid.allowSelection = this.allowSelection;\n break;\n case 'selectionSettings':\n this.grid.selectionSettings = getActualProperties(this.selectionSettings);\n break;\n case 'allowSorting':\n this.grid.allowSorting = this.allowSorting;\n break;\n case 'allowMultiSorting':\n this.grid.allowMultiSorting = this.allowMultiSorting;\n break;\n case 'sortSettings':\n this.grid.sortSettings = getActualProperties(this.sortSettings);\n break;\n case 'searchSettings':\n this.grid.searchSettings = getActualProperties(this.searchSettings);\n break;\n case 'allowFiltering':\n this.grid.allowFiltering = this.allowFiltering;\n break;\n case 'filterSettings':\n if (!this.initialRender) {\n this.grid.filterSettings = getActualProperties(this.filterSettings);\n }\n break;\n case 'showColumnMenu':\n this.grid.showColumnMenu = this.showColumnMenu;\n break;\n case 'allowRowDragAndDrop':\n this.grid.allowRowDragAndDrop = this.allowRowDragAndDrop;\n break;\n case 'aggregates':\n this.grid.aggregates = getActualProperties(this.aggregates);\n break;\n case 'enableInfiniteScrolling':\n this.grid.enableInfiniteScrolling = this.enableInfiniteScrolling;\n break;\n case 'dataSource':\n this.isLocalData = (!(this.dataSource instanceof DataManager) || (!isNullOrUndefined(this.dataSource.ready))\n || this.dataSource.adaptor instanceof RemoteSaveAdaptor);\n this.convertTreeData(this.dataSource);\n if (this.isLocalData) {\n if (isCountRequired(this)) {\n var count = getValue('count', this.dataSource);\n this.grid.dataSource = { result: this.flatData, count: count };\n }\n else {\n var data = this.dataSource;\n this.grid.dataSource = !(data instanceof DataManager) ?\n this.flatData : new DataManager(data.dataSource, data.defaultQuery, data.adaptor);\n }\n if (this.enableVirtualization) {\n this.grid.contentModule.isDataSourceChanged = true;\n }\n }\n else {\n this.bindedDataSource();\n if (this.enableVirtualization) {\n this.grid.contentModule.removeEventListener();\n this.grid.contentModule.eventListener('on');\n this.grid.contentModule.renderTable();\n }\n }\n break;\n case 'query':\n this.grid.query = this.query;\n break;\n case 'enableCollapseAll':\n if (newProp[prop]) {\n this.collapseAll();\n }\n else {\n this.expandAll();\n }\n break;\n case 'expandStateMapping':\n this.grid.refresh();\n break;\n case 'gridLines':\n this.grid.gridLines = this.gridLines;\n break;\n case 'rowTemplate':\n this.grid.rowTemplate = getActualProperties(this.rowTemplate);\n break;\n case 'frozenRows':\n this.grid.frozenRows = this.frozenRows;\n break;\n case 'frozenColumns':\n this.grid.frozenColumns = this.frozenColumns;\n break;\n case 'rowHeight':\n this.grid.rowHeight = this.rowHeight;\n break;\n case 'height':\n if (!isNullOrUndefined(this.height) && typeof (this.height) === 'string' && this.height.indexOf('%') !== -1) {\n this.element.style.height = this.height;\n }\n this.grid.height = this.height;\n break;\n case 'width':\n if (!isNullOrUndefined(this.width) && typeof (this.width) === 'string' && this.width.indexOf('%') !== -1) {\n this.element.style.width = this.width;\n }\n this.grid.width = this.width;\n break;\n case 'locale':\n this.grid.locale = this.locale;\n this.TreeGridLocale();\n this.grid.toolbar = this.getGridToolbar();\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'selectedRowIndex':\n this.grid.selectedRowIndex = this.selectedRowIndex;\n break;\n case 'enableAltRow':\n this.grid.enableAltRow = this.enableAltRow;\n break;\n case 'enableHover':\n this.grid.enableHover = this.enableHover;\n break;\n case 'enableAutoFill':\n this.grid.enableAutoFill = this.enableAutoFill;\n break;\n case 'enableAdaptiveUI':\n this.grid.enableAdaptiveUI = this.enableAdaptiveUI;\n break;\n case 'enableImmutableMode':\n this.grid.enableImmutableMode = this.enableImmutableMode;\n break;\n case 'allowExcelExport':\n this.grid.allowExcelExport = this.allowExcelExport;\n break;\n case 'allowPdfExport':\n this.grid.allowPdfExport = this.allowPdfExport;\n break;\n case 'enableRtl':\n if (!isNullOrUndefined(this.treeColumnField)) {\n this.updateTreeColumnTextAlign();\n }\n this.grid.enableRtl = this.enableRtl;\n break;\n case 'allowReordering':\n this.grid.allowReordering = this.allowReordering;\n break;\n case 'allowResizing':\n this.grid.allowResizing = this.allowResizing;\n break;\n case 'textWrapSettings':\n this.grid.textWrapSettings = getActualProperties(this.textWrapSettings);\n break;\n case 'allowTextWrap':\n this.grid.allowTextWrap = getActualProperties(this.allowTextWrap);\n this.grid.refresh();\n break;\n case 'contextMenuItems':\n this.grid.contextMenuItems = this.getContextMenu();\n break;\n case 'showColumnChooser':\n this.grid.showColumnChooser = this.showColumnChooser;\n break;\n case 'detailTemplate':\n this.grid.detailTemplate = getActualProperties(this.detailTemplate);\n break;\n case 'columnMenuItems':\n this.grid.columnMenuItems = getActualProperties(this.columnMenuItems);\n break;\n case 'editSettings':\n if (this.grid.isEdit && this.grid.editSettings.mode === 'Normal' && newProp[prop].mode &&\n (newProp[prop].mode === 'Cell' || newProp[prop].mode === 'Row')) {\n this.grid.closeEdit();\n }\n this.grid.editSettings = this.getGridEditSettings();\n break;\n }\n if (requireRefresh) {\n this.grid.refresh();\n }\n }\n };\n TreeGrid.prototype.updateTreeColumnTextAlign = function () {\n var gridColumn = this.grid.getColumnByField(this.treeColumnField);\n gridColumn.textAlign = this.enableRtl ? 'Right' : this.treeColumnTextAlign;\n this.grid.refreshColumns();\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @method destroy\n * @returns {void}\n */\n TreeGrid.prototype.destroy = function () {\n var treeGridElement = this.element;\n if (!treeGridElement) {\n return;\n }\n var hasTreeGridChild = treeGridElement.querySelector('.' + 'e-gridheader') &&\n treeGridElement.querySelector('.' + 'e-gridcontent') ? true : false;\n if (hasTreeGridChild) {\n this.unwireEvents();\n }\n this.removeListener();\n if (hasTreeGridChild) {\n _super.prototype.destroy.call(this);\n }\n if (this.grid) {\n this.grid.destroy();\n }\n if (this.dataModule) {\n this.dataModule.destroy();\n }\n var modules = ['dataModule', 'sortModule', 'renderModule', 'filterModule', 'printModule', 'clipboardModule',\n 'excelExportModule', 'pdfExportModule', 'toolbarModule', 'summaryModule', 'reorderModule', 'resizeModule',\n 'pagerModule', 'keyboardModule', 'columnMenuModule', 'contextMenuModule', 'editModule', 'virtualScrollModule',\n 'selectionModule', 'detailRow', 'rowDragAndDropModule', 'freezeModule'];\n for (var i = 0; i < modules.length; i++) {\n if (this[modules[i]]) {\n this[modules[i]] = null;\n }\n }\n this.element.innerHTML = '';\n this.grid = null;\n };\n /**\n * Update the TreeGrid model\n *\n * @method dataBind\n * @returns {void}\n * @private\n */\n TreeGrid.prototype.dataBind = function () {\n if (isNullOrUndefined(this.grid)) {\n return;\n }\n if (!isNullOrUndefined(this.rowDropSettings.targetID) &&\n isNullOrUndefined(document.getElementById(this.grid.rowDropSettings.targetID))) {\n document.getElementById(this.rowDropSettings.targetID).id = this.grid.rowDropSettings.targetID;\n this.rowDropSettings.targetID = this.grid.rowDropSettings.targetID;\n }\n _super.prototype.dataBind.call(this);\n this.grid.dataBind();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns persist properties details\n * @hidden\n */\n TreeGrid.prototype.getPersistData = function () {\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'treeColumnIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'pageSizeMode', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent', 'hierarchyMode'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n for (var i = 0; i < keyEntity.length; i++) {\n var currentObject = this[keyEntity[i]];\n for (var k = 0, val = ignoreOnPersist[keyEntity[i]]; (!isNullOrUndefined(val) && k < val.length); k++) {\n var objVal = val[k];\n delete currentObject[objVal];\n }\n }\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n TreeGrid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].columns) {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n this.ignoreInArrays(ignoreOnColumn, columns[i].columns);\n }\n else {\n this.ignoreInColumn(ignoreOnColumn, columns[i]);\n }\n }\n };\n TreeGrid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n for (var i = 0; i < ignoreOnColumn.length; i++) {\n delete column[ignoreOnColumn[i]];\n column.filter = {};\n }\n };\n TreeGrid.prototype.mouseClickHandler = function (e) {\n if (!isNullOrUndefined(e.touches)) {\n return;\n }\n var target = e.target;\n if ((target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && (!this.isEditCollapse && !this.grid.isEdit)) {\n this.expandCollapseRequest(target);\n }\n this.isEditCollapse = false;\n this.notify('checkboxSelection', { target: target });\n };\n /**\n * Returns TreeGrid rows\n *\n * @returns {HTMLTableRowElement[]} - Returns row elements collection\n */\n TreeGrid.prototype.getRows = function () {\n return this.grid.getRows();\n };\n /**\n * Gets the pager of the TreeGrid.\n *\n * @returns {Element} - Returns pager element\n */\n TreeGrid.prototype.getPager = function () {\n return this.grid.getPager(); //get element from pager\n };\n /**\n * Adds a new record to the TreeGrid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n *\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added.\n * @param {RowPosition} position - Defines the new row position to be added.\n * @returns {void}\n */\n TreeGrid.prototype.addRecord = function (data, index, position) {\n if (this.editModule) {\n var isAddedRowByMethod = 'isAddedRowByMethod';\n this.editModule[isAddedRowByMethod] = true;\n this.editModule.addRecord(data, index, position);\n }\n };\n /**\n * Cancels edited state.\n *\n * @returns {void}\n */\n TreeGrid.prototype.closeEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.closeEdit();\n }\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n *\n * @returns {void}\n */\n TreeGrid.prototype.saveCell = function () {\n if (this.grid.editModule) {\n this.grid.editModule.saveCell();\n }\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n *\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n * @returns {void}\n */\n TreeGrid.prototype.updateCell = function (rowIndex, field, value) {\n if (this.grid.editModule) {\n this.grid.editModule.updateCell(rowIndex, field, value);\n }\n };\n /**\n * To update the specified row by given values without changing into edited state.\n *\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n * @returns {void}\n */\n TreeGrid.prototype.updateRow = function (index, data) {\n if (this.grid.editModule) {\n if (!isNullOrUndefined(index)) {\n var griddata = this.grid.getCurrentViewRecords()[index];\n extend(griddata, data);\n this.grid.editModule.updateRow(index, griddata);\n }\n else {\n this.grid.editModule.updateRow(index, data);\n }\n }\n };\n /**\n * Delete a record with Given options. If fieldName and data is not given then TreeGrid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n *\n * @param {string} fieldName - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRecord = function (fieldName, data) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRecord(fieldName, data);\n }\n };\n /**\n * To edit any particular row by TR element.\n *\n * @param {HTMLTableRowElement} row - Defines the table row to be edited.\n * @returns {void}\n */\n TreeGrid.prototype.startEdit = function (row) {\n if (this.grid.editModule) {\n this.grid.editModule.startEdit(row);\n }\n };\n /**\n * To edit any particular cell using row index and cell index.\n *\n * @param {number} rowIndex - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform cell edit.\n * @returns {void}\n */\n TreeGrid.prototype.editCell = function (rowIndex, field) {\n if (this.editModule) {\n this.editModule.editCell(rowIndex, field);\n }\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n */\n TreeGrid.prototype.enableToolbarItems = function (items, isEnable) {\n if (this.grid.toolbarModule) {\n this.grid.toolbarModule.enableItems(items, isEnable);\n }\n };\n /**\n * If TreeGrid is in editable state, you can save a record by invoking endEdit.\n *\n * @returns {void}\n */\n TreeGrid.prototype.endEdit = function () {\n if (this.grid.editModule) {\n this.grid.editModule.endEdit();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} x - Defines the X axis.\n * @param {number} y - Defines the Y axis.\n * @returns {void}\n */\n TreeGrid.prototype.openColumnChooser = function (x, y) {\n if (this.columnChooserModule) {\n this.columnChooserModule.openColumnChooser(x, y);\n }\n };\n /**\n * Delete any visible row by TR element.\n *\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n * @returns {void}\n */\n TreeGrid.prototype.deleteRow = function (tr) {\n if (this.grid.editModule) {\n this.grid.editModule.deleteRow(tr);\n }\n };\n /**\n * Get the names of the primary key columns of the TreeGrid.\n *\n * @returns {string[]} - Returns primary key collection\n */\n TreeGrid.prototype.getPrimaryKeyFieldNames = function () {\n return this.grid.getPrimaryKeyFieldNames();\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n * @returns {void}\n */\n TreeGrid.prototype.setCellValue = function (key, field, value) {\n this.grid.setCellValue(key, field, value);\n var rowIndex = this.grid.getRowIndexByPrimaryKey(key);\n var record = this.getCurrentViewRecords()[rowIndex];\n if (!isNullOrUndefined(record)) {\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, field);\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n *\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n * @returns {void}\n */\n TreeGrid.prototype.setRowData = function (key, rowData) {\n var currentRecords = this.getCurrentViewRecords();\n var primaryKey = this.grid.getPrimaryKeyFieldNames()[0];\n var level = 0;\n var record = {};\n currentRecords.some(function (value) {\n if (value[primaryKey] === key) {\n record = value;\n return true;\n }\n else {\n return false;\n }\n });\n level = record.level;\n rowData.level = level;\n rowData.index = record.index;\n rowData.childRecords = record.childRecords;\n rowData.taskData = record.taskData;\n rowData.uniqueID = record.uniqueID;\n rowData.parentItem = record.parentItem;\n rowData.checkboxState = record.checkboxState;\n rowData.hasChildRecords = record.hasChildRecords;\n rowData.parentUniqueID = record.parentUniqueID;\n rowData.expanded = record.expanded;\n this.grid.setRowData(key, rowData);\n var visibleRecords = this.getVisibleRecords();\n if (visibleRecords.length > 0 && key === (visibleRecords[visibleRecords.length - 1])[primaryKey]) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(this.getRows()[currentRecords.indexOf(record)], sHeight <= clientHeight);\n }\n };\n /**\n * Navigates to the specified target page.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n TreeGrid.prototype.goToPage = function (pageNo) {\n if (this.grid.pagerModule) {\n this.grid.pagerModule.goToPage(pageNo);\n }\n };\n /**\n * Defines the text of external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n TreeGrid.prototype.updateExternalMessage = function (message) {\n if (this.pagerModule) {\n this.grid.pagerModule.updateExternalMessage(message);\n }\n };\n /**\n * Gets a cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns cell element in grid content\n */\n TreeGrid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a Column by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.columnModel, function (item) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {Column} - Returns tree grid column\n */\n TreeGrid.prototype.getColumnByUid = function (uid) {\n var Columns = this.initialRender ? this.grid.columns : this.columns;\n var columnModel = 'columnModel';\n if (this.grid.columns.length !== this.columnModel.length) {\n Columns = this.grid[columnModel];\n }\n return iterateArrayOrObject(Columns, function (item) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets the collection of column fields.\n *\n * @returns {string[]} - Returns column field name as collection\n */\n TreeGrid.prototype.getColumnFieldNames = function () {\n return this.grid.getColumnFieldNames();\n };\n /**\n * Gets the footer div of the TreeGrid.\n *\n * @returns {Element} - Returns footer content div element\n */\n TreeGrid.prototype.getFooterContent = function () {\n return this.grid.getFooterContent();\n };\n /**\n * Gets the footer table element of the TreeGrid.\n *\n * @returns {Element} - Returns footer content table element\n */\n TreeGrid.prototype.getFooterContentTable = function () {\n return this.grid.getFooterContentTable();\n };\n /**\n * Shows a column by its column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.showColumns = function (keys, showBy) {\n this.grid.showColumns(keys, showBy);\n this.updateColumnModel();\n };\n /**\n * Hides a column by column name.\n *\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @returns {void}\n */\n TreeGrid.prototype.hideColumns = function (keys, hideBy) {\n this.grid.hideColumns(keys, hideBy);\n this.updateColumnModel();\n };\n /**\n * Gets a column header by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByField = function (field) {\n return this.grid.getColumnHeaderByField(field);\n };\n /**\n * Gets a column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByIndex = function (index) {\n return this.grid.getColumnHeaderByIndex(index);\n };\n /**\n * Gets a column header by UID.\n *\n * @param {string} uid - Specifies the column uid.\n * @returns {Element} - Returns column header element\n */\n TreeGrid.prototype.getColumnHeaderByUid = function (uid) {\n return this.grid.getColumnHeaderByUid(uid);\n };\n /**\n * Gets a column index by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByField = function (field) {\n return this.grid.getColumnIndexByField(field);\n };\n TreeGrid.prototype.getVirtualColIndexByUid = function (uid) {\n var columnModel = 'columnModel';\n var index = iterateArrayOrObject(this.grid[columnModel], function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets a column index by UID.\n *\n * @param {string} uid - Specifies the column UID.\n * @returns {number} - Returns column index\n */\n TreeGrid.prototype.getColumnIndexByUid = function (uid) {\n return this.grid.getColumnIndexByUid(uid);\n };\n /**\n * Gets the columns from the TreeGrid.\n *\n * @param {boolean} isRefresh - Defined whether to update DOM\n * @returns {Column[]} - Returns treegrid columns collection\n */\n TreeGrid.prototype.getColumns = function (isRefresh) {\n this.updateColumnModel(this.grid.getColumns(isRefresh));\n return this.columnModel;\n };\n TreeGrid.prototype.updateColumnModel = function (column) {\n var temp;\n var field;\n var gridColumns = isNullOrUndefined(column) ? this.grid.getColumns() : column;\n if (this.treeColumnIndex !== -1 && this.columnModel[this.treeColumnIndex] &&\n !isNullOrUndefined(this.columnModel[this.treeColumnIndex].template)) {\n temp = this.columnModel[this.treeColumnIndex].template;\n field = this.columnModel[this.treeColumnIndex].field;\n }\n var gridColumn;\n if (!this.enableColumnVirtualization || (this.enableColumnVirtualization && this.columnModel.length === gridColumns.length)) {\n this.columnModel = [];\n for (var i = 0; i < gridColumns.length; i++) {\n gridColumn = {};\n for (var _i = 0, _a = Object.keys(gridColumns[i]); _i < _a.length; _i++) {\n var prop = _a[_i];\n gridColumn[prop] = gridColumns[i][prop];\n }\n this.columnModel.push(new Column(gridColumn));\n if (field === this.columnModel[i].field && this.columnModel[i].type !== 'checkbox' && (!isNullOrUndefined(temp) && temp !== '')) {\n this.columnModel[i].template = temp;\n }\n }\n }\n var merge = 'deepMerge';\n this[merge] = ['columns']; // Workaround for blazor updateModel\n if (this.grid.columns.length !== this.columnModel.length) {\n this.stackedHeader = true;\n }\n if (!this.stackedHeader) {\n this.setProperties({ columns: this.columnModel }, true);\n }\n this[merge] = undefined; // Workaround for blazor updateModel\n return this.columnModel;\n };\n /**\n * Gets the content div of the TreeGrid.\n *\n * @returns {Element} - Return tree grid content element\n */\n TreeGrid.prototype.getContent = function () {\n return this.grid.getContent();\n };\n TreeGrid.prototype.mergePersistTreeGridData = function () {\n var persist1 = 'mergePersistGridData';\n this.grid[persist1].apply(this);\n };\n TreeGrid.prototype.mergeColumns = function (storedColumn, columns) {\n var persist2 = 'mergeColumns';\n this.grid[persist2].apply(this, [storedColumn, columns]);\n };\n TreeGrid.prototype.updateTreeGridModel = function () {\n this.setProperties({ filterSettings: getObject('properties', this.grid.filterSettings) }, true);\n this.setProperties({ pageSettings: getObject('properties', this.grid.pageSettings) }, true);\n this.setProperties({ searchSettings: getObject('properties', this.grid.searchSettings) }, true);\n this.setProperties({ sortSettings: getObject('properties', this.grid.sortSettings) }, true);\n };\n /**\n * Gets the content table of the TreeGrid.\n *\n * @returns {Element} - Returns content table element\n */\n TreeGrid.prototype.getContentTable = function () {\n return this.grid.getContentTable();\n };\n /**\n * Gets all the TreeGrid's data rows.\n *\n * @returns {Element[]} - Returns row elements\n */\n TreeGrid.prototype.getDataRows = function () {\n var dRows = [];\n var rows = this.grid.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (!rows[i].classList.contains('e-summaryrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Get current visible data of TreeGrid.\n *\n * @returns {Object[]} - Returns current view records\n * @isGenericType true\n */\n TreeGrid.prototype.getCurrentViewRecords = function () {\n return this.grid.currentViewData;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n *\n * @returns {Object} - Returns batch changes\n */\n TreeGrid.prototype.getBatchChanges = function () {\n return this.grid.editModule.getBatchChanges();\n };\n /**\n * Gets the header div of the TreeGrid.\n *\n * @returns {Element} - Returns Header content element\n */\n TreeGrid.prototype.getHeaderContent = function () {\n return this.grid.getHeaderContent();\n };\n /**\n * Gets the header table element of the TreeGrid.\n *\n * @returns {Element} - Return header table element\n */\n TreeGrid.prototype.getHeaderTable = function () {\n return this.grid.getHeaderTable();\n };\n /**\n * Gets a row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns row element\n */\n TreeGrid.prototype.getRowByIndex = function (index) {\n return this.grid.getRowByIndex(index);\n };\n /**\n * Get a row information based on cell\n *\n * @param {Element | EventTarget} target - Target row element\n * @returns {RowInfo} - Returns row information in a JSON object\n */\n TreeGrid.prototype.getRowInfo = function (target) {\n return this.grid.getRowInfo(target);\n };\n /**\n * Gets UID by column name.\n *\n * @param {string} field - Specifies the column name.\n * @returns {string} - Returns unique id based on column field name given\n */\n TreeGrid.prototype.getUidByColumnField = function (field) {\n return this.grid.getUidByColumnField(field);\n };\n /**\n * Gets the visible columns from the TreeGrid.\n *\n * @returns {Column[]} - Returns visible columns collection\n */\n TreeGrid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * By default, TreeGrid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n *\n * @returns {void}\n */\n TreeGrid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually shown spinner needs to hide by `hideSpinnner`.\n *\n * @returns {void}\n */\n TreeGrid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n /**\n * Refreshes the TreeGrid header and content.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refresh = function () {\n this.uniqueIDCollection = {};\n this.convertTreeData(this.dataSource);\n if (!isCountRequired(this)) {\n if (!(this.dataSource instanceof DataManager)) {\n this.grid.dataSource = this.flatData;\n }\n else {\n this.grid.setProperties({\n dataSource: new DataManager(this.dataSource.dataSource, this.dataSource.defaultQuery, this.dataSource.adaptor)\n }, true);\n }\n }\n this.grid.refresh();\n };\n /**\n * Get the records of checked rows.\n *\n * @returns {Object[]} - Returns records that has been checked\n * @isGenericType true\n */\n TreeGrid.prototype.getCheckedRecords = function () {\n return this.selectionModule.getCheckedrecords();\n };\n /**\n * Get the visible records corresponding to rows visually displayed.\n *\n * @returns {Object[]} - Returns visible records based on collapse state of rows\n * @isGenericType true\n */\n TreeGrid.prototype.getVisibleRecords = function () {\n var visibleRecords = [];\n var currentViewRecords = this.getCurrentViewRecords();\n if (!this.allowPaging) {\n for (var i = 0; i < currentViewRecords.length; i++) {\n visibleRecords.push(currentViewRecords[i]);\n if (!currentViewRecords[i].expanded) {\n i += findChildrenRecords(currentViewRecords[i]).length;\n }\n }\n }\n else {\n visibleRecords = currentViewRecords;\n }\n return visibleRecords;\n };\n /**\n * Get the indexes of checked rows.\n *\n * @returns {number[]} - Returns checked row indexes\n */\n TreeGrid.prototype.getCheckedRowIndexes = function () {\n return this.selectionModule.getCheckedRowIndexes();\n };\n /**\n * Checked the checkboxes using rowIndexes.\n *\n * @param {number[]} indexes - row indexes\n * @returns {void}\n */\n TreeGrid.prototype.selectCheckboxes = function (indexes) {\n this.selectionModule.selectCheckboxes(indexes);\n };\n /**\n * Refreshes the TreeGrid column changes.\n *\n * @param {boolean} refreshUI - Defined whether to refresh the DOM\n * @returns {void}\n */\n TreeGrid.prototype.refreshColumns = function (refreshUI) {\n if (isNullOrUndefined(refreshUI) || refreshUI) {\n this.grid.columns = this.getGridColumns(this.columns);\n this.grid.refreshColumns();\n }\n else {\n this.grid.setProperties({ columns: this.getGridColumns(this.columns) }, true);\n }\n };\n /**\n * Refreshes the TreeGrid header.\n *\n * @returns {void}\n */\n TreeGrid.prototype.refreshHeader = function () {\n this.grid.refreshHeader();\n };\n /**\n * Expands or collapse child records\n *\n * @param {HTMLElement} target - Expand collapse icon cell as target element\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.expandCollapseRequest = function (target) {\n if (this.editSettings.mode === 'Batch') {\n var obj = 'dialogObj';\n var showDialog = 'showDialog';\n if (this.getBatchChanges()[this.changedRecords].length ||\n this.getBatchChanges()[this.deletedRecords].length || this.getBatchChanges()[this.addedRecords].length) {\n var dialogObj = this.grid.editModule[obj];\n this.grid.editModule[showDialog]('CancelEdit', dialogObj);\n this.targetElement = target;\n return;\n }\n }\n if (this.rowTemplate) {\n var rowInfo = target.closest('.e-treerowcell').parentElement;\n var record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo, record);\n }\n else {\n this.expandRow(rowInfo, record);\n }\n }\n else {\n var rowInfo = this.grid.getRowInfo(target);\n var record = rowInfo.rowData;\n if (this.enableImmutableMode) {\n record = this.getCurrentViewRecords()[rowInfo.rowIndex];\n }\n if (target.classList.contains('e-treegridexpand')) {\n this.collapseRow(rowInfo.row, record);\n }\n else {\n this.expandRow(rowInfo.row, record);\n }\n }\n };\n /**\n * Expands child rows\n *\n * @param {HTMLTableRowElement} row - Expands the given row\n * @param {Object} record - Expands the given record\n * @param {Object} key - Primary key value\n * @param {number} level - Specifies the hierarchical level of the record\n * @returns {void}\n */\n TreeGrid.prototype.expandRow = function (row, record, key, level) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n if (!isNullOrUndefined(row) && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.expanding, args, function (expandingArgs) {\n if (!expandingArgs.cancel) {\n _this.expandCollapse('expand', row, record);\n if (expandingArgs.expandAll) {\n _this.expandCollapseAllChildren(record, 'expand', key, level);\n }\n var children = 'Children';\n if (!(isRemoteData(_this) && !isOffline(_this)) && (!isCountRequired(_this) || !isNullOrUndefined(record[children]))) {\n var collapseArgs = { data: record, row: row };\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, true);\n }\n _this.trigger(events.expanded, collapseArgs);\n }\n }\n });\n };\n TreeGrid.prototype.expandCollapseAllChildren = function (record, action, key, level) {\n if ((!isNullOrUndefined(key) && record[this.getPrimaryKeyFieldNames()[0]] !== key) ||\n (!isNullOrUndefined(level) && level !== record.level)) {\n return;\n }\n var records = findChildrenRecords(record).filter(function (e) {\n return e.hasChildRecords;\n });\n records.unshift(record);\n for (var i = 0; i < records.length; i++) {\n this.expandCollapse(action, null, records[i]);\n }\n };\n TreeGrid.prototype.setHeightForFrozenContent = function () {\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.grid.getFrozenColumns() > 0 || freeze) {\n this.grid.contentModule.refreshScrollOffset();\n }\n };\n TreeGrid.prototype.getCollapseExpandRecords = function (row, record) {\n if (this.allowPaging && this.pageSettings.pageSizeMode === 'All' && this.isExpandAll && isNullOrUndefined(record) &&\n !isRemoteData(this)) {\n record = this.flatData.filter(function (e) {\n return e.hasChildRecords;\n });\n }\n else if (isNullOrUndefined(record)) {\n if (this.detailTemplate) {\n record = this.grid.getCurrentViewRecords()[row.getAttribute('aria-rowindex')];\n }\n else {\n record = this.grid.getCurrentViewRecords()[row.rowIndex];\n }\n }\n return record;\n };\n /**\n * Collapses child rows\n *\n * @param {HTMLTableRowElement} row - Collapse the given row\n * @param {Object} record - Collapse the given record\n * @param {Object} key - Primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseRow = function (row, record, key) {\n var _this = this;\n record = this.getCollapseExpandRecords(row, record);\n var args = { data: record, row: row, cancel: false };\n this.trigger(events.collapsing, args, function (collapsingArgs) {\n if (!collapsingArgs.cancel) {\n if (collapsingArgs.collapseAll) {\n _this.expandCollapseAllChildren(record, 'collapse', key);\n }\n _this.expandCollapse('collapse', row, record);\n var collapseArgs = { data: record, row: row };\n if (!isRemoteData(_this)) {\n _this.setHeightForFrozenContent();\n if (!isNullOrUndefined(_this.expandStateMapping)) {\n _this.updateExpandStateMapping(collapseArgs.data, false);\n }\n _this.trigger(events.collapsed, collapseArgs);\n if (_this.enableInfiniteScrolling) {\n var scrollHeight = _this.grid.getContent().firstElementChild.scrollHeight;\n var scrollTop = _this.grid.getContent().firstElementChild.scrollTop;\n if ((scrollHeight - scrollTop) < _this.grid.getRowHeight() + +_this.height) {\n _this.grid.getContent().firstElementChild.scrollBy(0, _this.grid.getRowHeight());\n }\n }\n }\n }\n });\n };\n TreeGrid.prototype.updateExpandStateMapping = function (record, state) {\n var totalRecords = record;\n if (totalRecords.length) {\n for (var i = 0; i < totalRecords.length; i++) {\n totalRecords[i][this.expandStateMapping] = state;\n editAction({ value: totalRecords[i], action: 'edit' }, this, this.isSelfReference, totalRecords[i].index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n }\n else {\n record[this.expandStateMapping] = state;\n editAction({ value: record, action: 'edit' }, this, this.isSelfReference, record.index, this.grid.selectedRowIndex, this.expandStateMapping);\n }\n };\n /**\n * Expands the records at specific hierarchical level\n *\n * @param {number} level - Expands the parent rows at given level\n * @returns {void}\n */\n TreeGrid.prototype.expandAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var rec = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = true;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.expandAction(rec, null, level, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var record = getObject('records', rec);\n this.expandAction(record, null, level);\n }\n };\n /**\n * Expands the records by given primary key value\n *\n * @param {Object} key - Expands the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.expandByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Expand');\n };\n TreeGrid.prototype.expandAction = function (record, key, level, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n var _loop_1 = function (i) {\n if (!isNullOrUndefined(record[i].parentItem)) {\n var puniqueID_1 = record[i].parentItem.uniqueID;\n var parentItem = this_1.flatData.filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n if (isRemoteData(this_1)) {\n parentItem = this_1.getCurrentViewRecords().filter(function (e) {\n return e.uniqueID === puniqueID_1;\n });\n }\n if (parentItem[0].expanded === false) {\n record.push(parentItem[0]);\n parentItem[0].expanded = true;\n }\n else {\n if (!getExpandStatus(this_1, parentItem[0], this_1.parentData)) {\n if (parentItem[0].expanded && parentItem[0].parentItem !== undefined) {\n record.push(parentItem[0]);\n }\n }\n }\n }\n if (!isPaging) {\n this_1.expandRow(null, record[i], key, level);\n }\n };\n var this_1 = this;\n for (var i = 0; i < record.length; i++) {\n _loop_1(i);\n }\n if (isPaging) {\n this.expandRow(null, record, key, level);\n }\n };\n TreeGrid.prototype.getRecordDetails = function (level) {\n var rows = this.getRows().filter(function (e) {\n return (e.className.indexOf('level' + level) !== -1\n && (e.querySelector('.e-treegridcollapse') || e.querySelector('.e-treegridexpand')));\n });\n var records = this.getCurrentViewRecords().filter(function (e) {\n return e.level === level && e.hasChildRecords;\n });\n var obj = { records: records, rows: rows };\n return obj;\n };\n /**\n * Collapses the records at specific hierarchical level\n *\n * @param {number} level - Define the parent row level which needs to be collapsed\n * @returns {void}\n */\n TreeGrid.prototype.collapseAtLevel = function (level) {\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization) && !isRemoteData(this)) {\n var record = this.grid.dataSource.filter(function (e) {\n if (e.hasChildRecords && e.level === level) {\n e.expanded = false;\n }\n return e.hasChildRecords && e.level === level;\n });\n this.collapseAction(record, null, true);\n }\n else {\n var rec = this.getRecordDetails(level);\n var records = getObject('records', rec);\n this.collapseAction(records);\n }\n };\n /**\n * Collapses the records by given primary key value\n *\n * @param {Object} key - Collapses the parent rows with given primary key value\n * @returns {void}\n */\n TreeGrid.prototype.collapseByKey = function (key) {\n this.expandCollapseActionByKey(key, 'Collapse');\n };\n TreeGrid.prototype.expandCollapseActionByKey = function (key, action) {\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n var dataSource = isRemoteData(this) ? this.getCurrentViewRecords() : this.grid.dataSource;\n if (!isNullOrUndefined(primaryKeyField)) {\n var rec = dataSource.filter(function (e) {\n return e[primaryKeyField].toString() === key.toString();\n });\n if (action === 'Expand') {\n this.expandAction(rec, key, null);\n }\n else {\n this.collapseAction(rec, key);\n }\n }\n };\n TreeGrid.prototype.collapseAction = function (record, key, isPaging) {\n if (isPaging === void 0) { isPaging = false; }\n if (isPaging) {\n this.collapseRow(null, record);\n }\n else {\n for (var i = 0; i < record.length; i++) {\n this.collapseRow(null, record[i], key);\n }\n }\n if (!this.grid.contentModule.isDataSourceChanged && this.enableVirtualization && this.getRows()\n && this.parentData.length === this.getRows().length) {\n var endIndex = 'endIndex';\n this.grid.contentModule.startIndex = -1;\n this.grid.contentModule[endIndex] = -1;\n }\n };\n /**\n * Expands All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.expandAll = function () {\n this.expandCollapseAll('expand');\n };\n /**\n * Collapses All the rows\n *\n * @returns {void}\n */\n TreeGrid.prototype.collapseAll = function () {\n this.expandCollapseAll('collapse');\n };\n TreeGrid.prototype.expandCollapseAll = function (action) {\n var rows = this.getRows().filter(function (e) {\n return e.querySelector('.e-treegrid' + (action === 'expand' ? 'collapse' : 'expand'));\n });\n if (!rows.length && this.getRows().length) {\n rows.push(this.getRows()[0]);\n }\n this.isExpandAll = true;\n this.isCollapseAll = true;\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)) {\n this.flatData.filter(function (e) {\n if (e.hasChildRecords) {\n e.expanded = action === 'collapse' ? false : true;\n }\n });\n if (rows.length) {\n if (action === 'collapse') {\n this.collapseRow(rows[0]);\n }\n else {\n this.expandRow(rows[0]);\n }\n }\n else if (this.allowPaging) {\n var isExpandCollapseall = this.enableCollapseAll;\n this.setProperties({ enableCollapseAll: true }, true);\n this.grid.pagerModule.goToPage(1);\n this.setProperties({ enableCollapseAll: isExpandCollapseall }, true);\n }\n }\n else {\n for (var i = 0; i < rows.length; i++) {\n if (action === 'collapse') {\n this.collapseRow(rows[i]);\n }\n else {\n this.expandRow(rows[i]);\n }\n }\n }\n this.isExpandAll = false;\n this.isCollapseAll = false;\n };\n TreeGrid.prototype.expandCollapse = function (action, row, record, isChild) {\n var expandingArgs = { row: row, data: record, childData: [], requestType: action };\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n var targetEle;\n if (!isRemoteData(this) && action === 'expand' && this.isSelfReference && isCountRequired(this) && !childRecords.length) {\n this.updateChildOnDemand(expandingArgs);\n }\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n gridRows = [].slice.call(rows);\n }\n var rowIndex;\n if (isNullOrUndefined(row)) {\n rowIndex = this.getCurrentViewRecords().indexOf(record);\n row = gridRows[rowIndex];\n }\n else {\n rowIndex = +row.getAttribute('aria-rowindex');\n }\n if (!isNullOrUndefined(row)) {\n row.setAttribute('aria-expanded', action === 'expand' ? 'true' : 'false');\n }\n if (((this.allowPaging && this.pageSettings.pageSizeMode === 'All') || this.enableVirtualization || this.enableInfiniteScrolling) && !isRemoteData(this)\n && !isCountRequired(this)) {\n this.notify(events.localPagedExpandCollapse, { action: action, row: row, record: record });\n }\n else {\n var displayAction = void 0;\n if (action === 'expand') {\n displayAction = 'table-row';\n if (!isChild) {\n record.expanded = true;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridexpand')) {\n addClass([targetEle], 'e-treegridexpand');\n }\n removeClass([targetEle], 'e-treegridcollapse');\n }\n else {\n displayAction = 'none';\n if (!isChild || isCountRequired(this)) {\n record.expanded = false;\n this.uniqueIDCollection[record.uniqueID].expanded = record.expanded;\n }\n if (!isNullOrUndefined(row)) {\n targetEle = row.getElementsByClassName('e-treegridexpand')[0];\n }\n if (isChild && !isNullOrUndefined(record[this.expandStateMapping]) &&\n !record[this.expandStateMapping] && isNullOrUndefined(targetEle)) {\n targetEle = row.getElementsByClassName('e-treegridcollapse')[0];\n }\n if (isNullOrUndefined(targetEle)) {\n return;\n }\n if (!targetEle.classList.contains('e-treegridcollapse')) {\n addClass([targetEle], 'e-treegridcollapse');\n }\n removeClass([targetEle], 'e-treegridexpand');\n }\n var detailrows = gridRows.filter(function (r) {\n return r.classList.contains('e-griddetailrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (isRemoteData(this) && !isOffline(this)) {\n this.remoteExpand(action, row, record);\n }\n else {\n if ((!isCountRequired(this) || childRecords.length) || action === 'collapse') {\n this.localExpand(action, row, record);\n }\n }\n if (this.isPixelHeight() && !row.cells[0].classList.contains('e-lastrowcell')) {\n var totalRows = this.getRows();\n var rows = this.getContentTable().rows;\n totalRows = [].slice.call(rows);\n for (var i = totalRows.length - 1; i >= 0; i--) {\n if (!isHidden(totalRows[i])) {\n var table = this.getContentTable();\n var sHeight = table.scrollHeight;\n var clientHeight = this.getContent().clientHeight;\n this.lastRowBorder(totalRows[i], sHeight <= clientHeight);\n break;\n }\n }\n }\n this.notify('rowExpandCollapse', { detailrows: detailrows, action: displayAction, record: record, row: row });\n this.updateAltRow(gridRows);\n }\n };\n TreeGrid.prototype.updateChildOnDemand = function (expandingArgs) {\n var _this = this;\n var deff = new Deferred();\n var childDataBind = 'childDataBind';\n expandingArgs[childDataBind] = deff.resolve;\n var record = expandingArgs.data;\n this.trigger(events.dataStateChange, expandingArgs);\n deff.promise.then(function () {\n if (expandingArgs.childData.length) {\n var currentData = (_this.flatData);\n var index = 0;\n for (var i = 0; i < currentData.length; i++) {\n if (currentData[i].taskData === record.taskData) {\n index = i;\n break;\n }\n }\n var data_1 = getValue('result', _this.dataSource);\n var childData = extendArray(expandingArgs.childData);\n var length_1 = record[_this.childMapping] ? record[_this.childMapping].length > childData.length ?\n record[_this.childMapping].length : childData.length : childData.length;\n for (var i = 0; i < length_1; i++) {\n if (record[_this.childMapping]) {\n data_1.filter(function (e, i) {\n if (e[_this.parentIdMapping] === record[_this.idMapping]) {\n data_1.splice(i, 1);\n }\n });\n }\n if (childData[i]) {\n childData[i].level = record.level + 1;\n childData[i].index = Math.ceil(Math.random() * 1000);\n childData[i].parentItem = extend({}, record);\n childData[i].taskData = extend({}, childData[i]);\n delete childData[i].parentItem.childRecords;\n delete childData[i].taskData.parentItem;\n childData[i].parentUniqueID = record.uniqueID;\n childData[i].uniqueID = getUid(_this.element.id + '_data_');\n setValue('uniqueIDCollection.' + childData[i].uniqueID, childData[i], _this);\n if (!isNullOrUndefined(childData[i][_this.childMapping]) ||\n (childData[i][_this.hasChildMapping] && isCountRequired(_this))) {\n childData[i].hasChildRecords = true;\n }\n currentData.splice(index + 1 + i, record[_this.childMapping] && record[_this.childMapping][i] ? 1 : 0, childData[i]);\n }\n else {\n currentData.splice(index + 1 + i, 1);\n }\n }\n currentData[index][_this.childMapping] = childData;\n currentData[index].childRecords = childData;\n currentData[index].expanded = true;\n setValue('uniqueIDCollection.' + currentData[index].uniqueID, currentData[index], _this);\n for (var j = 0; j < expandingArgs.childData.length; j++) {\n data_1.push(expandingArgs.childData[j]);\n }\n }\n _this.isExpandRefresh = true;\n _this.grid.refresh();\n _this.setHeightForFrozenContent();\n _this.trigger(events.expanded, expandingArgs);\n });\n };\n TreeGrid.prototype.remoteExpand = function (action, row, record) {\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_1 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_1);\n }\n var args = { data: record, row: row };\n var rows = [];\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n if (action === 'expand') {\n this.notify(events.remoteExpand, { record: record, rows: rows, parentRow: row });\n var args_1 = { row: row, data: record };\n if (rows.length > 0) {\n this.setHeightForFrozenContent();\n this.trigger(events.expanded, args_1);\n }\n }\n else {\n this.collapseRemoteChild({ record: record, rows: rows });\n this.setHeightForFrozenContent();\n this.trigger(events.collapsed, args);\n }\n };\n TreeGrid.prototype.localExpand = function (action, row, record) {\n var rows;\n var childRecords = this.getCurrentViewRecords().filter(function (e) {\n return e.parentUniqueID === record.uniqueID;\n });\n if (this.isPixelHeight() && row.cells[0].classList.contains('e-lastrowcell')) {\n this.lastRowBorder(row, false);\n }\n var movableRows;\n var freezeRightRows;\n var gridRows = this.getRows();\n if (this.rowTemplate) {\n var rows_2 = this.getContentTable().rows;\n gridRows = [].slice.call(rows_2);\n }\n var displayAction = (action === 'expand') ? 'table-row' : 'none';\n var primaryKeyField = this.getPrimaryKeyFieldNames()[0];\n if (this.enableImmutableMode && !this.allowPaging) {\n rows = [];\n for (var i = 0; i < childRecords.length; i++) {\n var rowIndex = this.grid.getRowIndexByPrimaryKey(childRecords[i][primaryKeyField]);\n rows.push(this.getRows()[rowIndex]);\n }\n }\n else {\n rows = gridRows.filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n var freeze = (this.grid.getFrozenLeftColumnsCount() > 0 || this.grid.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.frozenRows || this.frozenColumns || this.getFrozenColumns() || freeze) {\n movableRows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n if (freeze) {\n freezeRightRows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + record.index + 'level' + (record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n if (!isNullOrUndefined(rows[i])) {\n rows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(movableRows)) {\n movableRows[i].style.display = displayAction;\n }\n if (!isNullOrUndefined(freezeRightRows)) {\n freezeRightRows[i].style.display = displayAction;\n }\n this.notify('childRowExpand', { row: rows[i] });\n if ((!isNullOrUndefined(childRecords[i].childRecords) && childRecords[i].childRecords.length > 0) && (action !== 'expand' ||\n isNullOrUndefined(childRecords[i].expanded) || childRecords[i].expanded)) {\n this.expandCollapse(action, rows[i], childRecords[i], true);\n if (this.frozenColumns <= this.treeColumnIndex && !isNullOrUndefined(movableRows)) {\n this.expandCollapse(action, movableRows[i], childRecords[i], true);\n }\n }\n }\n };\n TreeGrid.prototype.updateAltRow = function (rows) {\n if (this.enableAltRow && !this.rowTemplate) {\n var visibleRowCount = 0;\n for (var i = 0; rows && i < rows.length; i++) {\n var gridRow = rows[i];\n if (gridRow.style.display !== 'none') {\n if (gridRow.classList.contains('e-altrow')) {\n removeClass([gridRow], 'e-altrow');\n }\n if (visibleRowCount % 2 !== 0 && !gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n addClass([gridRow], 'e-altrow');\n }\n if (!gridRow.classList.contains('e-summaryrow') && !gridRow.classList.contains('e-detailrow')) {\n visibleRowCount++;\n }\n }\n }\n }\n };\n TreeGrid.prototype.treeColumnRowTemplate = function () {\n if (this.rowTemplate) {\n var rows = this.getContentTable().rows;\n rows = [].slice.call(rows);\n for (var i = 0; i < rows.length; i++) {\n var rcell = this.grid.getContentTable().rows[i].cells[this.treeColumnIndex];\n var row = rows[i];\n var rowData = this.grid.getRowsObject()[i].data;\n var arg = { data: rowData, row: row, cell: rcell, column: this.getColumns()[this.treeColumnIndex] };\n this.renderModule.cellRender(arg);\n }\n }\n };\n TreeGrid.prototype.collapseRemoteChild = function (rowDetails, isChild) {\n if (!isChild) {\n rowDetails.record.expanded = false;\n }\n var rows = rowDetails.rows;\n var row;\n var childRecord;\n var movablerows = [];\n var rightrows = [];\n var freeze = (this.getFrozenLeftColumnsCount() > 0 || this.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n movablerows = this.getMovableRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n rightrows = this.getFrozenRightRows().filter(function (r) {\n return r.querySelector('.e-gridrowindex' + rowDetails.record.index + 'level' + (rowDetails.record.level + 1));\n });\n }\n for (var i = 0; i < rows.length; i++) {\n rows[i].style.display = 'none';\n row = rows[i];\n var collapsingTd = rows[i].querySelector('.e-detailrowexpand');\n if (!isNullOrUndefined(collapsingTd)) {\n this.grid.detailRowModule.collapse(collapsingTd);\n }\n if (freeze) {\n movablerows[i].style.display = 'none';\n rightrows[i].style.display = 'none';\n if (!rows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n if (movablerows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = movablerows[i];\n }\n else if (rightrows[i].querySelector('.e-treecolumn-container .e-treegridexpand')) {\n row = rightrows[i];\n }\n }\n }\n if (row.querySelector('.e-treecolumn-container .e-treegridexpand')) {\n var expandElement = row.querySelector('.e-treecolumn-container .e-treegridexpand');\n childRecord = this.rowTemplate ? this.grid.getCurrentViewRecords()[rows[i].rowIndex] :\n this.grid.getRowObjectFromUID(rows[i].getAttribute('data-Uid')).data;\n if (!isNullOrUndefined(expandElement) && childRecord.expanded) {\n removeClass([expandElement], 'e-treegridexpand');\n addClass([expandElement], 'e-treegridcollapse');\n }\n var cRow = [];\n var eRows = this.getRows();\n for (var i_1 = 0; i_1 < eRows.length; i_1++) {\n if (eRows[i_1].querySelector('.e-gridrowindex' + childRecord.index + 'level' + (childRecord.level + 1))) {\n cRow.push(eRows[i_1]);\n }\n }\n if (cRow.length && childRecord.expanded) {\n this.collapseRemoteChild({ record: childRecord, rows: cRow }, true);\n }\n }\n }\n };\n /**\n * Updates the rows and cells\n *\n * @param {Object[]} records - Updates the given records\n * @param {HTMLTableRowElement[]} rows - Updates the given rows\n * @param {number} index - Updates the given cell index\n * @returns {void}\n */\n TreeGrid.prototype.updateRowAndCellElements = function (records, rows, index) {\n for (var i = 0; i < records.length; i++) {\n this.renderModule.cellRender({\n data: records[i], cell: rows[i].cells[index],\n column: this.grid.getColumns()[this.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n if (this['action'] === 'indenting' || this['action'] === 'outdenting') {\n this.renderModule.RowModifier({\n data: records[i], row: rows[i]\n });\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.addListener = function () {\n this.on('updateResults', this.updateResultModel, this);\n this.grid.on('initial-end', this.afterGridRender, this);\n };\n TreeGrid.prototype.updateResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n /**\n * @hidden\n * @returns {void}\n */\n TreeGrid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off('updateResults', this.updateResultModel);\n this.grid.off('initial-end', this.afterGridRender);\n };\n /**\n * Filters TreeGrid row by column name with the given options.\n *\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the TreeGrid filters the records with exact match. if false, it filters\n * case insensitive records (uppercase and lowercase letters are treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent is set to true,\n * then filter ignores diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for filter column.\n * @param {string} actualOperator - Defines the actual filter operator for filter column.\n * @returns {void}\n */\n TreeGrid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.grid.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the TreeGrid.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearFiltering = function () {\n this.grid.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n *\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @returns {void}\n * @hidden\n */\n TreeGrid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.grid.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n *\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectRow = function (index, isToggle) {\n this.grid.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n *\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @returns {void}\n */\n TreeGrid.prototype.selectRows = function (rowIndexes) {\n this.grid.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n *\n * @returns {void}\n */\n TreeGrid.prototype.clearSelection = function () {\n this.grid.clearSelection();\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n *\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n * @returns {void}\n */\n TreeGrid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * Paste data from clipboard to selected cells.\n *\n * @param {boolean} data - Specifies the date for paste.\n * @param {boolean} rowIndex - Specifies the row index.\n * @param {boolean} colIndex - Specifies the column index.\n * @returns {void}\n */\n TreeGrid.prototype.paste = function (data, rowIndex, colIndex) {\n this.clipboardModule.paste(data, rowIndex, colIndex);\n };\n /**\n * Selects a cell by the given index.\n *\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @returns {void}\n */\n TreeGrid.prototype.selectCell = function (cellIndex, isToggle) {\n this.grid.selectCell(cellIndex, isToggle);\n };\n /**\n * Gets the collection of selected rows.\n *\n * @returns {Element[]} - Returns selected row elements collection\n */\n TreeGrid.prototype.getSelectedRows = function () {\n return this.grid.getSelectedRows();\n };\n /**\n * Gets a movable table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} - Returns movable cell element from the indexes passed\n */\n TreeGrid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getMovableCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets all the TreeGrid's movable table data rows.\n *\n * @returns {Element[]} - Returns element collection of movable rows\n */\n TreeGrid.prototype.getMovableDataRows = function () {\n return this.grid.getMovableDataRows();\n };\n /**\n * Gets a movable tables row by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} - Returns movable row based on index passed\n */\n TreeGrid.prototype.getMovableRowByIndex = function (index) {\n return this.grid.getMovableRowByIndex(index);\n };\n /**\n * Gets the TreeGrid's movable content rows from frozen treegrid.\n *\n * @returns {Element[]}: Returns movable row element\n */\n TreeGrid.prototype.getMovableRows = function () {\n return this.grid.getMovableRows();\n };\n /**\n * Gets a frozen right tables row element by index.\n *\n * @param {number} index - Specifies the row index.\n * @returns {Element} returns the element\n */\n TreeGrid.prototype.getFrozenRightRowByIndex = function (index) {\n return this.grid.getFrozenRightRowByIndex(index);\n };\n /**\n * Gets the Tree Grid's frozen right content rows from frozen Tree Grid.\n *\n * @returns {Element[]} returns the element\n */\n TreeGrid.prototype.getFrozenRightRows = function () {\n return this.grid.getFrozenRightRows();\n };\n /**\n * Gets all the Tree Grid's frozen right table data rows.\n *\n * @returns {Element[]} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightDataRows = function () {\n return this.grid.getFrozenRightDataRows();\n };\n /**\n * Gets a frozen right table cell by row and column index.\n *\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n return this.grid.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n };\n /**\n * Gets a frozen left column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenLeftColumnHeaderByIndex(index);\n };\n /**\n * Gets a frozen right column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n return this.grid.getFrozenRightColumnHeaderByIndex(index);\n };\n /**\n * Gets a movable column header by column index.\n *\n * @param {number} index - Specifies the column index.\n * @returns {Element} Returns the Element\n */\n TreeGrid.prototype.getMovableColumnHeaderByIndex = function (index) {\n return this.grid.getMovableColumnHeaderByIndex(index);\n };\n /**\n * @hidden\n * @returns {number} Returns the movable column count\n */\n TreeGrid.prototype.getMovableColumnsCount = function () {\n return this.grid.getMovableColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Left column\n */\n TreeGrid.prototype.getFrozenLeftColumnsCount = function () {\n return this.grid.getFrozenLeftColumnsCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the Frozen Right column count\n */\n TreeGrid.prototype.getFrozenRightColumnsCount = function () {\n return this.grid.getFrozenRightColumnsCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenLeftColumns = function () {\n this.updateColumnModel(this.grid.getFrozenLeftColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getFrozenRightColumns = function () {\n this.updateColumnModel(this.grid.getFrozenRightColumns());\n return this.columnModel;\n };\n /**\n * @hidden\n * @returns {number} Returns the visible movable count\n */\n TreeGrid.prototype.getVisibleMovableCount = function () {\n return this.grid.getVisibleMovableCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen Right count\n */\n TreeGrid.prototype.getVisibleFrozenRightCount = function () {\n return this.grid.getVisibleFrozenRightCount();\n };\n /**\n * @hidden\n * @returns {number} Returns the visible Frozen left count\n */\n TreeGrid.prototype.getVisibleFrozenLeftCount = function () {\n return this.grid.getVisibleFrozenLeftCount();\n };\n /**\n * @hidden\n * @returns {Column[]} Returns the column\n */\n TreeGrid.prototype.getMovableColumns = function () {\n this.updateColumnModel(this.grid.getMovableColumns());\n return this.columnModel;\n };\n /**\n * Gets the number of frozen column in tree grid\n *\n * @hidden\n * @returns {number} - Returns frozen column count\n */\n TreeGrid.prototype.getFrozenColumns = function () {\n return this.getFrozenCount(this.columns, 0) + this.frozenColumns;\n };\n TreeGrid.prototype.getFrozenCount = function (cols, cnt) {\n for (var j = 0, len = cols.length; j < len; j++) {\n if (cols[j].columns) {\n cnt = this.getFrozenCount(cols[j].columns, cnt);\n }\n else {\n if (cols[j].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Gets the collection of selected row indexes.\n *\n * @returns {number[]} - Returns selected rows index collection\n */\n TreeGrid.prototype.getSelectedRowIndexes = function () {\n return this.grid.getSelectedRowIndexes();\n };\n /**\n * Gets the collection of selected row and cell indexes.\n *\n * @returns {ISelectedCell[]} - Returns selected cell's index details\n */\n TreeGrid.prototype.getSelectedRowCellIndexes = function () {\n return this.grid.getSelectedRowCellIndexes();\n };\n /**\n * Gets the collection of selected records.\n *\n * @isGenericType true\n * @returns {Object[]} - Returns selected records collection\n */\n TreeGrid.prototype.getSelectedRecords = function () {\n return this.grid.getSelectedRecords();\n };\n /**\n * Gets the data module.\n *\n * @returns {{baseModule: Data, treeModule: DataManipulation}}: Returns grid and treegrid data module\n */\n TreeGrid.prototype.getDataModule = function () {\n return { baseModule: this.grid.getDataModule(), treeModule: this.dataModule };\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @param {number[]} fromIndexes - Source indexes of rows\n * @param {number} toIndex - Destination index of row\n * @param {string} position - Defines drop position as above or below or child\n * @returns {void}\n */\n TreeGrid.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex, position);\n };\n /**\n * Indents the record to one level of hierarchy. Moves the selected row as the last child of its previous row.\n *\n * @param {Object} record – specifies the record to do indented\n * @returns {void}\n */\n TreeGrid.prototype.indent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'indent');\n }\n };\n /**\n * Outdent the record to one level of hierarchy. Moves the selected row as sibling to its parent row.\n *\n * @param {Object} record – specifies the record to do outdented\n * @returns {void}\n */\n TreeGrid.prototype.outdent = function (record) {\n if (!isNullOrUndefined(this.rowDragAndDropModule)) {\n record = record;\n this.rowDragAndDropModule[this.indentOutdentAction](record, 'outdent');\n }\n };\n var TreeGrid_1;\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Property('Ellipsis')\n ], TreeGrid.prototype, \"clipMode\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"childMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"hasChildMapping\", void 0);\n __decorate([\n Property(0)\n ], TreeGrid.prototype, \"treeColumnIndex\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"idMapping\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"parentIdMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableCollapseAll\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"expandStateMapping\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Property([])\n ], TreeGrid.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"query\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"cloneQuery\", void 0);\n __decorate([\n Property('AllPages')\n ], TreeGrid.prototype, \"printMode\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPaging\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"loadChildOnDemand\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], TreeGrid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"autoCheckHierarchy\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], TreeGrid.prototype, \"pageSettings\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], TreeGrid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], TreeGrid.prototype, \"sortSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], TreeGrid.prototype, \"aggregates\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], TreeGrid.prototype, \"editSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], TreeGrid.prototype, \"filterSettings\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], TreeGrid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('Default')\n ], TreeGrid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], TreeGrid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property('Parent')\n ], TreeGrid.prototype, \"copyHierarchyMode\", void 0);\n __decorate([\n Property(null)\n ], TreeGrid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAutoFill\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableAdaptiveUI\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableImmutableMode\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], TreeGrid.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"enableInfiniteScrolling\", void 0);\n __decorate([\n Complex({}, InfiniteScrollSettings)\n ], TreeGrid.prototype, \"infiniteScrollSettings\", void 0);\n __decorate([\n Property('All')\n ], TreeGrid.prototype, \"columnQueryMode\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"collapsed\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSaved\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"batchCancel\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Property(true)\n ], TreeGrid.prototype, \"allowSelection\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"headerCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"checkboxChange\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePaste\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDragStartHelper\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"rowDrop\", void 0);\n __decorate([\n Property(-1)\n ], TreeGrid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], TreeGrid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], TreeGrid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], TreeGrid.prototype, \"pdfExportComplete\", void 0);\n TreeGrid = TreeGrid_1 = __decorate([\n NotifyPropertyChanges\n ], TreeGrid);\n return TreeGrid;\n}(Component));\nexport { TreeGrid };\n","import { getObject, Grid, Reorder as GridReorder } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Reorder module\n *\n * @hidden\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for Reorder module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Reorder(parent) {\n Grid.Inject(GridReorder);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Reorder module name\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Reorder.prototype.addEventListener = function () {\n this.parent.on('getColumnIndex', this.getTreeColumn, this);\n };\n Reorder.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('getColumnIndex', this.getTreeColumn);\n };\n /**\n * To destroy the Reorder\n *\n * @returns {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n this.removeEventListener();\n };\n Reorder.prototype.getTreeColumn = function () {\n var columnModel = 'columnModel';\n var treeColumn = this.parent[columnModel][this.parent.treeColumnIndex];\n var treeIndex;\n var updatedCols = this.parent.getColumns();\n for (var f = 0; f < updatedCols.length; f++) {\n var treeColumnfield = getObject('field', treeColumn);\n var parentColumnfield = getObject('field', updatedCols[f]);\n if (treeColumnfield === parentColumnfield) {\n treeIndex = f;\n break;\n }\n }\n this.parent.setProperties({ treeColumnIndex: treeIndex }, true);\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Grid, Resize as GridResize } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Resize module\n *\n * @hidden\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for Resize module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Resize(parent) {\n Grid.Inject(GridResize);\n this.parent = parent;\n }\n /**\n * Resize by field names.\n *\n * @param {string|string[]} fName - Defines the field name.\n * @returns {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n this.parent.grid.autoFitColumns(fName);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Resize module name\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n /**\n * Destroys the Resize.\n *\n * @function destroy\n * @returns {void}\n */\n Resize.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.grid.resizeModule.destroy();\n };\n return Resize;\n}());\nexport { Resize };\n","import { Grid, RowDD as GridDragDrop, parentsUntil } from '@syncfusion/ej2-grids';\nimport { getObject, Scroll } from '@syncfusion/ej2-grids';\nimport { closest, isNullOrUndefined, classList, setValue, extend, getValue, removeClass, addClass, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { editAction } from './crud-actions';\nimport { getParentData, findChildrenRecords, isRemoteData, isOffline, isCountRequired } from '../utils';\n/**\n * TreeGrid RowDragAndDrop module\n *\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function RowDD(parent) {\n /** @hidden */\n this.canDrop = true;\n /** @hidden */\n this.isDraggedWithChild = false;\n /** @hidden */\n this.modifiedRecords = 'modifiedRecords';\n /** @hidden */\n this.selectedRecords = 'selectedRecords';\n /** @hidden */\n this.selectedRows = 'selectedRows';\n /** @hidden */\n this.hasDropItem = true;\n /** @hidden */\n this.isaddtoBottom = false;\n Grid.Inject(GridDragDrop);\n this.parent = parent;\n this.addEventListener();\n }\n RowDD.prototype.getChildrecordsByParentID = function (id) {\n var treeGridDataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridDataSource = this.parent.grid.dataSource.dataSource.json;\n }\n else {\n treeGridDataSource = this.parent.grid.dataSource;\n }\n var record = treeGridDataSource.filter(function (e) {\n return e.uniqueID === id;\n });\n return record;\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.addEventListener = function () {\n this.parent.on(events.rowdraging, this.Rowdraging, this);\n this.parent.on(events.rowDropped, this.rowDropped, this);\n this.parent.on(events.rowsAdd, this.rowsAdded, this);\n this.parent.on(events.rowsRemove, this.rowsRemoved, this);\n };\n /**\n * Reorder the rows based on given indexes and position\n *\n * @returns {void}\n * @param {number[]} fromIndexes - source indexes of rows to be re-ordered\n * @param {number} toIndex - Destination row index\n * @param {string} position - Drop position as above or below or child\n */\n RowDD.prototype.reorderRows = function (fromIndexes, toIndex, position) {\n var tObj = this.parent;\n var action = 'action';\n var dropPosition = 'dropPosition';\n var updateRowAndCellElements = 'updateRowAndCellElements';\n if (fromIndexes[0] !== toIndex && ['above', 'below', 'child'].indexOf(position) !== -1) {\n if (position === 'above') {\n this.dropPosition = 'topSegment';\n }\n if (position === 'below') {\n this.dropPosition = 'bottomSegment';\n }\n if (position === 'child') {\n this.dropPosition = 'middleSegment';\n }\n this.parent[dropPosition] = this.dropPosition;\n var data = [];\n for (var i = 0; i < fromIndexes.length; i++) {\n data[i] = this.parent.getCurrentViewRecords()[fromIndexes[i]];\n }\n var isByMethod = true;\n var args = {\n data: data,\n dropIndex: toIndex\n };\n if (!isCountRequired(this.parent)) {\n this.dropRows(args, isByMethod);\n }\n //this.refreshGridDataSource();\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n if (this.parent[action] === 'outdenting') {\n if (!isNullOrUndefined(data[0].parentItem)) {\n data[0].level = data[0].parentItem.level + 1;\n }\n }\n this.parent.grid.refresh();\n if (this.parent.enableImmutableMode && this.dropPosition === 'middleSegment') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'indenting') {\n index = this.parent.treeColumnIndex;\n }\n var row = this.parent.getRows()[fromIndexes[0]];\n var dropData = args.data[0];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(dropData);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n var parentData = getParentData(this.parent, args.data[0][parentUniqueID]);\n var parentrow = this.parent.getRows()[toIndex];\n totalRecord.push(parentData);\n rows.push(parentrow);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n if (this.parent.enableImmutableMode && this.parent[action] === 'outdenting') {\n var index = void 0;\n if (this.parent.allowRowDragAndDrop) {\n index = this.parent.treeColumnIndex + 1;\n }\n else if (this.parent[action] === 'outdenting') {\n index = this.parent.treeColumnIndex;\n }\n var record = args.data[0];\n var row = this.parent.getRows()[fromIndexes[0]];\n var totalRecord = [];\n var rows = [];\n totalRecord.push(record);\n rows.push(row);\n this.parent[updateRowAndCellElements](totalRecord, rows, index);\n }\n }\n else {\n return;\n }\n };\n RowDD.prototype.indentOutdentAction = function (record, request) {\n var tObj = this.parent;\n var action = 'action';\n var droppedIndex = 'dropIndex';\n var selectedItemIndex = -1;\n if (isNullOrUndefined(record) && this.parent.selectedRowIndex === -1) {\n return;\n }\n else {\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n this.selectedItem = isNullOrUndefined(record) ?\n tObj.getCurrentViewRecords()[selectedItemIndex] : record;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(this.selectedItem[primaryKeyField]);\n this.selectedRow = this.parent[this.selectedRows] = selectedItemIndex !== -1 ?\n this.parent.getSelectedRows()[0]\n : this.parent.grid.getRowByIndex(rowIndex);\n this.selectedRecord = this.parent[this.selectedRecords] = selectedItemIndex !== -1 ?\n tObj.getCurrentViewRecords()[selectedItemIndex]\n : this.selectedItem;\n if (request === 'indent') {\n var record_1 = tObj.getCurrentViewRecords()[this.selectedRow.rowIndex - 1];\n var dropIndex = void 0;\n if (this.selectedRow.rowIndex === 0 || this.selectedRow.rowIndex === -1 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level - record_1.level === 1) {\n return;\n }\n if (record_1.level > this.selectedRecord.level) {\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === record_1.parentItem.taskData) {\n dropIndex = i;\n }\n }\n }\n else {\n dropIndex = this.selectedRow.rowIndex - 1;\n }\n tObj[action] = 'indenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('indenting', dropIndex);\n }\n else if (request === 'outdent') {\n if (this.selectedRow.rowIndex === -1 || this.selectedRow.rowIndex === 0 ||\n tObj.getCurrentViewRecords()[this.selectedRow.rowIndex].level === 0) {\n return;\n }\n var dropIndex = void 0;\n var parentItem = this.selectedRecord.parentItem;\n for (var i = 0; i < tObj.getCurrentViewRecords().length; i++) {\n if (tObj.getCurrentViewRecords()[i].taskData === parentItem.taskData) {\n dropIndex = i;\n }\n }\n tObj[action] = 'outdenting';\n tObj[droppedIndex] = dropIndex;\n this.eventTrigger('outdenting', dropIndex);\n }\n }\n };\n RowDD.prototype.eventTrigger = function (action, dropIndex) {\n var _this = this;\n var actionArgs = {\n action: action,\n cancel: false,\n data: [this.parent[this.selectedRecords]],\n row: this.parent[this.selectedRows]\n };\n this.parent.trigger(events.actionBegin, actionArgs, function (actionArgs) {\n if (!actionArgs.cancel) {\n if (actionArgs.action === 'indenting') {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'child');\n }\n else if (actionArgs.action === 'outdenting') {\n _this.reorderRows([_this.selectedRow.rowIndex], dropIndex, 'below');\n }\n }\n });\n };\n RowDD.prototype.orderToIndex = function (currentData) {\n for (var i = 0; i < currentData.length; i++) {\n currentData[i].index = i;\n if (!isNullOrUndefined(currentData[i].parentItem)) {\n var updatedParent = getValue('uniqueIDCollection.' + currentData[i].parentUniqueID, this.parent);\n currentData[i].parentItem.index = updatedParent.index;\n }\n }\n return currentData;\n };\n RowDD.prototype.rowsAdded = function (e) {\n var draggedRecord;\n var dragRecords = e.records;\n for (var i = e.records.length - 1; i > -1; i--) {\n draggedRecord = dragRecords[i];\n if (draggedRecord.parentUniqueID) {\n var record = dragRecords.filter(function (data) {\n return data.uniqueID === draggedRecord.parentUniqueID;\n });\n if (record.length) {\n var index = record[0].childRecords.indexOf(draggedRecord);\n var parentRecord = record[0];\n if (index !== -1) {\n if (isNullOrUndefined(this.parent.idMapping)) {\n parentRecord.childRecords.splice(index, 1);\n if (!parentRecord.childRecords.length) {\n parentRecord.hasChildRecords = false;\n parentRecord.hasFilteredChildRecords = false;\n }\n }\n this.isDraggedWithChild = true;\n }\n }\n }\n }\n if (isNullOrUndefined(this.parent.dataSource) || !this.parent.dataSource.length) {\n var tObj = this.parent;\n var draggedRecord_1;\n var dragRecords_1 = e.records;\n var dragLength = e.records.length;\n for (var i = dragLength - 1; i > -1; i--) {\n draggedRecord_1 = dragRecords_1[i];\n if (!i && draggedRecord_1.hasChildRecords) {\n draggedRecord_1.taskData[this.parent.parentIdMapping] = null;\n }\n var recordIndex1 = 0;\n if (!isNullOrUndefined(tObj.parentIdMapping)) {\n tObj.childMapping = null;\n }\n if (!isNullOrUndefined(draggedRecord_1.taskData) && !isNullOrUndefined(tObj.childMapping) &&\n !Object.prototype.hasOwnProperty.call(draggedRecord_1.taskData, tObj.childMapping)) {\n draggedRecord_1.taskData[tObj.childMapping] = [];\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.childMapping) &&\n (draggedRecord_1[tObj.childMapping]).length && !this.isDraggedWithChild &&\n !isNullOrUndefined(tObj.parentIdMapping)) {\n var childData = (draggedRecord_1[tObj.childMapping]);\n for (var j = 0; j < childData.length; j++) {\n if (dragRecords_1.indexOf(childData[j]) === -1) {\n dragRecords_1.splice(j, 0, childData[j]);\n childData[j].taskData = extend({}, childData[j]);\n i += 1;\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(draggedRecord_1, tObj.parentIdMapping)\n && draggedRecord_1[tObj.parentIdMapping] !== null\n && !this.isDraggedWithChild) {\n draggedRecord_1.taskData[tObj.parentIdMapping] = null;\n delete draggedRecord_1.parentItem;\n delete draggedRecord_1.parentUniqueID;\n }\n if (isNullOrUndefined(tObj.dataSource)) {\n tObj.dataSource = [];\n }\n tObj.dataSource.splice(recordIndex1, 0, draggedRecord_1.taskData);\n }\n tObj.setProperties({ dataSource: tObj.dataSource }, false);\n }\n else {\n for (var i = 0; i < dragRecords.length; i++) {\n setValue('uniqueIDCollection.' + dragRecords[i].uniqueID, dragRecords[i], this.parent);\n }\n var args = { data: e.records, dropIndex: e.toIndex };\n if (this.parent.dataSource instanceof DataManager) {\n this.treeGridData = this.parent.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n if (isNullOrUndefined(this.dropPosition)) {\n this.dropPosition = 'bottomSegment';\n args.dropIndex = this.parent.getCurrentViewRecords().length > 1 ? this.parent.getCurrentViewRecords().length - 1 :\n args.dropIndex;\n args.data = args.data.map(function (i) {\n if (i.hasChildRecords && isNullOrUndefined(i.parentItem)) {\n i.level = 0;\n return i;\n }\n else {\n delete i.parentItem;\n delete i.parentUniqueID;\n i.level = 0;\n return i;\n }\n });\n }\n this.dropRows(args);\n }\n };\n RowDD.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n this.draggedRecord = e.records[i];\n if (this.draggedRecord.hasChildRecords || this.draggedRecord.parentItem &&\n this.parent.grid.dataSource.\n indexOf(this.getChildrecordsByParentID(this.draggedRecord.parentUniqueID)[0]) !== -1 ||\n this.draggedRecord.level === 0) {\n this.deleteDragRow();\n }\n }\n };\n RowDD.prototype.refreshGridDataSource = function () {\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var proxy = this.parent;\n var tempDataSource;\n var idx;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n tempDataSource = proxy.dataSource.dataSource.json;\n }\n else {\n tempDataSource = proxy.dataSource;\n }\n // eslint-disable-next-line max-len\n if (tempDataSource && (!isNullOrUndefined(droppedRecord) && !droppedRecord.parentItem) && !isNullOrUndefined(droppedRecord.taskData)) {\n var keys = Object.keys(tempDataSource);\n for (var i = 0; i < keys.length; i++) {\n if (tempDataSource[i][this.parent.childMapping] === droppedRecord.taskData[this.parent.childMapping]) {\n idx = i;\n }\n }\n if (this.dropPosition === 'topSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx, 0, draggedRecord.taskData);\n }\n }\n else if (this.dropPosition === 'bottomSegment') {\n if (!this.parent.idMapping) {\n tempDataSource.splice(idx + 1, 0, draggedRecord.taskData);\n }\n }\n }\n else if (!this.parent.parentIdMapping && (!isNullOrUndefined(droppedRecord) && droppedRecord.parentItem)) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n var record = this.getChildrecordsByParentID(droppedRecord.parentUniqueID)[0];\n var childRecords = record.childRecords;\n for (var i = 0; i < childRecords.length; i++) {\n droppedRecord.parentItem.taskData[this.parent.childMapping][i] = childRecords[i].taskData;\n }\n }\n }\n if (this.parent.parentIdMapping) {\n if (draggedRecord.parentItem) {\n if (this.dropPosition === 'topSegment' || this.dropPosition === 'bottomSegment') {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.parentIdMapping];\n }\n else {\n draggedRecord[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n draggedRecord.taskData[this.parent.parentIdMapping] = droppedRecord[this.parent.idMapping];\n }\n }\n else {\n draggedRecord.taskData[this.parent.parentIdMapping] = null;\n draggedRecord[this.parent.parentIdMapping] = null;\n }\n }\n };\n RowDD.prototype.removeFirstrowBorder = function (element) {\n var canremove = this.dropPosition === 'bottomSegment';\n if (this.parent.element.getElementsByClassName('e-firstrow-border').length > 0 && element &&\n (element.rowIndex !== 0 || canremove)) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n };\n RowDD.prototype.removeLastrowBorder = function (element) {\n var isEmptyRow = element && (element.classList.contains('e-emptyrow') || element.classList.contains('e-columnheader')\n || element.classList.contains('e-detailrow'));\n var islastRowIndex = element && !isEmptyRow &&\n this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') !==\n element.getAttribute('data-uid');\n var canremove = islastRowIndex || this.dropPosition === 'topSegment';\n if (this.parent.element.getElementsByClassName('e-lastrow-border').length > 0 && element && (islastRowIndex || canremove)) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n };\n RowDD.prototype.updateIcon = function (row, index, args) {\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n this.dropPosition = undefined;\n var rowPositionHeight = 0;\n this.removeFirstrowBorder(rowEle);\n this.removeLastrowBorder(rowEle);\n for (var i = 0; i < args.rows.length; i++) {\n if (!isNullOrUndefined(rowEle) && rowEle.getAttribute('data-uid') === args.rows[i].getAttribute('data-uid')\n || !parentsUntil(args.target, 'e-gridcontent')) {\n this.dropPosition = 'Invalid';\n this.addErrorElem();\n }\n }\n // To get the corresponding drop position related to mouse position\n var tObj = this.parent;\n var rowTop = 0;\n var roundOff = 0;\n var toolHeight = tObj.toolbar && tObj.toolbar.length ?\n document.getElementById(tObj.element.id + '_gridcontrol_toolbarItems').offsetHeight : 0;\n // tObj.lastRow = tObj.getRowByIndex(tObj.getCurrentViewRecords().length - 1);\n var positionOffSet = this.getOffset(tObj.element);\n // let contentHeight1: number = (tObj.element.offsetHeight - (tObj.getContent() as HTMLElement).offsetHeight) + positionOffSet.top;\n var contentHeight = tObj.getHeaderContent().offsetHeight + positionOffSet.top + toolHeight;\n var scrollTop = tObj.getContent().firstElementChild.scrollTop;\n if (!isNullOrUndefined(rowEle)) {\n rowPositionHeight = rowEle.offsetTop - scrollTop;\n }\n // let scrollTop = (tObj.grid.scrollModule as any).content.scrollTop;\n rowTop = rowPositionHeight + contentHeight + roundOff;\n var rowBottom = rowTop + row[0].offsetHeight;\n var difference = rowBottom - rowTop;\n var divide = difference / 3;\n var topRowSegment = rowTop + divide;\n var middleRowSegment = topRowSegment + divide;\n var bottomRowSegment = middleRowSegment + divide;\n var mouseEvent = getObject('originalEvent.event', args);\n var touchEvent = getObject('originalEvent.event', args);\n var posy = (mouseEvent.type === 'mousemove') ? mouseEvent.pageY : ((!isNullOrUndefined(touchEvent) &&\n !isNullOrUndefined(touchEvent.changedTouches)) ? touchEvent.changedTouches[0].pageY : null);\n var isTopSegment = posy <= topRowSegment;\n var isMiddleRowSegment = (posy > topRowSegment && posy <= middleRowSegment);\n var isBottomRowSegment = (posy > middleRowSegment && posy <= bottomRowSegment);\n if (isTopSegment || isMiddleRowSegment || isBottomRowSegment) {\n if (isTopSegment && this.dropPosition !== 'Invalid') {\n this.removeChildBorder();\n this.dropPosition = 'topSegment';\n this.removetopOrBottomBorder();\n this.addFirstrowBorder(rowEle);\n this.removeErrorElem();\n this.removeLastrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n if (isMiddleRowSegment && this.dropPosition !== 'Invalid') {\n this.removetopOrBottomBorder();\n var rowElement = [];\n var element = closest(args.target, 'tr');\n rowElement = [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse'));\n if (rowElement.length > 0) {\n this.addRemoveClasses(rowElement, true, 'e-childborder');\n }\n this.addLastRowborder(rowEle);\n this.addFirstrowBorder(rowEle);\n this.dropPosition = 'middleSegment';\n }\n if (isBottomRowSegment && this.dropPosition !== 'Invalid') {\n this.removeErrorElem();\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n this.dropPosition = 'bottomSegment';\n this.addLastRowborder(rowEle);\n this.removeFirstrowBorder(rowEle);\n this.topOrBottomBorder(args.target);\n }\n }\n return this.dropPosition;\n };\n RowDD.prototype.removeChildBorder = function () {\n var borderElem = [];\n borderElem = [].slice.call(this.parent.element.querySelectorAll('.e-childborder'));\n if (borderElem.length > 0) {\n this.addRemoveClasses(borderElem, false, 'e-childborder');\n }\n };\n RowDD.prototype.addFirstrowBorder = function (targetRow) {\n var node = this.parent.element;\n var tObj = this.parent;\n if (targetRow && targetRow.rowIndex === 0 && !targetRow.classList.contains('e-emptyrow')) {\n var div = this.parent.createElement('div', { className: 'e-firstrow-border' });\n var gridheaderEle = this.parent.getHeaderContent();\n var toolbarHeight = 0;\n if (tObj.toolbar) {\n toolbarHeight = tObj.toolbarModule.getToolbar().offsetHeight;\n }\n var multiplegrid = !isNullOrUndefined(this.parent.rowDropSettings.targetID);\n if (multiplegrid) {\n div.style.top = this.parent.grid.element.getElementsByClassName('e-gridheader')[0].offsetHeight\n + toolbarHeight + 'px';\n }\n div.style.width = multiplegrid ? node.offsetWidth + 'px' :\n node.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridheaderEle.querySelectorAll('.e-firstrow-border').length) {\n gridheaderEle.appendChild(div);\n }\n }\n };\n RowDD.prototype.addLastRowborder = function (trElement) {\n var isEmptyRow = trElement && (trElement.classList.contains('e-emptyrow') ||\n trElement.classList.contains('e-columnheader') || trElement.classList.contains('e-detailrow'));\n if (trElement && !isEmptyRow && this.parent.getRowByIndex(this.parent.getCurrentViewRecords().length - 1).getAttribute('data-uid') ===\n trElement.getAttribute('data-uid')) {\n var bottomborder = this.parent.createElement('div', { className: 'e-lastrow-border' });\n var gridcontentEle = this.parent.getContent();\n bottomborder.style.width = this.parent.element.offsetWidth - this.getScrollWidth() + 'px';\n if (!gridcontentEle.querySelectorAll('.e-lastrow-border').length) {\n gridcontentEle.classList.add('e-treegrid-relative');\n gridcontentEle.appendChild(bottomborder);\n bottomborder.style.bottom = this.getScrollWidth() + 'px';\n }\n }\n };\n RowDD.prototype.getScrollWidth = function () {\n var scrollElem = this.parent.getContent().firstElementChild;\n return scrollElem.scrollWidth > scrollElem.offsetWidth ? Scroll.getScrollBarWidth() : 0;\n };\n RowDD.prototype.addErrorElem = function () {\n var dragelem = document.getElementsByClassName('e-cloneproperties')[0];\n var errorelem = dragelem.querySelectorAll('.e-errorelem').length;\n if (!errorelem && !this.parent.rowDropSettings.targetID) {\n var ele = document.createElement('div');\n classList(ele, ['e-errorcontainer'], []);\n classList(ele, ['e-icons', 'e-errorelem'], []);\n var errorVal = dragelem.querySelector('.errorValue');\n var content = dragelem.querySelector('.e-rowcell').innerHTML;\n if (errorVal) {\n content = errorVal.innerHTML;\n errorVal.parentNode.removeChild(errorVal);\n }\n dragelem.querySelector('.e-rowcell').innerHTML = '';\n var spanContent = document.createElement('span');\n spanContent.className = 'errorValue';\n spanContent.style.paddingLeft = '16px';\n spanContent.innerHTML = content;\n dragelem.querySelector('.e-rowcell').appendChild(ele);\n dragelem.querySelector('.e-rowcell').appendChild(spanContent);\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (this.hasDropItem && dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) + ele.offsetWidth + 16;\n var spanLeft = !this.parent.enableRtl ? dropItemLeft : 0;\n dropItemSpan.style.left = spanLeft + \"px\";\n this.hasDropItem = false;\n }\n }\n };\n RowDD.prototype.removeErrorElem = function () {\n var errorelem = document.querySelector('.e-errorelem');\n var errorValue = document.querySelector('.errorValue');\n var dropItemSpan = document.querySelector('.e-dropitemscount');\n if (errorelem) {\n if (dropItemSpan) {\n var dropItemLeft = parseInt(dropItemSpan.style.left, 10) - errorelem.offsetWidth - 16;\n setStyleAttribute(errorValue, {\n paddingLeft: '0px'\n });\n if (!this.parent.enableRtl) {\n setStyleAttribute(dropItemSpan, {\n left: dropItemLeft + \"px\"\n });\n }\n }\n errorelem.remove();\n }\n this.hasDropItem = true;\n };\n RowDD.prototype.topOrBottomBorder = function (target) {\n var rowElement = [];\n var element = closest(target, 'tr');\n rowElement = element ? [].slice.call(element.querySelectorAll('.e-rowcell,.e-rowdragdrop,.e-detailrowcollapse')) : [];\n if (rowElement.length) {\n if (this.dropPosition === 'topSegment') {\n this.addRemoveClasses(rowElement, true, 'e-droptop');\n if (this.parent.element.getElementsByClassName('e-lastrow-dragborder').length > 0) {\n this.parent.element.getElementsByClassName('e-lastrow-dragborder')[0].remove();\n }\n }\n if (this.dropPosition === 'bottomSegment') {\n this.addRemoveClasses(rowElement, true, 'e-dropbottom');\n }\n }\n };\n RowDD.prototype.removetopOrBottomBorder = function () {\n var border = [];\n border = [].slice.call(this.parent.element.querySelectorAll('.e-dropbottom, .e-droptop'));\n if (border.length) {\n this.addRemoveClasses(border, false, 'e-dropbottom');\n this.addRemoveClasses(border, false, 'e-droptop');\n }\n };\n RowDD.prototype.addRemoveClasses = function (cells, add, className) {\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n cells[i].classList.add(className);\n }\n else {\n cells[i].classList.remove(className);\n }\n }\n };\n RowDD.prototype.getOffset = function (element) {\n var box = element.getBoundingClientRect();\n var body = document.body;\n var docElem = document.documentElement;\n var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n var clientTop = docElem.clientTop || body.clientTop || 0;\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\n var top = box.top + scrollTop - clientTop;\n var left = box.left + scrollLeft - clientLeft;\n return { top: Math.round(top), left: Math.round(left) };\n };\n RowDD.prototype.Rowdraging = function (args) {\n var tObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n cloneElement.style.cursor = '';\n var rowEle = args.target ? closest(args.target, 'tr') : null;\n var rowIdx = rowEle ? rowEle.rowIndex : -1;\n var dragRecords = [];\n var droppedRecord = tObj.getCurrentViewRecords()[rowIdx];\n this.removeErrorElem();\n this.canDrop = true;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n if (rowIdx !== -1) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.canDrop = false;\n this.addErrorElem();\n }\n if (!tObj.rowDropSettings.targetID && this.canDrop) {\n tObj.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n if (tObj.rowDropSettings.targetID) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID) {\n var srcControl = dropElement.ej2_instances[0];\n srcControl.rowDragAndDropModule.updateIcon(args.rows, rowIdx, args);\n }\n }\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID)) {\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n if (!dropElement) {\n cloneElement.style.cursor = 'default';\n }\n }\n };\n RowDD.prototype.rowDropped = function (args) {\n var tObj = this.parent;\n var parentItem = 'parentItem';\n if (!tObj.rowDropSettings.targetID) {\n if (parentsUntil(args.target, 'e-content')) {\n if (this.parent.element.querySelector('.e-errorelem')) {\n this.dropPosition = 'Invalid';\n }\n setValue('dropPosition', this.dropPosition, args);\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel) {\n if (!isCountRequired(this.parent)) {\n this.dropRows(args);\n }\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n tObj.grid.refresh();\n if (!isNullOrUndefined(tObj.getHeaderContent().querySelector('.e-firstrow-border'))) {\n tObj.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n }\n }\n }\n else {\n if (args.target && closest(args.target, '#' + tObj.rowDropSettings.targetID) || parentsUntil(args.target, 'e-treegrid') &&\n parentsUntil(args.target, 'e-treegrid').id === tObj.rowDropSettings.targetID || args.target && document.getElementById(tObj.rowDropSettings.targetID)) {\n setValue('dropPosition', this.dropPosition, args);\n tObj.trigger(events.rowDrop, args);\n if (!args.cancel && tObj.rowDropSettings.targetID) {\n this.dragDropGrid(args);\n if (tObj.isLocalData) {\n tObj.flatData = this.orderToIndex(tObj.flatData);\n }\n }\n }\n }\n this.removetopOrBottomBorder();\n this.removeChildBorder();\n if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-firstrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-firstrow-border')[0].remove();\n }\n else if (!isNullOrUndefined(this.parent.element.getElementsByClassName('e-lastrow-border')[0])) {\n this.parent.element.getElementsByClassName('e-lastrow-border')[0].remove();\n }\n if (this.parent.enableImmutableMode && !this.parent.allowPaging && !isNullOrUndefined(args.data[0][parentItem])) {\n var index = this.parent.treeColumnIndex;\n index = index + 1;\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField]);\n var row = this.parent.getRows()[rowIndex];\n var data = args.data[0];\n if (this.dropPosition === 'middleSegment') {\n var record = [];\n var rows = [];\n record.push(data);\n rows.push(row);\n var parentUniqueID = 'parentUniqueID';\n data = getParentData(this.parent, args.data[0][parentUniqueID]);\n rowIndex = this.parent.grid.getRowIndexByPrimaryKey(data[primaryKeyField]);\n var parentrow = this.parent.getRows()[rowIndex];\n record.push(data);\n rows.push(parentrow);\n for (var i = 0; i < record.length; i++) {\n this.parent.renderModule.cellRender({\n data: record[i], cell: rows[i].cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n var targetEle = parentrow.getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n else {\n this.parent.renderModule.cellRender({\n data: data, cell: row.cells[index],\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex],\n requestType: 'rowDragAndDrop'\n });\n }\n }\n };\n RowDD.prototype.dragDropGrid = function (args) {\n var tObj = this.parent;\n var targetRow = closest(args.target, 'tr');\n var targetIndex = isNaN(this.getTargetIdx(targetRow)) ? 0 : this.getTargetIdx(targetRow);\n var dropElement = parentsUntil(args.target, 'e-treegrid');\n var srcControl;\n if (dropElement && dropElement.id === this.parent.rowDropSettings.targetID && !isRemoteData(this.parent)\n && !isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n var records = tObj.getSelectedRecords();\n var indexes = [];\n for (var i = 0; i < records.length; i++) {\n indexes[i] = records[i].index;\n }\n var data = srcControl.dataSource;\n if (this.parent.idMapping !== null && (isNullOrUndefined(this.dropPosition) || this.dropPosition === 'bottomSegment' || this.dropPosition === 'Invalid') && !(data.length)) {\n var actualData = [];\n for (var i = 0; i < records.length; i++) {\n if (records[i].hasChildRecords) {\n actualData.push(records[i]);\n var child = findChildrenRecords(records[i]);\n for (var i_1 = 0; i_1 < child.length; i_1++) {\n actualData.push(child[i_1]); // push child records to drop the parent record along with its child records\n }\n }\n }\n if (actualData.length) {\n records = actualData;\n }\n }\n tObj.notify(events.rowsRemove, { indexes: indexes, records: records });\n srcControl.notify(events.rowsAdd, { toIndex: targetIndex, records: records });\n var srcControlFlatData = srcControl.rowDragAndDropModule.treeGridData;\n if (!isNullOrUndefined(srcControlFlatData)) {\n for (var i = 0; i < srcControlFlatData.length; i++) {\n srcControlFlatData[i].index = i;\n if (!isNullOrUndefined(srcControlFlatData[i].parentItem)) {\n var actualIndex = getValue('uniqueIDCollection.' + srcControlFlatData[i].parentUniqueID + '.index', srcControl);\n srcControlFlatData[i].parentItem.index = actualIndex;\n }\n }\n }\n tObj.grid.refresh();\n srcControl.grid.refresh();\n if (srcControl.grid.dataSource.length > 1) {\n srcControl.grid.refresh();\n if (!isNullOrUndefined(srcControl.getHeaderContent().querySelector('.e-firstrow-border'))) {\n srcControl.getHeaderContent().querySelector('.e-firstrow-border').remove();\n }\n if (!isNullOrUndefined(srcControl.getContent().querySelector('.e-lastrow-border'))) {\n srcControl.getContent().querySelector('.e-lastrow-border').remove();\n }\n }\n }\n if (isCountRequired(this.parent)) {\n srcControl = dropElement.ej2_instances[0];\n tObj.grid.refresh();\n srcControl.grid.refresh();\n }\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.getParentData = function (record, data) {\n var parentItem = record.parentItem;\n var selectedItemIndex = -1;\n if (this.parent.enableVirtualization && this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.getSelectedRows()[0].rowIndex;\n }\n else if (this.parent.selectedRowIndex !== -1) {\n selectedItemIndex = this.parent.selectedRowIndex;\n }\n if (this.dropPosition === 'bottomSegment') {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = selectedItemIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(data[0][primaryKeyField]))\n : this.parent.getSelectedRowIndexes()[0];\n var selectedRecord = this.parent.getCurrentViewRecords()[rowIndex];\n this.droppedRecord = getParentData(this.parent, selectedRecord.parentItem.uniqueID);\n }\n if (this.dropPosition === 'middleSegment') {\n var level = this.parent.getCurrentViewRecords()[selectedItemIndex].level;\n if (level === parentItem.level) {\n this.droppedRecord = getParentData(this.parent, parentItem.uniqueID);\n }\n else {\n this.getParentData(parentItem);\n }\n }\n };\n RowDD.prototype.dropRows = function (args, isByMethod) {\n if (this.dropPosition !== 'Invalid' && !isRemoteData(this.parent)) {\n var tObj = this.parent;\n var draggedRecord_2;\n var droppedRecord = void 0;\n if (isNullOrUndefined(args.dropIndex)) {\n var primaryKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n var rowIndex = tObj.selectedRowIndex === -1 ?\n (this.parent.grid.getRowIndexByPrimaryKey(args.data[0][primaryKeyField])) - 1\n : tObj.getSelectedRowIndexes()[0] - 1;\n var record = tObj.getCurrentViewRecords()[rowIndex];\n this.getParentData(record, args.data);\n }\n else {\n args.dropIndex = args.dropIndex === args.fromIndex ? this.getTargetIdx(args.target.parentElement) : args.dropIndex;\n this.droppedRecord = tObj.getCurrentViewRecords()[args.dropIndex];\n }\n var dragRecords = [];\n droppedRecord = this.droppedRecord;\n if (!args.data[0]) {\n dragRecords.push(args.data);\n }\n else {\n dragRecords = args.data;\n }\n this.parent[this.modifiedRecords].push(args.data[0], droppedRecord);\n var count = 0;\n var multiplegrid = this.parent.rowDropSettings.targetID;\n this.isMultipleGrid = multiplegrid;\n if (!multiplegrid) {\n this.ensuredropPosition(dragRecords, droppedRecord);\n }\n else {\n this.isaddtoBottom = multiplegrid && this.isDraggedWithChild;\n }\n var dragLength = dragRecords.length;\n if (!isNullOrUndefined(this.parent.idMapping)) {\n dragRecords.reverse();\n }\n var _loop_1 = function (i) {\n draggedRecord_2 = dragRecords[i];\n this_1.draggedRecord = draggedRecord_2;\n if (this_1.dropPosition !== 'Invalid') {\n if (!tObj.rowDropSettings.targetID || isByMethod) {\n this_1.deleteDragRow();\n }\n if (this_1.draggedRecord === this_1.droppedRecord) {\n var correctIndex = this_1.getTargetIdx(args.target.offsetParent.parentElement);\n if (isNaN(correctIndex)) {\n correctIndex = this_1.getTargetIdx(args.target.parentElement);\n }\n args.dropIndex = correctIndex;\n droppedRecord = this_1.droppedRecord = this_1.parent.getCurrentViewRecords()[args.dropIndex];\n }\n if (droppedRecord.parentItem || this_1.dropPosition === 'middleSegment') {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.draggedRecord);\n if (newParentIndex !== -1) {\n parentRecords.splice(newParentIndex, 1);\n }\n }\n var recordIndex1 = this_1.treeGridData.indexOf(droppedRecord);\n this_1.dropAtTop(recordIndex1);\n if (this_1.dropPosition === 'bottomSegment') {\n if (!droppedRecord.hasChildRecords) {\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + 1, 0, this_1.draggedRecord);\n }\n else {\n count = this_1.getChildCount(droppedRecord, 0);\n if (this_1.parent.parentIdMapping) {\n this_1.treeData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord.taskData);\n }\n this_1.treeGridData.splice(recordIndex1 + count + 1, 0, this_1.draggedRecord);\n }\n if (isNullOrUndefined(droppedRecord.parentItem)) {\n delete draggedRecord_2.parentItem;\n delete draggedRecord_2.parentUniqueID;\n draggedRecord_2.level = 0;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = null;\n }\n }\n if (droppedRecord.parentItem) {\n var rec = this_1.getChildrecordsByParentID(droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(droppedRecord) + 1;\n childRecords.splice(droppedRecordIndex, 0, draggedRecord_2);\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.parentUniqueID = droppedRecord.parentUniqueID;\n if (this_1.parent.parentIdMapping) {\n draggedRecord_2[this_1.parent.parentIdMapping] = droppedRecord[this_1.parent.parentIdMapping];\n draggedRecord_2.parentItem = droppedRecord.parentItem;\n draggedRecord_2.level = droppedRecord.level;\n }\n }\n if (draggedRecord_2.hasChildRecords) {\n var level = 1;\n this_1.updateChildRecordLevel(draggedRecord_2, level);\n this_1.updateChildRecord(draggedRecord_2, recordIndex1 + count + 1);\n }\n }\n this_1.dropMiddle(recordIndex1);\n }\n if (isNullOrUndefined(draggedRecord_2.parentItem)) {\n var parentRecords = tObj.parentData;\n var newParentIndex = parentRecords.indexOf(this_1.droppedRecord);\n var nonRepeat_1 = 0;\n parentRecords.filter(function (e) {\n if (draggedRecord_2.uniqueID === e.uniqueID) {\n nonRepeat_1++;\n }\n });\n if (this_1.dropPosition === 'bottomSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex + 1, 0, draggedRecord_2);\n }\n else if (this_1.dropPosition === 'topSegment' && nonRepeat_1 === 0) {\n parentRecords.splice(newParentIndex, 0, draggedRecord_2);\n }\n }\n tObj.rowDragAndDropModule.refreshGridDataSource();\n };\n var this_1 = this;\n for (var i = 0; i < dragLength; i++) {\n _loop_1(i);\n }\n }\n };\n RowDD.prototype.dropMiddle = function (recordIndex) {\n var tObj = this.parent;\n var childRecords = findChildrenRecords(this.droppedRecord);\n var childRecordsLength = (isNullOrUndefined(childRecords) ||\n childRecords.length === 0) ? recordIndex + 1 :\n childRecords.length + recordIndex + 1;\n if (this.dropPosition === 'middleSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(childRecordsLength, 0, this.draggedRecord.taskData);\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n else {\n this.treeGridData.splice(childRecordsLength, 0, this.draggedRecord);\n }\n this.recordLevel();\n if (this.draggedRecord.hasChildRecords) {\n this.updateChildRecord(this.draggedRecord, childRecordsLength);\n }\n }\n };\n RowDD.prototype.dropAtTop = function (recordIndex1) {\n var tObj = this.parent;\n if (this.dropPosition === 'topSegment') {\n if (tObj.parentIdMapping) {\n this.treeData.splice(recordIndex1, 0, this.draggedRecord.taskData);\n }\n this.draggedRecord.parentItem = this.treeGridData[recordIndex1].parentItem;\n this.draggedRecord.parentUniqueID = this.treeGridData[recordIndex1].parentUniqueID;\n this.draggedRecord.level = this.treeGridData[recordIndex1].level;\n this.treeGridData.splice(recordIndex1, 0, this.draggedRecord);\n if (this.draggedRecord.hasChildRecords) {\n var level = 1;\n this.updateChildRecord(this.draggedRecord, recordIndex1);\n this.updateChildRecordLevel(this.draggedRecord, level);\n }\n if (this.droppedRecord.parentItem) {\n var rec = this.getChildrecordsByParentID(this.droppedRecord.parentUniqueID);\n var childRecords = rec[0].childRecords;\n var droppedRecordIndex = childRecords.indexOf(this.droppedRecord);\n childRecords.splice(droppedRecordIndex, 0, this.draggedRecord);\n }\n }\n };\n RowDD.prototype.recordLevel = function () {\n var tObj = this.parent;\n var draggedRecord = this.draggedRecord;\n var droppedRecord = this.droppedRecord;\n var childItem = tObj.childMapping;\n if (!droppedRecord.hasChildRecords) {\n droppedRecord.hasChildRecords = true;\n droppedRecord.hasFilteredChildRecords = true;\n if (isNullOrUndefined(droppedRecord.childRecords) || droppedRecord.childRecords.length === 0) {\n droppedRecord.childRecords = [];\n if (!tObj.parentIdMapping && isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[childItem] = [];\n }\n }\n }\n if (this.dropPosition === 'middleSegment') {\n var parentItem = extend({}, droppedRecord);\n delete parentItem.childRecords;\n draggedRecord.parentItem = parentItem;\n draggedRecord.parentUniqueID = droppedRecord.uniqueID;\n droppedRecord.childRecords.splice(droppedRecord.childRecords.length, 0, draggedRecord);\n var isSelfReference = 'isSelfReference';\n if (tObj[isSelfReference]) {\n droppedRecord[tObj.childMapping] = [];\n droppedRecord[tObj.childMapping].splice(droppedRecord[tObj.childMapping].length, 0, draggedRecord);\n }\n if (!isNullOrUndefined(draggedRecord) && !tObj.parentIdMapping && !isNullOrUndefined(droppedRecord.taskData[childItem])) {\n droppedRecord.taskData[tObj.childMapping].splice(droppedRecord.childRecords.length, 0, draggedRecord.taskData);\n }\n if (!draggedRecord.hasChildRecords) {\n draggedRecord.level = droppedRecord.level + 1;\n }\n else {\n var level = 1;\n draggedRecord.level = droppedRecord.level + 1;\n this.updateChildRecordLevel(draggedRecord, level);\n }\n droppedRecord.expanded = true;\n }\n };\n RowDD.prototype.deleteDragRow = function () {\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n this.treeGridData = this.parent.grid.dataSource.dataSource.json;\n this.treeData = this.parent.dataSource.dataSource.json;\n }\n else {\n this.treeGridData = this.parent.grid.dataSource;\n this.treeData = this.parent.dataSource;\n }\n var deletedRow = getParentData(this.parent, this.draggedRecord.uniqueID);\n if (!isNullOrUndefined(deletedRow.childRecords) && deletedRow.childRecords.length) {\n deletedRow.hasChildRecords = true;\n }\n this.removeRecords(deletedRow);\n };\n RowDD.prototype.updateChildRecord = function (record, count) {\n var currentRecord;\n var tObj = this.parent;\n var length = 0;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, tObj);\n count++;\n tObj.flatData.splice(count, 0, currentRecord);\n setValue('uniqueIDCollection.' + currentRecord.uniqueID, currentRecord, this.parent);\n if (tObj.parentIdMapping) {\n this.treeData.splice(count, 0, currentRecord.taskData);\n }\n if (currentRecord.hasChildRecords) {\n count = this.updateChildRecord(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.updateChildRecordLevel = function (record, level) {\n var length = 0;\n var currentRecord;\n level++;\n if (!record.hasChildRecords) {\n return 0;\n }\n length = record.childRecords.length;\n for (var i = 0; i < length; i++) {\n currentRecord = getValue('uniqueIDCollection.' + record.childRecords[i].uniqueID, this.parent);\n var parentData = void 0;\n if (record.parentItem) {\n parentData = getParentData(this.parent, record.parentItem.uniqueID);\n }\n if (isNullOrUndefined(parentData) && !isNullOrUndefined(record.parentItem)) {\n parentData = record.parentItem;\n }\n currentRecord.level = record.parentItem ? parentData.level + level : record.level + 1;\n if (currentRecord.hasChildRecords) {\n level--;\n level = this.updateChildRecordLevel(currentRecord, level);\n }\n }\n return level;\n };\n RowDD.prototype.removeRecords = function (record) {\n var tObj = this.parent;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n var deletedRow = record;\n var isSelfReference = !isNullOrUndefined(tObj.parentIdMapping);\n var flatParentData = this.getChildrecordsByParentID(deletedRow.parentUniqueID)[0];\n if (deletedRow) {\n if (deletedRow.parentItem) {\n var childRecords = flatParentData ? flatParentData.childRecords : [];\n var childIndex = 0;\n if (childRecords && childRecords.length > 0) {\n childIndex = childRecords.indexOf(deletedRow);\n flatParentData.childRecords.splice(childIndex, 1);\n if (!this.parent.parentIdMapping || tObj.enableImmutableMode) {\n editAction({ value: deletedRow, action: 'delete' }, this.parent, isSelfReference, deletedRow.index, deletedRow.index);\n }\n }\n }\n if (tObj.parentIdMapping) {\n if (deletedRow.hasChildRecords && deletedRow.childRecords.length > 0) {\n this.removeChildItem(deletedRow);\n }\n var idx = void 0;\n var idz = void 0;\n var treeGridData = dataSource;\n for (var i = 0; i < treeGridData.length; i++) {\n if (treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idx = i;\n }\n }\n for (var i = 0; i < this.treeGridData.length; i++) {\n if (this.treeGridData[i][this.parent.idMapping] === deletedRow.taskData[this.parent.idMapping]) {\n idz = i;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n }\n var recordIndex = this.treeGridData.indexOf(deletedRow);\n if (!tObj.parentIdMapping) {\n var parentIndex = this.parent.parentData.indexOf(deletedRow);\n if (parentIndex !== -1) {\n tObj.parentData.splice(parentIndex, 1);\n dataSource.splice(parentIndex, 1);\n }\n }\n if (recordIndex === -1 && !tObj.parentIdMapping) {\n var primaryKeyField = tObj.getPrimaryKeyFieldNames()[0];\n for (var j = 0; j < this.treeGridData.length; j++) {\n if (this.treeGridData[j][primaryKeyField] === deletedRow[primaryKeyField]) {\n recordIndex = j;\n }\n }\n }\n if (!tObj.parentIdMapping) {\n var deletedRecordCount = this.getChildCount(deletedRow, 0);\n this.treeGridData.splice(recordIndex, deletedRecordCount + 1);\n }\n if (deletedRow.parentItem && flatParentData && flatParentData.childRecords && !flatParentData.childRecords.length) {\n flatParentData.expanded = false;\n flatParentData.hasChildRecords = false;\n flatParentData.hasFilteredChildRecords = false;\n }\n if (this.parent[this.modifiedRecords].indexOf(flatParentData) === -1 && !isNullOrUndefined(flatParentData)) {\n this.parent[this.modifiedRecords].push(flatParentData);\n }\n if (!isNullOrUndefined(flatParentData)) {\n this.updateModifiedRecords(flatParentData);\n }\n }\n };\n RowDD.prototype.updateModifiedRecords = function (record) {\n var parentData = getParentData(this.parent, record.parentUniqueID);\n if (!isNullOrUndefined(parentData)) {\n this.parent[this.modifiedRecords].push(parentData);\n this.updateModifiedRecords(parentData);\n }\n };\n RowDD.prototype.removeChildItem = function (record) {\n var currentRecord;\n var idx;\n var idz;\n var dataSource;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n dataSource = this.parent.dataSource.dataSource.json;\n }\n else {\n dataSource = this.parent.dataSource;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n if (!isNullOrUndefined(currentRecord.childRecords) && currentRecord.childRecords.length) {\n currentRecord.hasChildRecords = true;\n }\n var treeGridData = void 0;\n if (this.parent.dataSource instanceof DataManager && isOffline(this.parent)) {\n treeGridData = this.parent.dataSource.dataSource.json;\n }\n else {\n treeGridData = this.parent.dataSource;\n }\n for (var i_2 = 0; i_2 < treeGridData.length; i_2++) {\n if (treeGridData[i_2][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idx = i_2;\n }\n }\n for (var i_3 = 0; i_3 < this.treeGridData.length; i_3++) {\n if (this.treeGridData[i_3][this.parent.idMapping] === currentRecord.taskData[this.parent.idMapping]) {\n idz = i_3;\n break;\n }\n }\n if (idx !== -1 && !isNullOrUndefined(idx)) {\n dataSource.splice(idx, 1);\n }\n if (idz !== -1 && !isNullOrUndefined(idz)) {\n this.treeGridData.splice(idz, 1);\n }\n if (currentRecord.hasChildRecords) {\n this.removeChildItem(currentRecord);\n }\n }\n };\n RowDD.prototype.getChildCount = function (record, count) {\n var currentRecord;\n if (!record.hasChildRecords) {\n return 0;\n }\n for (var i = 0; i < record.childRecords.length; i++) {\n currentRecord = record.childRecords[i];\n count++;\n if (currentRecord.hasChildRecords) {\n count = this.getChildCount(currentRecord, count);\n }\n }\n return count;\n };\n RowDD.prototype.ensuredropPosition = function (draggedRecords, currentRecord) {\n var _this = this;\n draggedRecords.filter(function (e) {\n if (e.hasChildRecords && !isNullOrUndefined(e.childRecords)) {\n var valid = e.childRecords.indexOf(currentRecord);\n if (valid === -1) {\n _this.ensuredropPosition(e.childRecords, currentRecord);\n }\n else {\n _this.dropPosition = 'Invalid';\n _this.addErrorElem();\n _this.canDrop = false;\n return;\n }\n }\n });\n };\n RowDD.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n RowDD.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowdraging, this.Rowdraging);\n this.parent.off(events.rowDropped, this.rowDropped);\n this.parent.off(events.rowsAdd, this.rowsAdded);\n this.parent.off(events.rowsRemove, this.rowsRemoved);\n };\n /**\n * hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns RowDragAndDrop module name\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the row drop settings of the TreeGrid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VirtualRowModelGenerator } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar TreeVirtualRowModelGenerator = /** @class */ (function (_super) {\n __extends(TreeVirtualRowModelGenerator, _super);\n function TreeVirtualRowModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.addEventListener();\n return _this;\n }\n TreeVirtualRowModelGenerator.prototype.addEventListener = function () {\n this.parent.on(events.dataListener, this.getDatas, this);\n };\n TreeVirtualRowModelGenerator.prototype.getDatas = function (args) {\n this.visualData = args.data;\n };\n TreeVirtualRowModelGenerator.prototype.getDataInfo = function () {\n return _super.prototype.getData.call(this);\n };\n TreeVirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n if (!isNullOrUndefined(notifyArgs.virtualInfo) && notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.nextInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.nextInfo.page } }, true);\n }\n else if (!isNullOrUndefined(notifyArgs.virtualInfo) && !notifyArgs.virtualInfo.loadNext &&\n notifyArgs.virtualInfo.page !== this.parent.pageSettings.currentPage) {\n this.parent.setProperties({ pageSettings: { currentPage: notifyArgs.virtualInfo.page } }, true);\n }\n var info = this.getDataInfo();\n if (!isNullOrUndefined(notifyArgs.virtualInfo)) {\n if (notifyArgs.virtualInfo.direction !== 'right' && notifyArgs.virtualInfo.direction !== 'left') {\n notifyArgs.virtualInfo.blockIndexes = info.blockIndexes;\n }\n else {\n notifyArgs.virtualInfo.blockIndexes = this.getBlockIndexes(notifyArgs.virtualInfo.page);\n }\n }\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n return _super.prototype.generateRows.call(this, data, notifyArgs);\n }\n else {\n if (!isNullOrUndefined(notifyArgs.requestType) && notifyArgs.requestType.toString() === 'collapseAll') {\n notifyArgs.requestType = 'refresh';\n }\n var rows = _super.prototype.generateRows.call(this, data, notifyArgs);\n for (var r = 0; r < rows.length; r++) {\n rows[r].index = (this.visualData).indexOf(rows[r].data);\n }\n return rows;\n }\n };\n TreeVirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'reorder',\n 'save', 'delete'].some(function (value) { return action === value; });\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n var model = 'model';\n var currentPage = this[model].currentPage;\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n else if (action === 'virtualscroll' && this.cache[currentPage] &&\n this.cache[currentPage].length > (this.parent.contentModule).getBlockSize()) {\n delete this.cache[currentPage];\n }\n }\n else {\n if (clear || action === 'virtualscroll') {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n }\n return clear;\n };\n return TreeVirtualRowModelGenerator;\n}(VirtualRowModelGenerator));\nexport { TreeVirtualRowModelGenerator };\n","import { getObject, Filter as GridFilter, Grid } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { getParentData } from '../utils';\n/**\n * TreeGrid Filter module will handle filtering action\n *\n * @hidden\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Filter module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Filter(parent) {\n Grid.Inject(GridFilter);\n this.parent = parent;\n this.isHierarchyFilter = false;\n this.filteredResult = [];\n this.flatFilteredData = [];\n this.filteredParentRecs = [];\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Filter module name\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n /**\n * To destroy the Filter module\n *\n * @returns {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.addEventListener = function () {\n this.parent.on('updateFilterRecs', this.updatedFilteredRecord, this);\n this.parent.on('clearFilters', this.clearFilterLevel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Filter.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateFilterRecs', this.updatedFilteredRecord);\n this.parent.off('clearFilters', this.clearFilterLevel);\n };\n /**\n * Function to update filtered records\n *\n * @param {{data: Object} } dataDetails - Filtered data collection\n * @param {Object} dataDetails.data - Fliltered data collection\n * @hidden\n * @returns {void}\n */\n Filter.prototype.updatedFilteredRecord = function (dataDetails) {\n setValue('uniqueIDFilterCollection', {}, this.parent);\n this.flatFilteredData = dataDetails.data;\n this.filteredParentRecs = [];\n this.filteredResult = [];\n this.isHierarchyFilter = false;\n for (var f = 0; f < this.flatFilteredData.length; f++) {\n var rec = this.flatFilteredData[f];\n this.addParentRecord(rec);\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'None') &&\n (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== ''))) {\n this.isHierarchyFilter = true;\n }\n var ischild = getObject('childRecords', rec);\n if (!isNullOrUndefined(ischild) && ischild.length) {\n setValue('hasFilteredChildRecords', this.checkChildExsist(rec), rec);\n }\n var parent_1 = getObject('parentItem', rec);\n if (!isNullOrUndefined(parent_1)) {\n var parRecord = getParentData(this.parent, rec.parentItem.uniqueID, true);\n //let parRecord: Object = this.flatFilteredData.filter((e: ITreeData) => {\n // return e.uniqueID === rec.parentItem.uniqueID; })[0];\n setValue('hasFilteredChildRecords', true, parRecord);\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n }\n }\n if (this.flatFilteredData.length > 0 && this.isHierarchyFilter) {\n this.updateFilterLevel();\n }\n this.parent.notify('updateAction', { result: this.filteredResult });\n };\n Filter.prototype.updateParentFilteredRecord = function (record) {\n var parRecord = getParentData(this.parent, record.parentItem.uniqueID, true);\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (parRecord && Object.prototype.hasOwnProperty.call(uniqueIDValue, parRecord.uniqueID)) {\n setValue('hasFilteredChildRecords', true, parRecord);\n }\n if (parRecord && parRecord.parentItem) {\n this.updateParentFilteredRecord(parRecord);\n }\n };\n Filter.prototype.addParentRecord = function (record) {\n var parent = getParentData(this.parent, record.parentUniqueID);\n //let parent: Object = this.parent.flatData.filter((e: ITreeData) => {return e.uniqueID === record.parentUniqueID; })[0];\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ? this.parent.filterSettings.hierarchyMode\n : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode === 'None' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (isNullOrUndefined(parent)) {\n if (this.flatFilteredData.indexOf(record) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n record.hasFilteredChildRecords = true;\n }\n return;\n }\n }\n else {\n this.addParentRecord(parent);\n if (this.flatFilteredData.indexOf(parent) !== -1 || this.filteredResult.indexOf(parent) !== -1) {\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n else {\n if (this.filteredResult.indexOf(record) === -1 && this.flatFilteredData.indexOf(record) !== -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(parent)) {\n var hierarchyMode_1 = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (hierarchyMode_1 === 'Child' && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(parent) !== -1) {\n this.addParentRecord(parent);\n }\n }\n else {\n if (parent['expanded'] === false && this.parent.getVisibleRecords().indexOf(record) === -1 && isNullOrUndefined(this.parent['dataResults']['action'])) {\n this.parent.expandRow(this.parent.getRows()[parent['index']], parent);\n }\n this.addParentRecord(parent);\n }\n }\n if (this.filteredResult.indexOf(record) === -1) {\n this.filteredResult.push(record);\n setValue('uniqueIDFilterCollection.' + record.uniqueID, record, this.parent);\n }\n }\n };\n Filter.prototype.checkChildExsist = function (records) {\n var childRec = getObject('childRecords', records);\n var isExist = false;\n for (var count = 0; count < childRec.length; count++) {\n var ischild = childRec[count].childRecords;\n var hierarchyMode = this.parent.grid.searchSettings.key === '' ?\n this.parent.filterSettings.hierarchyMode : this.parent.searchSettings.hierarchyMode;\n if (((hierarchyMode === 'Child' || hierarchyMode === 'Both') && (this.parent.grid.filterSettings.columns.length !== 0\n || this.parent.grid.searchSettings.key !== ''))) {\n var uniqueIDValue = getValue('uniqueIDFilterCollection', this.parent);\n if (!Object.prototype.hasOwnProperty.call(uniqueIDValue, childRec[count].uniqueID)) {\n this.filteredResult.push(childRec[count]);\n setValue('uniqueIDFilterCollection.' + childRec[count].uniqueID, childRec[count], this.parent);\n isExist = true;\n }\n }\n if ((hierarchyMode === 'None')\n && (this.parent.grid.filterSettings.columns.length !== 0 || this.parent.grid.searchSettings.key !== '')) {\n if (this.flatFilteredData.indexOf(childRec[count]) !== -1) {\n isExist = true;\n break;\n }\n }\n if (!isNullOrUndefined(ischild) && ischild.length) {\n isExist = this.checkChildExsist(childRec[count]);\n }\n if ((hierarchyMode === 'Child' || hierarchyMode === 'Both') && childRec.length) {\n isExist = true;\n }\n }\n return isExist;\n };\n Filter.prototype.updateFilterLevel = function () {\n var record = this.filteredResult;\n var len = this.filteredResult.length;\n for (var c = 0; c < len; c++) {\n var parent_2 = getParentData(this.parent, record[c].parentUniqueID);\n var isPrst = record.indexOf(parent_2) !== -1;\n if (isPrst) {\n var parent_3 = getParentData(this.parent, record[c].parentUniqueID, true);\n record[c].filterLevel = parent_3.filterLevel + 1;\n }\n else {\n record[c].filterLevel = 0;\n this.filteredParentRecs.push(record[c]);\n }\n }\n };\n Filter.prototype.clearFilterLevel = function (data) {\n var count = 0;\n var flatData = data.flatData;\n var len = flatData.length;\n var currentRecord;\n for (count; count < len; count++) {\n currentRecord = flatData[count];\n var fLevel = currentRecord.filterLevel;\n if (fLevel || fLevel === 0 || !isNullOrUndefined(currentRecord.hasFilteredChildRecords)) {\n currentRecord.hasFilteredChildRecords = null;\n currentRecord.filterLevel = null;\n }\n }\n this.filteredResult = [];\n this.parent.notify('updateResults', { result: flatData, count: flatData.length });\n };\n return Filter;\n}());\nexport { Filter };\n","import { getObject, Grid, ExcelExport as GridExcel } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline, getParentData, getExpandStatus } from '../utils';\nimport { isNullOrUndefined, setValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid Excel Export module\n *\n * @hidden\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for Excel Export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ExcelExport(parent) {\n this.isCollapsedStatePersist = false;\n Grid.Inject(GridExcel);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ExcelExport module name\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.addEventListener = function () {\n this.parent.on('updateResults', this.updateExcelResultModel, this);\n this.parent.on('excelCellInfo', this.excelQueryCellInfo, this);\n this.parent.grid.on('export-RowDataBound', this.exportRowDataBound, this);\n this.parent.grid.on('finalPageSetup', this.finalPageSetup, this);\n };\n /**\n * To destroy the Excel Export\n *\n * @returns {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateResults', this.updateExcelResultModel);\n this.parent.off('excelCellInfo', this.excelQueryCellInfo);\n this.parent.grid.off('export-RowDataBound', this.exportRowDataBound);\n this.parent.grid.off('finalPageSetup', this.finalPageSetup);\n };\n ExcelExport.prototype.updateExcelResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n ExcelExport.prototype.Map = function (excelExportProperties, \n /* eslint-disable-next-line */\n isMultipleExport, workbook, isBlob, isCsv) {\n var _this = this;\n var dataSource = this.parent.dataSource;\n var property = Object();\n setValue('isCsv', isCsv, property);\n setValue('cancel', false, property);\n if (!isNullOrUndefined(excelExportProperties)) {\n this.isCollapsedStatePersist = excelExportProperties.isCollapsedStatePersist;\n }\n return new Promise(function (resolve) {\n var dm = _this.isLocal() && !(dataSource instanceof DataManager) ? new DataManager(dataSource)\n : _this.parent.dataSource;\n var query = new Query();\n if (!_this.isLocal()) {\n query = _this.generateQuery(query);\n setValue('query', query, property);\n }\n _this.parent.trigger(event.beforeExcelExport, extend(property, excelExportProperties));\n if (getObject('cancel', property)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customData = null;\n if (!isNullOrUndefined(excelExportProperties) && !isNullOrUndefined(excelExportProperties.dataSource)) {\n customData = excelExportProperties.dataSource;\n }\n excelExportProperties = _this.manipulateExportProperties(excelExportProperties, dataSource, e);\n return _this.parent.grid.excelExportModule.Map(_this.parent.grid, excelExportProperties, isMultipleExport, workbook, isCsv, isBlob).then(function (book) {\n if (customData != null) {\n excelExportProperties.dataSource = customData;\n }\n else {\n delete excelExportProperties.dataSource;\n }\n resolve(book);\n });\n });\n });\n };\n ExcelExport.prototype.generateQuery = function (query, property) {\n if (!isNullOrUndefined(property) && property.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n property.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n ExcelExport.prototype.manipulateExportProperties = function (property, dtSrc, queryResult) {\n //count not required for this query\n var args = Object();\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n if (!isNullOrUndefined(property) && !isNullOrUndefined(property.exportType)) {\n setValue('exportType', property.exportType, args);\n }\n if (!this.isLocal()) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getObject('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!this.isLocal()) {\n this.parent.flatData = [];\n }\n if (property && property.dataSource && this.isLocal()) {\n var flatsData = this.parent.flatData;\n var dataSrc = property.dataSource instanceof DataManager ? property.dataSource.dataSource.json : property.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatsData;\n }\n property = isNullOrUndefined(property) ? Object() : property;\n property.dataSource = new DataManager({ json: dtSrc });\n return property;\n };\n /**\n * TreeGrid Excel Export cell modifier\n *\n * @param {ExcelQueryCellInfoEventArgs} args - current cell details\n * @hidden\n * @returns {void}\n */\n ExcelExport.prototype.excelQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = args.data;\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.indent = pad;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('excelQueryCellInfo', args);\n };\n ExcelExport.prototype.exportRowDataBound = function (excelRow) {\n if (excelRow.type === 'excel') {\n var excelrowobj = excelRow.rowObj.data;\n var filtercolumnlength = this.parent.grid.filterSettings.columns.length;\n var rowlength = excelRow.excelRows.length;\n var rowlevel = excelrowobj.level;\n if (excelrowobj.parentItem && getParentData(this.parent, excelrowobj.parentItem.uniqueID, Boolean(filtercolumnlength))) {\n var expandedStatus = false;\n var sublevelState = false;\n var state = getExpandStatus(this.parent, excelrowobj, this.parent.parentData);\n if (this.isCollapsedStatePersist && (!state || !this.parent.isLocalData)) {\n expandedStatus = true;\n sublevelState = excelrowobj.expanded ? false : true;\n }\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel, isCollapsed: sublevelState,\n isHidden: expandedStatus };\n }\n else if (excelrowobj.hasChildRecords && isNullOrUndefined(excelrowobj.parentItem)) {\n excelRow.excelRows[rowlength - 1].grouping = { outlineLevel: rowlevel };\n }\n }\n };\n /* eslint-disable-next-line */\n ExcelExport.prototype.finalPageSetup = function (workbook) {\n for (var i = 0; i < workbook.worksheets.length; i++) {\n if (workbook.worksheets[i].rows) {\n workbook.worksheets[i].pageSetup = { isSummaryRowBelow: false };\n }\n }\n };\n ExcelExport.prototype.isLocal = function () {\n return !isRemoteData(this.parent) && isOffline(this.parent);\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import { getObject, PdfExport as GridPdf, Grid } from '@syncfusion/ej2-grids';\nimport { isRemoteData, isOffline } from '../utils';\nimport { isNullOrUndefined, setValue, extend, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport * as event from '../base/constant';\n/**\n * TreeGrid PDF Export module\n *\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for PDF export module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function PdfExport(parent) {\n Grid.Inject(GridPdf);\n this.parent = parent;\n this.dataResults = {};\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} PdfExport module name\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.addEventListener = function () {\n this.parent.on('pdfCellInfo', this.pdfQueryCellInfo, this);\n this.parent.on('updateResults', this.updatePdfResultModel, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('pdfCellInfo', this.pdfQueryCellInfo);\n this.parent.off('updateResults', this.updatePdfResultModel);\n };\n /**\n * To destroy the PDF Export\n *\n * @returns {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n this.removeEventListener();\n };\n PdfExport.prototype.updatePdfResultModel = function (returnResult) {\n this.dataResults = returnResult;\n };\n PdfExport.prototype.Map = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n var dtSrc = this.parent.dataSource;\n var prop = Object();\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('cancel', false, prop);\n return new Promise(function (resolve) {\n var dm = isLocal && !(dtSrc instanceof DataManager) ? new DataManager(dtSrc)\n : _this.parent.dataSource;\n var query = new Query();\n if (!isLocal) {\n query = _this.generateQuery(query);\n setValue('query', query, prop);\n }\n _this.parent.trigger(event.beforePdfExport, extend(prop, pdfExportProperties));\n if (getObject('cancel', prop)) {\n return null;\n }\n dm.executeQuery(query).then(function (e) {\n var customsData = null;\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource)) {\n customsData = pdfExportProperties.dataSource;\n }\n pdfExportProperties = _this.manipulatePdfProperties(pdfExportProperties, dtSrc, e);\n return _this.parent.grid.pdfExportModule.Map(_this.parent.grid, pdfExportProperties, isMultipleExport, pdfDoc, isBlob).then(function (document) {\n if (customsData != null) {\n pdfExportProperties.dataSource = customsData;\n }\n else {\n delete pdfExportProperties.dataSource;\n }\n resolve(document);\n });\n });\n });\n };\n PdfExport.prototype.generateQuery = function (query, prop) {\n if (!isNullOrUndefined(prop) && prop.exportType === 'CurrentPage'\n && this.parent.allowPaging) {\n prop.exportType = 'AllPages';\n query.addParams('ExportType', 'CurrentPage');\n query.where(this.parent.parentIdMapping, 'equal', null);\n query = getObject('grid.renderModule.data.pageQuery', this.parent)(query);\n }\n return query;\n };\n PdfExport.prototype.manipulatePdfProperties = function (prop, dtSrc, queryResult) {\n var args = {};\n //count not required for this query\n var isLocal = !isRemoteData(this.parent) && isOffline(this.parent);\n setValue('query', this.parent.grid.getDataModule().generateQuery(true), args);\n setValue('isExport', true, args);\n setValue('isPdfExport', true, args);\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.isCollapsedStatePersist)) {\n setValue('isCollapsedStatePersist', prop.isCollapsedStatePersist, args);\n }\n if (!isNullOrUndefined(prop) && !isNullOrUndefined(prop.exportType)) {\n setValue('exportType', prop.exportType, args);\n }\n if (!isLocal) {\n this.parent.parentData = [];\n this.parent.dataModule.convertToFlatData(getValue('result', queryResult));\n setValue('expresults', this.parent.flatData, args);\n }\n this.parent.notify('dataProcessor', args);\n //args = this.parent.dataModule.dataProcessor(args);\n args = this.dataResults;\n dtSrc = isNullOrUndefined(args.result) ? this.parent.flatData.slice(0) : args.result;\n if (!isLocal) {\n this.parent.flatData = [];\n }\n if (prop && prop.dataSource && isLocal) {\n var flatDatas = this.parent.flatData;\n var dataSrc = prop.dataSource instanceof DataManager ? prop.dataSource.dataSource.json : prop.dataSource;\n this.parent.dataModule.convertToFlatData(dataSrc);\n dtSrc = this.parent.flatData;\n this.parent.flatData = flatDatas;\n }\n prop = isNullOrUndefined(prop) ? {} : prop;\n prop.dataSource = new DataManager({ json: dtSrc });\n return prop;\n };\n /**\n * TreeGrid PDF Export cell modifier\n *\n * @param {PdfQueryCellInfoEventArgs} args - Current cell details\n * @hidden\n * @returns {void}\n */\n PdfExport.prototype.pdfQueryCellInfo = function (args) {\n if (this.parent.grid.getColumnIndexByUid(args.column.uid) === this.parent.treeColumnIndex) {\n var style = {};\n var data = getObject('data', args);\n var ispadfilter = isNullOrUndefined(data.filterLevel);\n var pad = ispadfilter ? data.level : data.filterLevel;\n style.paragraphIndent = pad * 3;\n args.style = style;\n }\n this.parent.notify('updateResults', args);\n this.parent.trigger('pdfQueryCellInfo', args);\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","import { Grid } from '@syncfusion/ej2-grids';\nimport { Page as GridPage } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { getValue, isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isFilterChildHierarchy } from '../utils';\n/**\n * The `Page` module is used to render pager and handle paging action.\n *\n * @hidden\n */\nvar Page = /** @class */ (function () {\n function Page(parent) {\n Grid.Inject(GridPage);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.addEventListener = function () {\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandPagedchilds, this);\n this.parent.on(events.pagingActions, this.pageAction, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandPagedchilds);\n this.parent.off(events.pagingActions, this.pageAction);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Pager module name\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Refreshes the page count, pager information, and external message.\n *\n * @returns {void}\n */\n Page.prototype.refresh = function () {\n this.parent.grid.pagerModule.refresh();\n };\n /**\n * To destroy the pager\n *\n * @returns {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Navigates to the target page according to the given number.\n *\n * @param {number} pageNo - Defines the page number to navigate.\n * @returns {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.parent.grid.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of the external message.\n *\n * @param {string} message - Defines the message to update.\n * @returns {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n this.parent.grid.pagerModule.updateExternalMessage(message);\n };\n /**\n * @param {{action: string, row: HTMLTableRowElement, record: ITreeData, args: RowCollapsedEventArgs}} rowDetails - Expand Collapse details arguments\n * @param {string} rowDetails.action - Expand Collapse action type\n * @param {HTMLTableRowElement} rowDetails.row - Row element\n * @param {ITreeData} rowDetails.record - Row object data\n * @param {RowCollapsedEventArgs} rowDetails.args - Expand Collapse event arguments\n * @hidden\n * @returns {void}\n */\n Page.prototype.collapseExpandPagedchilds = function (rowDetails) {\n rowDetails.record.expanded = rowDetails.action === 'collapse' ? false : true;\n if (this.parent.enableImmutableMode) {\n var primaryKeyField_1 = this.parent.getPrimaryKeyFieldNames()[0];\n var record = this.parent.flatData.filter(function (e) {\n return e[primaryKeyField_1] === rowDetails.record[primaryKeyField_1];\n });\n if (record.length) {\n record[0].expanded = rowDetails.record.expanded;\n }\n }\n var ret = {\n result: this.parent.flatData,\n row: rowDetails.row,\n action: rowDetails.action,\n record: rowDetails.record,\n count: this.parent.flatData.length\n };\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret);\n if (this.parent.enableImmutableMode) {\n var row = 'row';\n var action = 'action';\n var targetEle = void 0;\n if (ret[action] === 'collapse') {\n targetEle = ret[row].getElementsByClassName('e-treegridexpand')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridexpand');\n addClass([targetEle], 'e-treegridcollapse');\n }\n }\n else if (ret[action] === 'expand') {\n targetEle = ret[row].getElementsByClassName('e-treegridcollapse')[0];\n if (!isNullOrUndefined(targetEle)) {\n removeClass([targetEle], 'e-treegridcollapse');\n addClass([targetEle], 'e-treegridexpand');\n }\n }\n }\n };\n Page.prototype.pageRoot = function (pagedResults, temp, result) {\n var newResults = isNullOrUndefined(result) ? [] : result;\n var _loop_1 = function (t) {\n newResults.push(temp[t]);\n var res = [];\n if (temp[t].hasChildRecords) {\n res = pagedResults.filter(function (e) {\n return temp[t].uniqueID === e.parentUniqueID;\n });\n newResults = this_1.pageRoot(pagedResults, res, newResults);\n }\n };\n var this_1 = this;\n for (var t = 0; t < temp.length; t++) {\n _loop_1(t);\n }\n return newResults;\n };\n Page.prototype.updatePageSize = function (pageingDetails) {\n var updateSize = pageingDetails.result.length;\n var gridPagerModule = this.parent.grid.pagerModule;\n if (this.parent.pageSettings.pageSizes === true) {\n if (gridPagerModule.pagerObj.pagerdropdownModule['dropDownListObject'].value === gridPagerModule.pagerObj.getLocalizedLabel('All')) {\n gridPagerModule['pagerObj'].totalRecordsCount = updateSize;\n this.parent.grid.pageSettings.pageSize = updateSize;\n }\n }\n };\n Page.prototype.pageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n if (this.parent.pageSettings.pageSizeMode === 'Root') {\n var temp = [];\n var propname = (this.parent.grid.filterSettings.columns.length > 0) &&\n (this.parent.filterSettings.hierarchyMode === 'Child' || this.parent.filterSettings.hierarchyMode === 'None') ?\n 'filterLevel' : 'level';\n var query = new Query().where(propname, 'equal', 0);\n temp = dm.executeLocal(query);\n pageingDetails.count = temp.length;\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n temp = dm.executeLocal(query);\n var newResults = this.pageRoot(pageingDetails.result, temp);\n pageingDetails.result = newResults;\n }\n else {\n var dm_1 = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents_1 = dm_1.executeLocal(new Query().where(expanded));\n var visualData = void 0;\n if (isFilterChildHierarchy(this.parent) && ((this.parent.searchSettings.key !== this.parent.grid.searchSettings.key) ||\n (this.parent.filterSettings.columns.length !== this.parent.grid.filterSettings.columns.length))) {\n visualData = parents_1;\n }\n else {\n visualData = parents_1.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents_1);\n });\n }\n pageingDetails.count = visualData.length;\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n this.updatePageSize(pageingDetails);\n var current = this.parent.grid.pageSettings.currentPage;\n if (visualData.length < (current * size)) {\n current = (Math.floor(visualData.length / size)) + ((visualData.length % size) ? 1 : 0);\n current = current ? current : 1;\n this.parent.grid.setProperties({ pageSettings: { currentPage: current } }, true);\n }\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm_1.dataSource.json = visualData;\n pageingDetails.result = dm_1.executeLocal(query);\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n return Page;\n}());\nexport { Page };\n","import { Grid, Toolbar as tool } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Toolbar Module for TreeGrid\n *\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent) {\n Grid.Inject(tool);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Toolbar module name\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.addEventListener = function () {\n this.parent.on(events.rowSelected, this.refreshToolbar, this);\n this.parent.on(events.rowDeselected, this.refreshToolbar, this);\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowSelected, this.refreshToolbar);\n this.parent.off(events.rowDeselected, this.refreshToolbar);\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n };\n Toolbar.prototype.refreshToolbar = function (args) {\n var tObj = this.parent;\n var indentElement;\n var outdentElement;\n var indentID = tObj.element.id + '_gridcontrol_indent';\n var outdentID = tObj.element.id + '_gridcontrol_outdent';\n var toolbarElement = this.parent.grid.toolbarModule.getToolbar();\n var indentEle = toolbarElement.querySelector('#' + indentID);\n var outdentEle = toolbarElement.querySelector('#' + outdentID);\n var row = args.row;\n var selectedrow = tObj.getSelectedRows()[0];\n if (!isNullOrUndefined(row[0])) {\n row = row[0];\n }\n row = (!isNullOrUndefined(selectedrow) && selectedrow.rowIndex !== row.rowIndex) ? selectedrow : row;\n if (indentEle !== null && outdentEle !== null) {\n indentElement = toolbarElement.querySelector('#' + indentID).parentElement;\n outdentElement = toolbarElement.querySelector('#' + outdentID).parentElement;\n if (row.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indentElement.classList.add('e-hidden');\n outdentElement.classList.add('e-hidden');\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[row.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[row.rowIndex - 1].level)) {\n indentElement.classList.add('e-hidden');\n }\n else {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[row.rowIndex - 1].level) {\n indentElement.classList.remove('e-hidden');\n }\n if (selectedItem.level === 0) {\n outdentElement.classList.add('e-hidden');\n }\n if (selectedItem.level !== 0) {\n outdentElement.classList.remove('e-hidden');\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indentElement.classList.add('e-hidden');\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdentElement.classList.add('e-hidden');\n }\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var tObj = this.parent;\n var indentOutdentAction = 'indentOutdentAction';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.grid.editSettings.mode === 'Batch' &&\n args.item.id === this.parent.grid.element.id + '_update') {\n args.cancel = true;\n this.parent.grid.editModule.saveCell();\n }\n if (args.item.id === this.parent.grid.element.id + '_expandall') {\n this.parent.expandAll();\n }\n if (args.item.id === this.parent.grid.element.id + '_collapseall') {\n this.parent.collapseAll();\n }\n if (args.item.id === tObj.grid.element.id + '_indent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'indent');\n }\n if (args.item.id === tObj.grid.element.id + '_outdent' && tObj.getSelectedRecords().length\n && !isNullOrUndefined(tObj.rowDragAndDropModule)) {\n this.parent.rowDragAndDropModule[indentOutdentAction](null, 'outdent');\n }\n };\n /**\n * Gets the toolbar of the TreeGrid.\n *\n * @returns {Element} - Returns Toolbar element\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.parent.grid.toolbarModule.getToolbar();\n };\n /**\n * Enables or disables ToolBar items.\n *\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n this.parent.grid.toolbarModule.enableItems(items, isEnable);\n };\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n */\n Toolbar.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getObject, calculateAggregate, Aggregate as GridAggregate, Grid, appendChildren } from '@syncfusion/ej2-grids';\nimport { findParentRecords } from '../utils';\nimport { isNullOrUndefined, setValue, createElement, extend } from '@syncfusion/ej2-base';\n/**\n * TreeGrid Aggregate module\n *\n * @hidden\n */\nvar Aggregate = /** @class */ (function () {\n /**\n * Constructor for Aggregate module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Aggregate(parent) {\n Grid.Inject(GridAggregate);\n this.parent = parent;\n this.flatChildRecords = [];\n this.summaryQuery = [];\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Summary module name\n */\n Aggregate.prototype.getModuleName = function () {\n return 'summary';\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n };\n /**\n * Function to calculate summary values\n *\n * @param {QueryOptions[]} summaryQuery - DataManager query for aggregate operations\n * @param {Object[]} filteredData - Filtered data collection\n * @param {boolean} isSort - Specified whether sorting operation performed\n * @hidden\n * @returns {Object[]} - return flat records with summary values\n */\n Aggregate.prototype.calculateSummaryValue = function (summaryQuery, filteredData, isSort) {\n this.summaryQuery = summaryQuery;\n var parentRecord;\n var parentDataLength = Object.keys(filteredData).length;\n var parentData = [];\n for (var p = 0, len = parentDataLength; p < len; p++) {\n var summaryRow = getObject('isSummaryRow', filteredData[p]);\n if (!summaryRow) {\n parentData.push(filteredData[p]);\n }\n }\n var parentRecords = findParentRecords(parentData);\n var flatRecords = parentData.slice();\n var summaryLength = Object.keys(this.parent.aggregates).length;\n var dataLength = Object.keys(parentRecords).length;\n var childRecordsLength;\n var columns = this.parent.getColumns();\n if (this.parent.aggregates.filter(function (x) { return x.showChildSummary; }).length) {\n for (var i = 0, len = dataLength; i < len; i++) {\n parentRecord = parentRecords[i];\n childRecordsLength = this.getChildRecordsLength(parentRecord, flatRecords);\n if (childRecordsLength) {\n var _loop_1 = function (summaryRowIndex, len_1) {\n var item = void 0;\n item = {};\n for (var i_1 = 0; i_1 < columns.length; i_1++) {\n var field = (isNullOrUndefined(getObject('field', columns[i_1]))) ?\n columns[i_1] : getObject('field', (columns[i_1]));\n item[field] = null;\n }\n item = this_1.createSummaryItem(item, this_1.parent.aggregates[summaryRowIndex - 1]);\n if (this_1.parent.aggregates[summaryRowIndex - 1].showChildSummary) {\n var idx_1;\n flatRecords.map(function (e, i) {\n if (e.uniqueID === parentRecord.uniqueID) {\n idx_1 = i;\n return;\n }\n });\n var currentIndex = idx_1 + childRecordsLength + summaryRowIndex;\n var summaryParent = extend({}, parentRecord);\n delete summaryParent.childRecords;\n delete summaryParent[this_1.parent.childMapping];\n setValue('parentItem', summaryParent, item);\n var level = getObject('level', summaryParent);\n setValue('level', level + 1, item);\n setValue('isSummaryRow', true, item);\n setValue('parentUniqueID', summaryParent.uniqueID, item);\n if (isSort) {\n var childRecords = getObject('childRecords', parentRecord);\n if (childRecords.length) {\n childRecords.push(item);\n }\n }\n flatRecords.splice(currentIndex, 0, item);\n }\n else {\n return \"continue\";\n }\n };\n var this_1 = this;\n for (var summaryRowIndex = 1, len_1 = summaryLength; summaryRowIndex <= len_1; summaryRowIndex++) {\n _loop_1(summaryRowIndex, len_1);\n }\n this.flatChildRecords = [];\n }\n }\n }\n else {\n var items = {};\n for (var columnIndex = 0, length_1 = columns.length; columnIndex < length_1; columnIndex++) {\n var fields = isNullOrUndefined(getObject('field', columns[columnIndex])) ?\n columns[columnIndex] : getObject('field', columns[columnIndex]);\n items[fields] = null;\n }\n for (var summaryRowIndex = 1, length_2 = summaryLength; summaryRowIndex <= length_2; summaryRowIndex++) {\n this.createSummaryItem(items, this.parent.aggregates[summaryRowIndex - 1]);\n }\n }\n return flatRecords;\n };\n Aggregate.prototype.getChildRecordsLength = function (parentData, flatData) {\n var recordLength = Object.keys(flatData).length;\n var record;\n for (var i = 0, len = recordLength; i < len; i++) {\n record = flatData[i];\n var parent_1 = isNullOrUndefined(record.parentItem) ? null :\n flatData.filter(function (e) { return e.uniqueID === record.parentItem.uniqueID; })[0];\n if (parentData === parent_1) {\n this.flatChildRecords.push(record);\n var hasChild = getObject('hasChildRecords', record);\n if (hasChild) {\n this.getChildRecordsLength(record, flatData);\n }\n else {\n continue;\n }\n }\n }\n return this.flatChildRecords.length;\n };\n Aggregate.prototype.createSummaryItem = function (itemData, summary) {\n var summaryColumnLength = Object.keys(summary.columns).length;\n for (var i = 0, len = summaryColumnLength; i < len; i++) {\n var displayColumn = isNullOrUndefined(summary.columns[i].columnName) ? summary.columns[i].field :\n summary.columns[i].columnName;\n var keys = Object.keys(itemData);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (key === displayColumn) {\n if (this.flatChildRecords.length) {\n itemData[key] = this.getSummaryValues(summary.columns[i], this.flatChildRecords);\n }\n else if (this.parent.isLocalData) {\n var data = this.parent.dataSource instanceof DataManager ? this.parent.dataSource.dataSource.json\n : this.parent.flatData;\n itemData[key] = this.getSummaryValues(summary.columns[i], data);\n }\n }\n else {\n continue;\n }\n }\n }\n return itemData;\n };\n Aggregate.prototype.getSummaryValues = function (summaryColumn, summaryData) {\n var qry = new Query();\n var single = {};\n var helper = {};\n var type = !isNullOrUndefined(summaryColumn.field) ?\n this.parent.getColumnByField(summaryColumn.field).type : undefined;\n summaryColumn.setPropertiesSilent({ format: this.getFormatFromType(summaryColumn.format, type) });\n summaryColumn.setFormatter(this.parent.grid.locale);\n var formatFn = summaryColumn.getFormatter() || (function () { return function (a) { return a; }; })();\n summaryColumn.setTemplate(helper);\n var tempObj = summaryColumn.getTemplate(2);\n qry.queries = this.summaryQuery;\n qry.requiresCount();\n var sumData = new DataManager(summaryData).executeLocal(qry);\n var types = summaryColumn.type;\n var summaryKey;\n types = [summaryColumn.type];\n for (var i = 0; i < types.length; i++) {\n summaryKey = types[i];\n var key = summaryColumn.field + ' - ' + types[i].toLowerCase();\n var val = types[i] !== 'Custom' ? getObject('aggregates', sumData) :\n calculateAggregate(types[i], sumData, summaryColumn, this.parent);\n var disp = summaryColumn.columnName;\n var value_1 = types[i] !== 'Custom' ? val[key] : val;\n single[disp] = single[disp] || {};\n single[disp][key] = value_1;\n single[disp][types[i]] = !isNullOrUndefined(val) ? formatFn(value_1) : ' ';\n }\n helper.format = summaryColumn.getFormatter();\n var cellElement = createElement('td', {\n className: 'e-summary'\n });\n if (this.parent.isReact) {\n var renderReactTemplates = 'renderReactTemplates';\n tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property, '', null, null, cellElement);\n this.parent[renderReactTemplates]();\n }\n else {\n appendChildren(cellElement, tempObj.fn(single[summaryColumn.columnName], this.parent, tempObj.property));\n }\n var value = single[summaryColumn.columnName][summaryKey];\n var summaryValue;\n if (cellElement.innerHTML.indexOf(value) === -1) {\n summaryValue = cellElement.innerHTML + value;\n return summaryValue;\n }\n else {\n return cellElement.innerHTML;\n }\n };\n Aggregate.prototype.getFormatFromType = function (summaryformat, type) {\n if (isNullOrUndefined(type) || typeof summaryformat !== 'string') {\n return summaryformat;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: summaryformat };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: summaryformat };\n break;\n case 'date':\n obj = { type: type, skeleton: summaryformat };\n break;\n }\n return obj;\n };\n /**\n * To destroy the Aggregate module\n *\n * @returns {void}\n * @hidden\n */\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Aggregate;\n}());\nexport { Aggregate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Sort as GridSort, Grid, getActualProperties } from '@syncfusion/ej2-grids';\nimport { getParentData } from '../utils';\n/**\n * Internal dataoperations for TreeGrid\n *\n * @hidden\n */\nvar Sort = /** @class */ (function () {\n function Sort(grid) {\n Grid.Inject(GridSort);\n this.parent = grid;\n this.taskIds = [];\n this.flatSortedData = [];\n this.storedIndex = -1;\n this.isSelfReference = !isNullOrUndefined(this.parent.parentIdMapping);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Sort module name\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n this.parent.on('updateModel', this.updateModel, this);\n this.parent.on('createSort', this.createdSortedRecords, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updateModel', this.updateModel);\n this.parent.off('createSort', this.createdSortedRecords);\n };\n Sort.prototype.createdSortedRecords = function (sortParams) {\n var data = sortParams.modifiedData;\n var srtQry = sortParams.srtQry;\n this.iterateSort(data, srtQry);\n this.storedIndex = -1;\n sortParams.modifiedData = this.flatSortedData;\n this.flatSortedData = [];\n };\n Sort.prototype.iterateSort = function (data, srtQry) {\n for (var d = 0; d < data.length; d++) {\n if (this.parent.grid.filterSettings.columns.length > 0 || this.parent.grid.searchSettings.key !== '') {\n if (!isNullOrUndefined(getParentData(this.parent, data[d].uniqueID, true))) {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n }\n else {\n this.storedIndex++;\n this.flatSortedData[this.storedIndex] = data[d];\n }\n if (data[d].hasChildRecords) {\n var childSort = (new DataManager(data[d].childRecords).executeLocal(srtQry));\n this.iterateSort(childSort, srtQry);\n }\n }\n };\n /**\n * Sorts a column with the given options.\n *\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @returns {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.parent.grid.sortColumn(columnName, direction, isMultiSort);\n };\n Sort.prototype.removeSortColumn = function (field) {\n this.parent.grid.removeSortColumn(field);\n };\n /**\n * The function used to update sortSettings of TreeGrid.\n *\n * @returns {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n this.parent.setProperties({ sortSettings: getActualProperties(this.parent.grid.sortSettings) }, true);\n };\n /**\n * Clears all the sorted columns of the TreeGrid.\n *\n * @returns {void}\n */\n Sort.prototype.clearSorting = function () {\n this.parent.grid.clearSorting();\n this.updateModel();\n };\n /**\n * Destroys the Sorting of TreeGrid.\n *\n * @function destroy\n * @returns {void}\n */\n Sort.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Sort;\n}());\nexport { Sort };\n","import { Grid, ColumnMenu as GridColumnMenu } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnMenu module\n *\n * @hidden\n */\nvar ColumnMenu = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function ColumnMenu(parent) {\n Grid.Inject(GridColumnMenu);\n this.parent = parent;\n }\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.parent.grid.columnMenuModule.getColumnMenu();\n };\n ColumnMenu.prototype.destroy = function () {\n //this.parent.grid.columnMenuModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnMenu module name\n */\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","import { Grid, ContextMenu as cmenu } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, select } from '@syncfusion/ej2-base';\n/**\n * ContextMenu Module for TreeGrid\n *\n * @hidden\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent) {\n Grid.Inject(cmenu);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.addEventListener = function () {\n this.parent.on('contextMenuOpen', this.contextMenuOpen, this);\n this.parent.on('contextMenuClick', this.contextMenuClick, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('contextMenuOpen', this.contextMenuOpen);\n this.parent.off('contextMenuClick', this.contextMenuClick);\n };\n ContextMenu.prototype.contextMenuOpen = function (args) {\n var addRow = select('#' + this.parent.element.id + '_gridcontrol_cmenu_AddRow', args.element);\n var editRecord = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Edit', args.element);\n var indent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Indent', args.element);\n var outdent = select('#' + this.parent.element.id + '_gridcontrol_cmenu_Outdent', args.element);\n if (addRow) {\n if (this.parent.grid.editSettings.allowAdding === false) {\n addRow.style.display = 'none';\n }\n else {\n addRow.style.display = 'block';\n }\n }\n if ((this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch')\n && !(isNullOrUndefined(editRecord)) && !(editRecord.classList.contains('e-menu-hide'))) {\n editRecord.style.display = 'none';\n }\n if (indent || outdent) {\n var tObj = this.parent;\n var selectedrow = tObj.getSelectedRows()[0];\n var targetElement = args.event.target.closest('td');\n if (isNullOrUndefined(targetElement) || (!isNullOrUndefined(targetElement) && !targetElement.classList.contains('e-rowcell'))) {\n indent.style.display = outdent.style.display = 'none';\n }\n else {\n if (selectedrow.rowIndex === 0 || tObj.getSelectedRowIndexes().length > 1) {\n indent.style.display = outdent.style.display = 'none';\n }\n else if (args['name'] !== 'rowDeselected' || (!isNullOrUndefined(selectedrow) && tObj.grid.isCheckBoxSelection)) {\n var selectedItem = tObj.getCurrentViewRecords()[selectedrow.rowIndex];\n if (!isNullOrUndefined(selectedItem)) {\n if ((selectedItem.level > tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level)) {\n indent.style.display = 'none';\n }\n else {\n indent.style.display = 'block';\n }\n if (selectedItem.level === tObj.getCurrentViewRecords()[selectedrow.rowIndex - 1].level) {\n indent.style.display = 'block';\n }\n if (selectedItem.level === 0) {\n outdent.style.display = 'none';\n }\n if (selectedItem.level !== 0) {\n outdent.style.display = 'block';\n }\n }\n }\n if (args['name'] === 'rowDeselected' && isNullOrUndefined(selectedrow) && !tObj.grid.isCheckBoxSelection) {\n if (this.parent.toolbar['includes']('Indent')) {\n indent.style.display = 'none';\n }\n if (this.parent.toolbar['includes']('Outdent')) {\n outdent.style.display = 'none';\n }\n }\n }\n }\n };\n ContextMenu.prototype.contextMenuClick = function (args) {\n if (args.item.id === 'Above' || args.item.id === 'Below' || args.item.id === 'Child') {\n this.parent.notify('savePreviousRowPosition', args);\n this.parent.setProperties({ editSettings: { newRowPosition: args.item.id } }, true);\n this.parent.addRecord();\n }\n if (args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' || args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Outdent') {\n if (!isNullOrUndefined(this.parent.rowDragAndDropModule)) {\n var indentOutdentAction = 'indentOutdentAction';\n var action = args.item.id === this.parent.element.id + '_gridcontrol_cmenu_Indent' ? 'indent' : 'outdent';\n this.parent.rowDragAndDropModule[indentOutdentAction](null, action);\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ContextMenu module name\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n ContextMenu.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * Gets the context menu element from the TreeGrid.\n *\n * @returns {Element} Return Context Menu root element.\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.parent.grid.contextMenuModule.getContextMenu();\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined, extend, setValue, getValue, merge } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, extendArray } from '../utils';\nimport { getUid } from '@syncfusion/ej2-grids';\nimport { updateParentRow, editAction } from './crud-actions';\nimport { classList } from '@syncfusion/ej2-base';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent) {\n this.batchChildCount = 0;\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.batchAddedRecords = [];\n this.batchDeletedRecords = [];\n this.batchAddRowRecord = [];\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.batchRecords = [];\n this.currentViewRecords = [];\n this.isAdd = false;\n this.addEventListener();\n }\n BatchEdit.prototype.addEventListener = function () {\n this.parent.on(events.cellSaved, this.cellSaved, this);\n this.parent.on(events.batchAdd, this.batchAdd, this);\n this.parent.on(events.beforeBatchAdd, this.beforeBatchAdd, this);\n this.parent.on(events.batchSave, this.batchSave, this);\n this.parent.on(events.beforeBatchDelete, this.beforeBatchDelete, this);\n this.parent.on(events.beforeBatchSave, this.beforeBatchSave, this);\n this.parent.on('batchPageAction', this.batchPageAction, this);\n this.parent.on('batchCancelAction', this.batchCancelAction, this);\n this.parent.grid.on('immutable-batch-cancel', this.immutableBatchAction, this);\n this.parent.grid.on('next-cell-index', this.nextCellIndex, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.cellSaved, this.cellSaved);\n this.parent.off(events.batchAdd, this.batchAdd);\n this.parent.off(events.batchSave, this.batchSave);\n this.parent.off(events.beforeBatchAdd, this.beforeBatchAdd);\n this.parent.off(events.beforeBatchDelete, this.beforeBatchDelete);\n this.parent.off(events.beforeBatchSave, this.beforeBatchSave);\n this.parent.off('batchPageAction', this.batchPageAction);\n this.parent.off('batchCancelAction', this.batchCancelAction);\n this.parent.grid.off('immutable-batch-cancel', this.immutableBatchAction);\n this.parent.grid.off('next-cell-index', this.nextCellIndex);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @returns {Object[]} Returns modified records in batch editing.\n */\n BatchEdit.prototype.getBatchRecords = function () {\n return this.batchRecords;\n };\n /**\n * @hidden\n * @returns {number} Returns index of newly add row\n */\n BatchEdit.prototype.getAddRowIndex = function () {\n return this.addRowIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns selected row index\n */\n BatchEdit.prototype.getSelectedIndex = function () {\n return this.selectedIndex;\n };\n /**\n * @hidden\n * @returns {number} Returns newly added child count\n */\n BatchEdit.prototype.getBatchChildCount = function () {\n return this.batchChildCount;\n };\n BatchEdit.prototype.batchPageAction = function () {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var index;\n if (!isNullOrUndefined(this.batchAddedRecords) && this.batchAddedRecords.length) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.cellSaved = function (args) {\n var actualCellIndex = args.cell.cellIndex;\n var frozenCols = this.parent.frozenColumns || this.parent.getFrozenColumns();\n if (frozenCols && args.columnObject.index > frozenCols) {\n actualCellIndex = actualCellIndex + frozenCols;\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n var colCount = this.parent.getFrozenLeftColumnsCount() + actualCellIndex;\n if (colCount === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n }\n else if (actualCellIndex === this.parent.treeColumnIndex) {\n this.parent.renderModule.cellRender({ data: args.rowData, cell: args.cell,\n column: this.parent.grid.getColumnByIndex(args.cell.cellIndex)\n });\n }\n if (this.isAdd && this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var added = void 0;\n var level = 'level';\n var primaryKey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var currentDataIndex = void 0;\n var indexvalue = void 0;\n var parentItem = 'parentItem';\n var uniqueID = 'uniqueID';\n var parentRecord = this.selectedIndex > -1 ? this.batchRecords[this.addRowIndex][parentItem] : null;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentIdMapping = void 0;\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Top' || this.selectedIndex === -1 ? 0 :\n this.parent.editSettings.newRowPosition === 'Above' ? this.addRowIndex\n : this.addRowIndex + 1;\n rowObjectIndex = this.getActualRowObjectIndex(rowObjectIndex);\n if (this.newBatchRowAdded) {\n if (this.batchRecords.length) {\n idMapping = this.batchRecords[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = this.batchRecords[this.addRowIndex][this.parent.parentIdMapping];\n if (this.batchRecords[this.addRowIndex][parentItem]) {\n parentUniqueID = this.batchRecords[this.addRowIndex][parentItem][uniqueID];\n }\n }\n this.batchAddedRecords = extendArray(this.batchAddedRecords);\n this.batchAddRowRecord = extendArray(this.batchAddRowRecord);\n this.batchAddRowRecord.push(this.batchRecords[this.addRowIndex]);\n added = this.parent.grid.getRowsObject()[rowObjectIndex].changes;\n added.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + added.uniqueID, added, this.parent);\n if (!Object.prototype.hasOwnProperty.call(added, 'level')) {\n this.batchIndex = this.selectedIndex === -1 ? 0 : this.batchIndex;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n added.primaryParent = parentRecord;\n if (this.selectedIndex > -1) {\n added.parentItem = extend({}, this.batchRecords[this.addRowIndex]);\n added.parentUniqueID = added.parentItem.uniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n added.level = added.parentItem.level + 1;\n added.index = this.batchIndex;\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = idMapping;\n }\n updateParentRow(primaryKey_1, added.parentItem, 'add', this.parent, this.isSelfReference, added);\n }\n }\n else if ((this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below')\n && !isNullOrUndefined(this.batchRecords[this.addRowIndex])) {\n added.level = this.batchRecords[this.addRowIndex][level];\n if (added.level && this.selectedIndex > -1) {\n added.parentItem = parentRecord;\n added.parentUniqueID = parentUniqueID;\n delete added.parentItem.childRecords;\n delete added.parentItem[this.parent.childMapping];\n }\n added.index = this.parent.editSettings.newRowPosition === 'Below' ? this.batchIndex : this.batchIndex - 1;\n if (this.parent.editSettings.newRowPosition === 'Below' && this.selectedIndex > -1) {\n var childRecordCount = findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n var record = findChildrenRecords(this.batchRecords[this.addRowIndex])[childRecordCount - 1];\n record = isNullOrUndefined(record) ? this.batchRecords[this.addRowIndex] : record;\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.parent.editSettings.newRowPosition === 'Above' && this.selectedIndex > -1) {\n var record = this.batchRecords[this.addRowIndex];\n currentDataIndex = data.map(function (e) { return e[primaryKey_1]; }).indexOf(record[primaryKey_1]);\n }\n if (this.isSelfReference) {\n added[this.parent.parentIdMapping] = parentIdMapping;\n }\n }\n added.index = added.index === -1 ? 0 : added.index;\n added.hasChildRecords = false;\n added.childRecords = [];\n this.batchRecords.splice(added.index, 0, added);\n this.currentViewRecords.splice(added.index, 0, added);\n if (currentDataIndex) {\n indexvalue = currentDataIndex;\n }\n else {\n indexvalue = added.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Above') {\n indexvalue = added.index === 0 ? indexvalue : indexvalue + 1;\n }\n data.splice(indexvalue, 0, added);\n this.batchAddedRecords.push(added);\n }\n this.parent.grid.getRowsObject()[rowObjectIndex].data = added;\n this.newBatchRowAdded = false;\n }\n if (this.parent.frozenColumns || this.parent.getFrozenColumns()\n && this.parent.grid.getRowsObject()[rowObjectIndex].edit === 'add') {\n merge(this.currentViewRecords[rowObjectIndex], this.parent.grid.getRowsObject()[rowObjectIndex].changes);\n }\n }\n };\n BatchEdit.prototype.beforeBatchAdd = function (e) {\n var isTabLastRow = 'isTabLastRow';\n if (this.parent.editSettings.mode === 'Cell' && this.parent.editModule[isTabLastRow]) {\n e.cancel = true;\n this.parent.editModule[isTabLastRow] = false;\n return;\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex']) && this.parent.grid.selectedRowIndex === -1) {\n this.selectedIndex = this.parent.editModule['selectedIndex'];\n this.addRowIndex = this.parent.editModule['addRowIndex'];\n this.addRowRecord = this.parent.getCurrentViewRecords()[this.selectedIndex];\n }\n else {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.parent.editModule['addRowIndex'] = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n };\n BatchEdit.prototype.batchAdd = function (e) {\n if (this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.isAdd = true;\n this.newBatchRowAdded = true;\n var actualIndex = 0;\n if (!this.batchRecords.length) {\n this.batchAddedRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n if (this.parent.editModule['isAddedRowByMethod'] && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n classList(this.parent.grid.getDataRows()[0], ['e-batchrow'], []);\n }\n if (this.parent.editSettings.newRowPosition !== 'Top') {\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n records = this.batchRecords;\n }\n this.updateChildCount(records);\n this.parent.notify(events.beginAdd, {});\n this.batchChildCount = 0;\n }\n this.updateRowIndex();\n // update focus module, need to refix this once grid source modified.\n var focusModule = getValue('focusModule', this.parent.grid);\n var table = this.parent.getContentTable();\n if (this.parent.getBatchChanges()[this.deletedRecords].length && this.parent.editSettings.newRowPosition === 'Above') {\n actualIndex = e.row.rowIndex;\n focusModule.getContent().matrix.matrix = this.matrix;\n }\n else {\n actualIndex = table.getElementsByClassName('e-batchrow')[0].rowIndex;\n // if (this.parent.frozenRows || this.parent.frozenColumns) {\n // actualIndex = this.batchIndex;\n // }\n }\n focusModule.getContent().matrix.current = [actualIndex, focusModule.getContent().matrix.current[1]];\n }\n };\n BatchEdit.prototype.beforeBatchDelete = function (args) {\n if (!this.batchRecords.length) {\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n }\n var focusModule = getValue('focusModule', this.parent.grid);\n this.matrix = focusModule.getContent().matrix.matrix;\n var row = [];\n var records = [];\n var primarykey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var data;\n var childs;\n var uid;\n if (!isNullOrUndefined(args.row) && this.parent.getSelectedRows().indexOf(args.row) === -1) {\n data = args.rowData;\n childs = findChildrenRecords(data);\n uid = args.row.getAttribute('data-uid');\n }\n else {\n data = this.parent.grid.getSelectedRecords()[this.parent.grid.getSelectedRecords().length - 1];\n childs = findChildrenRecords(data);\n uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n }\n var parentRowIndex = parseInt(this.parent.grid.getRowElementByUID(uid).getAttribute('aria-rowindex'), 10);\n if (childs.length) {\n var totalCount = parentRowIndex + childs.length;\n var firstChildIndex = parentRowIndex + 1;\n for (var i = firstChildIndex; i <= totalCount; i++) {\n row.push(this.parent.grid.getDataRows()[i]);\n if (this.parent.frozenRows || this.parent.frozenColumns || this.parent.getFrozenColumns()) {\n row.push(this.parent.grid.getMovableRows()[i]);\n }\n }\n }\n if (!isNullOrUndefined(data.parentItem)) {\n var parentItem = getParentData(this.parent, data.parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(data);\n parentItem.childRecords.splice(childIndex, 1);\n }\n this.batchDeletedRecords = extendArray(this.batchDeletedRecords);\n this.batchDeletedRecords.push(data);\n }\n childs.push(data);\n records = childs;\n for (var i = 0; i < records.length; i++) {\n var indexvalue = this.batchRecords.map(function (e) { return e[primarykey]; }).indexOf(records[i][primarykey]);\n if (indexvalue !== -1) {\n this.batchRecords.splice(indexvalue, 1);\n }\n }\n for (var i = 0; i < row.length; i++) {\n if (!isNullOrUndefined(row[i])) {\n this.parent.grid.selectionModule.selectedRecords.push(row[i]);\n }\n }\n };\n BatchEdit.prototype.updateRowIndex = function () {\n var rows = this.parent.grid.getDataRows();\n for (var i = 0; i < rows.length; i++) {\n rows[i].setAttribute('aria-rowindex', i.toString());\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var mRows = this.parent.grid.getMovableDataRows();\n var freezeRightRows = this.parent.grid.getFrozenRightDataRows();\n for (var i = 0; i < mRows.length; i++) {\n mRows[i].setAttribute('aria-rowindex', i.toString());\n if (freeze) {\n freezeRightRows[i].setAttribute('aria-rowindex', i.toString());\n }\n }\n }\n };\n BatchEdit.prototype.updateChildCount = function (records) {\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var addedRecords = 'addedRecords';\n var parentItem = this.parent.editSettings.newRowPosition === 'Child' ? 'primaryParent' : 'parentItem';\n for (var i = 0; i < this.parent.getBatchChanges()[addedRecords].length; i++) {\n if (!isNullOrUndefined(this.parent.getBatchChanges()[addedRecords][i][parentItem])) {\n if (this.parent.getBatchChanges()[addedRecords][i][parentItem][primaryKey] === records[this.addRowIndex][primaryKey]) {\n this.batchChildCount = this.batchChildCount + 1;\n }\n }\n }\n };\n BatchEdit.prototype.beforeBatchSave = function (e) {\n var changeRecords = 'changedRecords';\n var deleterecords = 'deletedRecords';\n var changedRecords = e.batchChanges[changeRecords];\n if (e.batchChanges[changeRecords].length) {\n var columnName = void 0;\n for (var i = 0; i < changedRecords.length; i++) {\n editAction({ value: changedRecords[i], action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName);\n }\n }\n if (e.batchChanges[deleterecords].length) {\n var deletedRecords = e.batchChanges[deleterecords];\n var record = deletedRecords;\n for (var i = 0; i < record.length; i++) {\n this.deleteUniqueID(record[i].uniqueID);\n var childs = findChildrenRecords(record[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n e.batchChanges[deleterecords] = e.batchChanges[deleterecords].concat(childs);\n }\n }\n this.isAdd = false;\n };\n BatchEdit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n BatchEdit.prototype.batchCancelAction = function () {\n var targetElement = 'targetElement';\n var index;\n var parentItem = 'parentItem';\n var indexvalue = 'index';\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var childRecords = 'childRecords';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var primaryKey = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (!isNullOrUndefined(this.batchAddedRecords)) {\n for (var i = 0; i < this.batchAddedRecords.length; i++) {\n index = data.map(function (e) { return e[primaryKey]; }).indexOf(this.batchAddedRecords[i][primaryKey]);\n data.splice(index, 1);\n if (this.parent.editSettings.newRowPosition === 'Child') {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchAddedRecords[i][parentItem] ? this.batchAddedRecords[i][parentItem][primaryKey]\n : this.batchAddedRecords[i][primaryKey]);\n if (!isNullOrUndefined(currentViewRecords[index])) {\n var children = currentViewRecords[index][childRecords];\n for (var j = 0; children && j < children.length; j++) {\n if (children[j][primaryKey] === this.batchAddedRecords[i][primaryKey]) {\n currentViewRecords[index][childRecords].splice(j, 1);\n }\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(this.parent[targetElement])) {\n var row = this.parent[targetElement].closest('tr');\n this.parent.collapseRow(row);\n this.parent[targetElement] = null;\n }\n if (!isNullOrUndefined(this.batchDeletedRecords)) {\n for (var i = 0; i < this.batchDeletedRecords.length; i++) {\n if (!isNullOrUndefined(this.batchDeletedRecords[i][parentItem])) {\n index = currentViewRecords.map(function (e) { return e[primaryKey]; })\n .indexOf(this.batchDeletedRecords[i][parentItem][primaryKey]);\n var positionIndex = this.batchDeletedRecords[i][indexvalue] === 0 ? this.batchDeletedRecords[i][indexvalue] :\n this.batchDeletedRecords[i][indexvalue] - 1;\n if (!isNullOrUndefined(currentViewRecords[index])) {\n currentViewRecords[index][childRecords].splice(positionIndex, 0, this.batchDeletedRecords[i]);\n }\n }\n }\n }\n this.batchAddedRecords = this.batchRecords = this.batchAddRowRecord = this.currentViewRecords = [];\n this.batchRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchIndex = 0;\n this.currentViewRecords = extendArray(this.parent.grid.getCurrentViewRecords());\n this.batchDeletedRecords = [];\n this.parent.grid.renderModule.refresh();\n };\n BatchEdit.prototype.batchSave = function (args) {\n if (this.parent.editSettings.mode === 'Batch') {\n var i = void 0;\n var batchChanges = Object.hasOwnProperty.call(args, 'updatedRecords') ? args.updatedRecords : this.parent.getBatchChanges();\n var deletedRecords = 'deletedRecords';\n var addedRecords = 'addedRecords';\n var index = 'index';\n var uniqueID = 'uniqueID';\n var data = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n var currentViewRecords = this.parent.grid.getCurrentViewRecords();\n var primarykey_1 = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var level = 'level';\n var addRecords = batchChanges[addedRecords];\n var parentItem = 'parentItem';\n var selectedIndex = void 0;\n var addRowIndex = void 0;\n var columnName = void 0;\n var addRowRecord = void 0;\n var childRecords = 'childRecords';\n if (addRecords.length > 1 && this.parent.editSettings.newRowPosition !== 'Bottom') {\n addRecords.reverse();\n }\n if (this.parent.editSettings.newRowPosition !== 'Bottom' && !Object.hasOwnProperty.call(args, 'updatedRecords')) {\n data.splice(data.length - addRecords.length, addRecords.length);\n if (this.parent.editModule['isAddedRowByMethod'] && addRecords.length && !isNullOrUndefined(this.parent.editModule['addRowIndex'])) {\n var index_1 = parseInt(this.parent.getContentTable().getElementsByClassName('e-insertedrow')[0].getAttribute('aria-rowindex'), 10);\n data.splice(index_1, 0, addRecords[0]);\n }\n if (!this.parent.allowPaging && data.length !== currentViewRecords.length) {\n if (currentViewRecords.length > addRecords.length) {\n currentViewRecords.splice(currentViewRecords.length - addRecords.length, addRecords.length);\n }\n }\n else {\n var totalRecords = extendArray(data);\n if (totalRecords.length) {\n var startIndex = totalRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(currentViewRecords[0][primarykey_1]);\n var endIndex = startIndex + this.parent.grid.pageSettings.pageSize;\n currentViewRecords = totalRecords.splice(startIndex, endIndex);\n }\n }\n }\n if (this.batchAddRowRecord.length === 0) {\n this.batchAddRowRecord.push(this.parent.flatData[args.index]);\n }\n for (i = 0; i < addRecords.length; i++) {\n var taskData = extend({}, addRecords[i]);\n delete taskData.parentItem;\n delete taskData.uniqueID;\n delete taskData.index;\n delete taskData.level;\n delete taskData.hasChildRecords;\n delete taskData.childRecords;\n delete taskData.parentUniqueID;\n if (!isNullOrUndefined(taskData.primaryParent)) {\n delete taskData.primaryParent;\n }\n addRecords[i].taskData = taskData;\n addRowRecord = this.batchAddRowRecord[i];\n if (isNullOrUndefined(addRowRecord)) {\n addRowRecord = this.batchAddRowRecord[i - 1];\n }\n if (this.isSelfReference) {\n if (!isNullOrUndefined(addRecords[i].parentItem)) {\n updateParentRow(primarykey_1, addRecords[i].parentItem, 'add', this.parent, this.isSelfReference, addRecords[i]);\n }\n }\n if (!isNullOrUndefined(addRowRecord)) {\n addRowIndex = addRowRecord.index;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.parent.editSettings.newRowPosition !== 'Bottom') {\n if (isNullOrUndefined(addRecords[i].parentItem) && this.selectedIndex === -1) {\n selectedIndex = -1;\n addRowRecord = null;\n }\n }\n editAction({ value: addRecords[i], action: 'add' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n selectedIndex = null;\n if (this.parent.editSettings.newRowPosition === 'Child' && !isNullOrUndefined(addRecords[i][parentItem]) &&\n (isNullOrUndefined(this.parent.editModule['addRowIndex']) || this.isSelfReference)) {\n var indexValue = currentViewRecords.map(function (e) { return e[primarykey_1]; })\n .indexOf(addRecords[i][parentItem][primarykey_1]);\n var children = currentViewRecords[indexValue][childRecords];\n for (var j = 0; j < children.length; j++) {\n if (children[j][primarykey_1] === addRecords[i][primarykey_1]) {\n currentViewRecords[indexValue][childRecords].splice(j, 1);\n }\n }\n }\n }\n if (batchChanges[deletedRecords].length) {\n for (i = 0; i < batchChanges[deletedRecords].length; i++) {\n editAction({ value: batchChanges[deletedRecords][i], action: 'delete' }, this.parent, this.isSelfReference, addRowIndex, selectedIndex, columnName, addRowRecord);\n }\n }\n this.parent.parentData = [];\n for (var i_1 = 0; i_1 < data.length; i_1++) {\n data[i_1][index] = i_1;\n setValue('uniqueIDCollection.' + data[i_1][uniqueID] + '.index', i_1, this.parent);\n if (!data[i_1][level]) {\n this.parent.parentData.push(data[i_1]);\n }\n }\n }\n this.batchAddRowRecord = this.batchAddedRecords = this.batchRecords = this.batchDeletedRecords = this.currentViewRecords = [];\n };\n BatchEdit.prototype.getActualRowObjectIndex = function (index) {\n var rows = this.parent.grid.getDataRows();\n if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && this.selectedIndex > -1) {\n if (!isNullOrUndefined(this.batchRecords[this.addRowIndex]) && this.batchRecords[this.addRowIndex].expanded) {\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(this.batchRecords[this.addRowIndex]).length;\n }\n }\n if (index >= rows.length) {\n index = rows.length - 1;\n }\n this.updateChildCount(this.parent.grid.getCurrentViewRecords());\n if (this.batchChildCount) {\n index += this.batchChildCount;\n }\n this.batchChildCount = 0;\n }\n return index;\n };\n BatchEdit.prototype.immutableBatchAction = function (e) {\n e.args.cancel = true;\n var changes = this.parent.grid.getBatchChanges();\n var addedRecords = [];\n var index = 'index';\n if (Object.keys(changes).length) {\n addedRecords = changes.addedRecords;\n }\n for (var i = 0; i < addedRecords.length; i++) {\n e.rows.splice(addedRecords[i][index], 1);\n }\n };\n BatchEdit.prototype.nextCellIndex = function (args) {\n var index = 'index';\n var rowIndex = 'rowIndex';\n args[index] = this.parent.getSelectedRows()[0][rowIndex];\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","import { Grid, Edit as GridEdit, getUid, getObject, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { parentsUntil } from '@syncfusion/ej2-grids';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, extend, setValue, removeClass, addClass, getValue } from '@syncfusion/ej2-base';\nimport { DataManager, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getParentData, isCountRequired, isRemoteData } from '../utils';\nimport { editAction, updateParentRow } from './crud-actions';\nimport { BatchEdit } from './batch-edit';\n/**\n * TreeGrid Edit Module\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for Edit module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function Edit(parent) {\n this.addedRecords = 'addedRecords';\n this.deletedRecords = 'deletedRecords';\n this.prevAriaRowIndex = '-1';\n this.isAddedRowByMethod = false;\n Grid.Inject(GridEdit);\n this.parent = parent;\n this.isSelfReference = !isNullOrUndefined(parent.parentIdMapping);\n this.previousNewRowPosition = null;\n this.internalProperties = {};\n this.batchEditModule = new BatchEdit(this.parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns Edit module name\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.addEventListener = function () {\n this.parent.on(events.crudAction, this.crudAction, this);\n this.parent.on(events.beginEdit, this.beginEdit, this);\n this.parent.on(events.beginAdd, this.beginAdd, this);\n this.parent.on(events.recordDoubleClick, this.recordDoubleClick, this);\n this.parent.on(events.cellSave, this.cellSave, this);\n this.parent.on(events.batchCancel, this.batchCancel, this);\n this.parent.grid.on(events.keyPressed, this.keyPressed, this);\n this.parent.grid.on('batchedit-form', this.lastCellTab, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.cellEdit, this.cellEdit, this);\n this.parent.on('actionBegin', this.editActionEvents, this);\n this.parent.on('actionComplete', this.editActionEvents, this);\n this.parent.grid.on(events.doubleTap, this.recordDoubleClick, this);\n this.parent.grid.on('dblclick', this.gridDblClick, this);\n this.parent.grid.on('recordAdded', this.customCellSave, this);\n this.parent.on('savePreviousRowPosition', this.savePreviousRowPosition, this);\n // this.parent.on(events.beforeDataBound, this.beforeDataBound, this);\n this.parent.grid.on(events.beforeStartEdit, this.beforeStartEdit, this);\n this.parent.grid.on(events.beforeBatchCancel, this.beforeBatchCancel, this);\n this.parent.grid.on('reset-edit-props', this.resetIsOnBatch, this);\n this.parent.grid.on('get-row-position', this.getRowPosition, this);\n };\n Edit.prototype.gridDblClick = function (e) {\n this.doubleClickTarget = e.target;\n };\n Edit.prototype.getRowPosition = function (addArgs) {\n addArgs.newRowPosition = this.parent.editSettings.newRowPosition;\n addArgs.addRowIndex = this.addRowIndex;\n addArgs.ariaRowIndex = +this.prevAriaRowIndex;\n };\n Edit.prototype.beforeStartEdit = function (args) {\n this.parent.trigger(events.actionBegin, args);\n };\n Edit.prototype.beforeBatchCancel = function (args) {\n if (this.parent.editSettings.mode === 'Cell') {\n this.parent.trigger(events.actionComplete, args);\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.crudAction);\n this.parent.off(events.beginEdit, this.beginEdit);\n this.parent.off(events.beginAdd, this.beginAdd);\n this.parent.off(events.recordDoubleClick, this.recordDoubleClick);\n this.parent.off(events.batchCancel, this.batchCancel);\n this.parent.grid.off(events.keyPressed, this.keyPressed);\n this.parent.grid.off('batchedit-form', this.lastCellTab);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.cellEdit, this.cellEdit);\n this.parent.off('actionBegin', this.editActionEvents);\n this.parent.off('actionComplete', this.editActionEvents);\n this.parent.grid.off('recordAdded', this.customCellSave);\n this.parent.grid.off(events.doubleTap, this.recordDoubleClick);\n this.parent.off('savePreviousRowPosition', this.savePreviousRowPosition);\n this.parent.grid.off(events.beforeStartEdit, this.beforeStartEdit);\n this.parent.grid.off(events.beforeBatchCancel, this.beforeBatchCancel);\n this.parent.grid.off('dblclick', this.gridDblClick);\n this.parent.grid.off('reset-edit-props', this.resetIsOnBatch);\n this.parent.grid.off('get-row-position', this.getRowPosition);\n //this.parent.grid.off('click', this.gridSingleClick);\n };\n /**\n * To destroy the editModule\n *\n * @returns {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {Column[]} cols - Column property Collection\n * @hidden\n * @returns {void}\n */\n Edit.prototype.applyFormValidation = function (cols) {\n this.parent.grid.editModule.applyFormValidation(cols);\n };\n Edit.prototype.editActionEvents = function (args) {\n var eventArgs = getObject('editAction', args);\n var eventName = getObject('name', eventArgs);\n var treeObj = this.parent;\n var adaptor = treeObj.dataSource.adaptor;\n if ((isRemoteData(treeObj) || adaptor instanceof RemoteSaveAdaptor) &&\n (eventArgs.requestType === 'save' && eventArgs.action === 'add') &&\n (treeObj.editSettings.newRowPosition === 'Child' || treeObj.editSettings.newRowPosition === 'Below'\n || treeObj.editSettings.newRowPosition === 'Above')) {\n if (eventName === 'actionBegin') {\n var rowIndex = isNullOrUndefined(eventArgs.row) || !Object.keys(eventArgs.row).length ? this.selectedIndex :\n eventArgs.row.rowIndex - 1;\n var keyData = (!isNullOrUndefined(rowIndex) && rowIndex !== -1) ?\n treeObj.getCurrentViewRecords()[rowIndex][treeObj.getPrimaryKeyFieldNames()[0]] : -1;\n treeObj.grid.query.addParams('relationalKey', keyData);\n }\n else if (eventName === 'actionComplete') {\n var paramsLength = treeObj.grid.query.params.length;\n for (var i = 0; i < paramsLength; i++) {\n if (treeObj.grid.query.params[i].key === 'relationalKey') {\n treeObj.grid.query.params.splice(i);\n }\n }\n }\n }\n if (this.parent.enableInfiniteScrolling && eventName === 'actionComplete') {\n this.infiniteAddAction(eventArgs);\n }\n if (this.parent.editSettings.mode === 'Batch' && eventArgs.requestType === 'paging') {\n this.parent.notify('batchPageAction', {});\n }\n };\n Edit.prototype.infiniteAddAction = function (args) {\n if ((args.requestType === 'save' && args.action === 'add') || args.requestType === 'delete') {\n if (this.parent.editSettings.newRowPosition !== 'Top' && this.selectedIndex !== -1\n && (args.requestType === 'save' && args.action === 'add')) {\n var rowObjects = this.parent.grid.getRowsObject();\n var newRowObject = rowObjects.splice(0, 1)[0];\n var newRowObjectIndex = this.addRowIndex;\n var currentData = this.parent.getCurrentViewRecords();\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n newRowObjectIndex += findChildrenRecords(currentData[newRowObjectIndex + 1]).length;\n }\n newRowObjectIndex = this.parent.editSettings.newRowPosition === 'Below' ? newRowObjectIndex + 1 : newRowObjectIndex;\n rowObjects.splice(newRowObjectIndex, 0, newRowObject);\n var newRecord = currentData.splice(0, 1)[0];\n currentData.splice(newRowObjectIndex, 0, newRecord);\n this.updateInfiniteCurrentViewData(newRecord, this.addRowIndex);\n }\n var movableRows = this.parent.grid.getMovableRows();\n var movableRowsObject = this.parent.grid.getMovableRowsObject();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (!isCache) {\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n }\n if (!isCache && this.parent.getFrozenColumns() > 0) {\n resetRowIndex(this.parent.grid, movableRowsObject, movableRows, 0);\n this.updateIndex(this.parent.grid.dataSource, movableRows, this.parent.getCurrentViewRecords());\n }\n }\n };\n Edit.prototype.updateInfiniteCurrentViewData = function (newRecord, newRowIndex) {\n var _this = this;\n var infiniteData = 'infiniteCurrentViewData';\n var updateCurrentViewData = 'updateCurrentViewData';\n var size = Math.ceil(newRowIndex / this.parent.grid.pageSettings.pageSize);\n var page = size > 0 ? size : 1;\n var dataIndex = newRowIndex - ((page - 1) * this.parent.pageSettings.pageSize);\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n infiniteCurrentViewData[1].splice(0, 1);\n var data = infiniteCurrentViewData[page];\n if (!isNullOrUndefined(this.addRowRecord)) {\n data.filter(function (e, index) {\n if (e.uniqueID === _this.addRowRecord.uniqueID) {\n dataIndex = index;\n }\n });\n if (this.addRowRecord.hasChildRecords && this.addRowRecord.childRecords.length &&\n this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n dataIndex += findChildrenRecords(this.addRowRecord).length;\n }\n }\n if (dataIndex >= this.parent.pageSettings.pageSize) {\n page += 1;\n data = infiniteCurrentViewData[page];\n dataIndex = dataIndex - this.parent.pageSettings.pageSize >= 0 ? dataIndex - this.parent.pageSettings.pageSize : 0;\n }\n dataIndex = this.parent.editSettings.newRowPosition === 'Below' ? dataIndex + 1 : dataIndex;\n data.splice(dataIndex, 0, newRecord);\n this.parent.grid.infiniteScrollModule[updateCurrentViewData]();\n };\n Edit.prototype.recordDoubleClick = function (args) {\n var target = args.target;\n if (isNullOrUndefined(target.closest('td.e-rowcell'))) {\n return;\n }\n if (!(this.parent.grid.editSettings.allowEditing) || this.parent.grid.isEdit) {\n return;\n }\n var column = this.parent.grid.getColumnByIndex(+target.closest('td.e-rowcell').getAttribute('aria-colindex'));\n if (this.parent.editSettings.mode === 'Cell' && !this.isOnBatch && column && !column.isPrimaryKey &&\n this.parent.editSettings.allowEditing && column.allowEditing && !(target.classList.contains('e-treegridexpand') ||\n target.classList.contains('e-treegridcollapse')) && this.parent.editSettings.allowEditOnDblClick) {\n this.isOnBatch = true;\n this.parent.grid.setProperties({ selectedRowIndex: args.rowIndex }, true);\n if (this.parent.enableVirtualization) {\n var tr = parentsUntil(args.target, 'e-row');\n this.prevAriaRowIndex = tr.getAttribute('aria-rowindex');\n tr.setAttribute('aria-rowindex', tr.rowIndex + '');\n }\n this.updateGridEditMode('Batch');\n }\n };\n Edit.prototype.updateGridEditMode = function (mode) {\n this.parent.grid.setProperties({ editSettings: { mode: mode } }, true);\n var updateMethod = getObject('updateEditObj', this.parent.grid.editModule);\n updateMethod.apply(this.parent.grid.editModule);\n this.parent.grid.isEdit = false;\n };\n Edit.prototype.resetIsOnBatch = function () {\n if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Cell') {\n this.isOnBatch = false;\n this.updateGridEditMode('Normal');\n }\n };\n Edit.prototype.keyPressed = function (args) {\n if (this.isOnBatch) {\n this.keyPress = args.action;\n }\n if (args.action === 'f2') {\n this.recordDoubleClick(args);\n }\n if (args.action === 'escape') {\n this.parent.closeEdit();\n }\n };\n Edit.prototype.deleteUniqueID = function (value) {\n var idFilter = 'uniqueIDFilterCollection';\n delete this.parent[idFilter][value];\n var id = 'uniqueIDCollection';\n delete this.parent[id][value];\n };\n Edit.prototype.cellEdit = function (args) {\n var _this = this;\n var promise = 'promise';\n var prom = args[promise];\n delete args[promise];\n if (this.parent.enableVirtualization && !isNullOrUndefined(this.prevAriaRowIndex) && this.prevAriaRowIndex !== '-1') {\n args.row.setAttribute('aria-rowindex', this.prevAriaRowIndex);\n this.prevAriaRowIndex = undefined;\n }\n if (this.keyPress !== 'enter') {\n this.parent.trigger(events.cellEdit, args, function (celleditArgs) {\n if (!celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.enableToolbarItems('edit');\n }\n else if (celleditArgs.cancel && _this.parent.editSettings.mode === 'Cell') {\n _this.isOnBatch = false;\n _this.updateGridEditMode('Normal');\n }\n if (!isNullOrUndefined(prom)) {\n prom.resolve(celleditArgs);\n }\n });\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-summarycell'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell') {\n if (this.keyPress === 'tab' || this.keyPress === 'shiftTab') {\n this.keyPress = null;\n }\n else if (this.keyPress === 'enter') {\n args.cancel = true;\n this.keyPress = null;\n setValue('isEditCollapse', false, this.parent);\n }\n if (!args.columnObject.allowEditing) {\n args.cancel = true;\n }\n }\n // if (this.isAdd && this.parent.editSettings.mode === 'Batch' && !args.cell.parentElement.classList.contains('e-insertedrow')) {\n // this.isAdd = false;\n // }\n };\n Edit.prototype.enableToolbarItems = function (request) {\n if (!isNullOrUndefined(this.parent.grid.toolbarModule)) {\n var toolbarID = this.parent.element.id + '_gridcontrol_';\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'add', toolbarID + 'edit', toolbarID + 'delete'], request === 'save');\n this.parent.grid.toolbarModule.enableItems([toolbarID + 'update', toolbarID + 'cancel'], request === 'edit');\n }\n };\n Edit.prototype.batchCancel = function () {\n if (this.parent.editSettings.mode === 'Cell') {\n var cellDetails = getValue('editModule.cellDetails', this.parent.grid.editModule);\n var treeCell = this.parent.getCellFromIndex(cellDetails.rowIndex, this.parent.treeColumnIndex);\n this.parent.renderModule.cellRender({\n data: cellDetails.rowData,\n cell: treeCell,\n column: this.parent.grid.getColumns()[this.parent.treeColumnIndex]\n });\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.notify('batchCancelAction', {});\n }\n };\n Edit.prototype.customCellSave = function (args) {\n if (isCountRequired(this.parent) && this.parent.editSettings.mode === 'Cell' && args.action === 'edit') {\n this.updateCell(args, args.rowIndex);\n this.afterCellSave(args, args.row, args.rowIndex);\n }\n };\n Edit.prototype.cellSave = function (args) {\n var _this = this;\n if (this.parent.editSettings.mode === 'Cell' && this.parent.element.querySelector('form')) {\n args.cancel = true;\n var editModule = 'editModule';\n setValue('isEdit', false, this.parent.grid);\n setValue('isEditCollapse', true, this.parent);\n args.rowData[args.columnName] = args.value;\n var row_1;\n if (isNullOrUndefined(args.cell)) {\n row_1 = this.parent.grid.editModule[editModule].form.parentElement.parentNode;\n }\n else {\n row_1 = args.cell.parentNode;\n }\n var rowIndex_1;\n var primaryKeys_1 = this.parent.getPrimaryKeyFieldNames();\n if (isNullOrUndefined(row_1)) {\n this.parent.grid.getCurrentViewRecords().filter(function (e, i) {\n if (e[primaryKeys_1[0]] === args.rowData[primaryKeys_1[0]]) {\n rowIndex_1 = i;\n return;\n }\n });\n }\n else {\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (this.parent.getRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getRows().indexOf(row_1);\n }\n else if (this.parent.getFrozenRightRows().indexOf(row_1) !== -1) {\n rowIndex_1 = this.parent.getFrozenRightRows().indexOf(row_1);\n }\n else {\n rowIndex_1 = this.parent.getMovableRows().indexOf(row_1);\n }\n }\n else {\n rowIndex_1 = (this.parent.getRows().indexOf(row_1) === -1 && (this.parent.getFrozenColumns() > 0)) ?\n this.parent.grid.getMovableRows().indexOf(row_1) : this.parent.getRows().indexOf(row_1);\n }\n }\n var arg = {};\n extend(arg, args);\n arg.cancel = false;\n arg.type = 'save';\n row_1 = this.parent.grid.getRows()[row_1.rowIndex];\n this.parent.trigger(events.actionBegin, arg);\n if (!arg.cancel) {\n if ((row_1.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'tab') {\n this.isTabLastRow = true;\n }\n if (!isRemoteData(this.parent) &&\n !(this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n if (isCountRequired(this.parent)) {\n var eventPromise = 'eventPromise';\n var editArgs = { requestType: 'save', data: args.rowData, action: 'edit', row: row_1,\n rowIndex: rowIndex_1, rowData: args.rowData, columnName: args.columnName,\n filterChoiceCount: null, excelSearchOperator: null };\n this.parent.grid.getDataModule()[eventPromise](editArgs, this.parent.grid.query);\n }\n else {\n this.updateCell(args, rowIndex_1);\n this.afterCellSave(args, row_1, rowIndex_1);\n }\n }\n else if (isRemoteData(this.parent) ||\n (this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor)) {\n var query = this.parent.grid.query;\n var crud = null;\n crud = this.parent.grid.dataSource.update(primaryKeys_1[0], args.rowData, query.fromTable, query, args.previousValue);\n crud.then(function (e) {\n if (!isNullOrUndefined(e)) {\n args.rowData[args.columnName] = e[args.columnName];\n }\n _this.updateCell(args, rowIndex_1);\n _this.afterCellSave(args, row_1, rowIndex_1);\n });\n }\n }\n else {\n this.parent.grid.isEdit = true;\n }\n }\n };\n Edit.prototype.afterCellSave = function (args, row, rowIndex) {\n var mRow;\n if (this.parent.grid.aggregateModule) {\n this.parent.grid.aggregateModule.refresh(args.rowData);\n }\n this.parent.grid.editModule.destroyWidgets([this.parent.grid.getColumnByField(args.columnName)]);\n this.parent.grid.editModule.formObj.destroy();\n if (this.keyPress !== 'tab' && this.keyPress !== 'shiftTab') {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n }\n this.enableToolbarItems('save');\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (freeze) {\n if (args.cell.closest('.e-frozen-left-header') || args.cell.closest('.e-frozen-left-content')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else if (args.cell.closest('.e-movableheader') || args.cell.closest('.e-movablecontent')) {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getFrozenRightRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n else if (this.parent.getFrozenColumns() > 0) {\n if (args.cell.closest('.e-frozenheader') || args.cell.closest('.e-frozencontent')) {\n mRow = this.parent.grid.getRows()[rowIndex];\n }\n else {\n mRow = this.parent.grid.getMovableRows()[rowIndex];\n }\n removeClass([mRow], ['e-editedrow', 'e-batchrow']);\n removeClass(mRow.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n }\n removeClass([row], ['e-editedrow', 'e-batchrow']);\n removeClass(row.querySelectorAll('.e-rowcell'), ['e-editedbatchcell', 'e-updatedtd']);\n if (this.parent['isCellSaveFocus'] !== false) {\n this.parent.grid.focusModule.restoreFocus();\n }\n editAction({ value: args.rowData, action: 'edit' }, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, args.columnName);\n if ((row.rowIndex === this.parent.getCurrentViewRecords().length - 1) && this.keyPress === 'enter') {\n this.keyPress = null;\n }\n var saveArgs = {\n type: 'save', column: this.parent.getColumnByField(args.columnName), data: args.rowData,\n previousData: args.previousValue, row: row, target: args.cell\n };\n if (this.parent.aggregates.map(function (ag) { return ag.showChildSummary === true; }).length) {\n this.parent.grid.refresh();\n }\n this.parent.trigger(events.actionComplete, saveArgs);\n };\n Edit.prototype.lastCellTab = function () {\n if (!this.parent.grid.isEdit && this.isOnBatch && this.keyPress === 'tab' && this.parent.editSettings.mode === 'Cell') {\n if (!this.parent.editSettings.allowNextRowEdit) {\n this.updateGridEditMode('Normal');\n this.isOnBatch = false;\n this.keyPress = null;\n }\n else {\n this.enableToolbarItems('edit');\n }\n }\n };\n Edit.prototype.updateCell = function (args, rowIndex) {\n this.parent.grid.editModule.updateCell(rowIndex, args.columnName, args.rowData[args.columnName]);\n this.parent.grid.getRowsObject()[rowIndex].data = args.rowData;\n };\n Edit.prototype.crudAction = function (details, columnName) {\n editAction(details, this.parent, this.isSelfReference, this.addRowIndex, this.selectedIndex, columnName, this.addRowRecord);\n this.parent.parentData = [];\n var data = this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource;\n for (var i = 0; i < data.length; i++) {\n data[i].index = i;\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n if (details.value[key] === data[i][key]) {\n if (details.action === 'add') {\n data[i].level = this.internalProperties.level;\n data[i].taskData = this.internalProperties.taskData;\n data[i].uniqueID = this.internalProperties.uniqueID;\n if (!isNullOrUndefined(this.internalProperties.parentItem)) {\n data[i].parentItem = this.internalProperties.parentItem;\n data[i].parentUniqueID = this.internalProperties.parentUniqueID;\n }\n data[i].childRecords = this.internalProperties.childRecords;\n }\n }\n setValue('uniqueIDCollection.' + data[i].uniqueID + '.index', i, this.parent);\n var adaptor = this.parent.dataSource.adaptor;\n if ((isRemoteData(this.parent) || adaptor instanceof RemoteSaveAdaptor)) {\n setValue('uniqueIDCollection.' + data[i].uniqueID, data[i], this.parent);\n }\n if (!data[i].level) {\n this.parent.parentData.push(data[i]);\n }\n }\n if (details.action === 'add' && this.previousNewRowPosition != null) {\n this.parent.setProperties({ editSettings: { newRowPosition: this.previousNewRowPosition } }, true);\n this.previousNewRowPosition = null;\n }\n };\n Edit.prototype.updateIndex = function (data, rows, records) {\n for (var j = 0; j < this.parent.getDataRows().length; j++) {\n var data1 = records[j];\n if (!isNullOrUndefined(data1)) {\n var index = getValue('uniqueIDCollection.' + data1.uniqueID + '.index', this.parent);\n data1.index = index;\n if (!isNullOrUndefined(data1.parentItem)) {\n var parentIndex = getValue('uniqueIDCollection.' + data1.parentItem.uniqueID + '.index', this.parent);\n data1.parentItem.index = parentIndex;\n }\n }\n }\n var count = -1;\n var treeColIndex = this.parent.treeColumnIndex;\n if (this.parent.getFrozenColumns() > 0) {\n var cells = rows[0].querySelectorAll('.e-rowcell');\n for (var l = 0; l < cells.length; l++) {\n if (cells[l].classList.contains('e-gridrowindex0level0')) {\n treeColIndex = l;\n break;\n }\n }\n }\n for (var k = 0; k < this.parent.getRows().length; k++) {\n if (!rows[k].classList.contains('e-detailrow')) {\n count++;\n }\n var data2 = records[count];\n if (!isNullOrUndefined(data2)) {\n var index = data2.index;\n var level = data2.level;\n var row = rows[k];\n if (!isNullOrUndefined(data2.parentItem)) {\n index = getValue('uniqueIDCollection.' + data2.parentItem.uniqueID + '.index', this.parent);\n }\n var treecell = row.cells[treeColIndex];\n if (!isNullOrUndefined(treecell)) {\n for (var l = 0; l < treecell.classList.length; l++) {\n var value = treecell.classList[l];\n var remove = /e-gridrowindex/i;\n var removed = /e-griddetailrowindex/i;\n var result = value.match(remove);\n var results = value.match(removed);\n if (result != null) {\n removeClass([treecell], value);\n }\n if (results != null) {\n removeClass([treecell], value);\n }\n }\n if (!rows[k].classList.contains('e-detailrow')) {\n addClass([treecell], 'e-gridrowindex' + index + 'level' + level);\n }\n else {\n addClass([treecell], 'e-griddetailrowindex' + index + 'level' + level);\n }\n }\n }\n }\n };\n Edit.prototype.beginAdd = function () {\n var position;\n var index = this.addRowIndex;\n var records = this.parent.grid.getCurrentViewRecords();\n if (this.parent.editSettings.mode === 'Batch') {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length) {\n records = this.batchEditModule.getBatchRecords();\n }\n }\n var rows = this.parent.grid.getDataRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n if (this.parent.editSettings.mode !== 'Dialog') {\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n }\n else if ((this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child')\n && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n position = 'after';\n if (!isNullOrUndefined(records[index]) && records[index].expanded) {\n if (this.parent.editSettings.mode === 'Batch' && (this.parent.getBatchChanges()[this.addedRecords].length > 1\n || this.parent.getBatchChanges()[this.deletedRecords].length)) {\n index += findChildrenRecords(records[index]).length;\n if (this.parent.editSettings.newRowPosition !== 'Child') {\n var batchChildCount = this.batchEditModule.getBatchChildCount();\n index = index + batchChildCount;\n }\n }\n else {\n index += findChildrenRecords(records[index]).length;\n }\n }\n }\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange\n && (index || (this.parent.editSettings.newRowPosition === 'Child'\n || this.parent.editSettings.newRowPosition === 'Below'))) {\n if (index >= rows.length - 1) {\n index = rows.length - 2;\n }\n var r = 'rows';\n var newRowObject = this.parent.grid.contentModule[r][0];\n var focussedElement = document.activeElement;\n rows[index + 1][position](rows[0]);\n setValue('batchIndex', index + 1, this.batchEditModule);\n var rowObjectIndex = this.parent.editSettings.newRowPosition === 'Above' ? index : index + 1;\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[r].splice(0, 1);\n this.parent.grid.contentModule[r].splice(rowObjectIndex, 0, newRowObject);\n }\n var freeze = (this.parent.getFrozenLeftColumnsCount() > 0 ||\n this.parent.getFrozenRightColumnsCount() > 0) ? true : false;\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns || freeze) {\n var movableRows = this.parent.getMovableDataRows();\n var frows = 'freezeRows';\n var newFreezeRowObject = this.parent.grid.getRowsObject()[0];\n movableRows[index + 1][position](movableRows[0]);\n if (freeze) {\n var rightFrozenRows = this.parent.getFrozenRightDataRows();\n rightFrozenRows[index + 1][position](rightFrozenRows[0]);\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.parent.grid.contentModule[frows].splice(0, 1);\n this.parent.grid.contentModule[frows].splice(rowObjectIndex, 0, newFreezeRowObject);\n }\n setValue('batchIndex', index + 1, this.batchEditModule);\n }\n if (this.parent.editSettings.mode === 'Row' || this.parent.editSettings.mode === 'Cell') {\n var errors = this.parent.grid.getContentTable().querySelectorAll('.e-griderror');\n for (var i = 0; i < errors.length; i++) {\n errors[i].remove();\n }\n setValue('errorRules', [], this.parent.grid.editModule.formObj);\n }\n if (isVirtualization) {\n this.prevAriaRowIndex = '-1';\n }\n focussedElement.focus();\n }\n }\n if (this.parent.editSettings.mode === 'Batch' && !isNullOrUndefined(this.addRowIndex) && this.addRowIndex !== -1) {\n index = this.batchEditModule.getAddRowIndex();\n this.selectedIndex = this.batchEditModule.getSelectedIndex();\n if (this.parent.editModule['isAddedRowByMethod']) {\n var args = {\n action: 'add',\n data: this.parent.getBatchChanges()['addedRecords'][0],\n index: index,\n seletedRow: 0\n };\n this.parent.editModule.beginAddEdit(args);\n this.parent.editModule.batchEditModule['batchAddRowRecord'].push(this.parent.editModule.batchEditModule['addRowRecord']);\n this.parent.editModule.batchEditModule['batchAddedRecords'].push(args['data']);\n }\n }\n };\n // private beforeDataBound(args: BeforeDataBoundArgs): void {\n // if (this.parent.grid.isEdit && this.parent.dataSource instanceof DataManager &&\n // this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor) {\n // let action: string = getValue('action', args);\n // let data: Object = getValue('data', args);\n // if (action === 'edit' && !isNullOrUndefined(this.editedData)) {\n // data = extend(this.editedData, data);\n // this.editedData = null;\n // }\n // if (!isNullOrUndefined(this.addedData)) {\n // let addedData: Object = args.result[args.result.length - 1];\n // addedData = extend(this.addedData, addedData);\n // this.addedData = null;\n // args.result.splice(this.addedIndex, 0, addedData);\n // args.result.splice(args.result.length, 1);\n // }\n // }\n // }\n Edit.prototype.beginEdit = function (args) {\n if (args.requestType === 'refresh' && this.isOnBatch) {\n args.cancel = true;\n return;\n }\n if (this.parent.editSettings.mode === 'Cell' && args.requestType === 'beginEdit') {\n args.cancel = true;\n return;\n }\n if (this.doubleClickTarget && (this.doubleClickTarget.classList.contains('e-treegridexpand') ||\n this.doubleClickTarget.classList.contains('e-treegridcollapse') || this.doubleClickTarget.classList.contains('e-frame'))) {\n args.cancel = true;\n this.doubleClickTarget = null;\n return;\n }\n if (args.requestType === 'delete') {\n var data_1 = args.data;\n if (isNullOrUndefined(args.data[0].uniqueID)) {\n var primaryKeys_2 = this.parent.getPrimaryKeyFieldNames();\n var _loop_1 = function (i) {\n this_1.parent.flatData.filter(function (e) {\n if (e[primaryKeys_2[0]] === args.data[i][primaryKeys_2[0]]) {\n data_1[i] = e;\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i < data_1.length; i++) {\n _loop_1(i);\n }\n }\n for (var i = 0; i < data_1.length; i++) {\n this.deleteUniqueID(data_1[i].uniqueID);\n var childs = findChildrenRecords(data_1[i]);\n for (var c = 0; c < childs.length; c++) {\n this.deleteUniqueID(childs[c].uniqueID);\n }\n args.data = args.data.concat(childs);\n }\n }\n if (args.requestType === 'add' || (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling))) {\n if (!(this.parent.grid.selectedRowIndex === -1 && this.isAddedRowByMethod)\n && args.index === this.parent.grid.selectedRowIndex || args.index === 0) {\n this.selectedIndex = this.parent.grid.selectedRowIndex;\n }\n if (this.parent.enableVirtualization) {\n var selector = '.e-row[aria-rowindex=\"' + this.selectedIndex + '\"]';\n var row = void 0;\n if (this.selectedIndex > -1 && this.parent.editSettings.newRowPosition !== 'Top' &&\n this.parent.editSettings.newRowPosition !== 'Bottom') {\n this.prevAriaRowIndex = this.selectedIndex.toString();\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n if (this.prevAriaRowIndex && this.prevAriaRowIndex !== '-1') {\n selector = '.e-row[aria-rowindex=\"' + this.prevAriaRowIndex + '\"]';\n row = this.parent.getContent().querySelector(selector);\n this.addRowIndex = row ? row.rowIndex : 0;\n }\n else {\n this.addRowIndex = 0;\n }\n }\n }\n else {\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowIndex = args.index;\n }\n else {\n this.addRowIndex = this.parent.grid.selectedRowIndex > -1 ? this.parent.grid.selectedRowIndex : 0;\n }\n }\n if (this.isAddedRowByMethod && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n this.addRowRecord = this.parent.flatData[args.index];\n }\n else {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n }\n if (this.isAddedRowByMethod && args.index !== 0) {\n this.addRowRecord = this.parent.flatData[args.index];\n this.addRowIndex = args.index;\n }\n if (this.parent.editSettings.newRowPosition === 'Child' && isNullOrUndefined(this.addRowRecord)\n && !isNullOrUndefined(this.parent.getSelectedRecords()[0])) {\n this.addRowRecord = this.parent.getSelectedRecords()[0];\n }\n this.isAddedRowByMethod = false;\n args = this.beginAddEdit(args);\n // if (args.requestType === 'save' &&\n // ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.adaptor instanceof RemoteSaveAdaptor))) {\n // if (args.action === 'edit') {\n // this.editedData = args.data;\n // } else if (args.action === 'add') {\n // this.addedData = value;\n // }\n // }\n };\n Edit.prototype.savePreviousRowPosition = function () {\n if (this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n };\n Edit.prototype.beginAddEdit = function (args) {\n var value = args.data;\n if (args.action === 'add') {\n var key = this.parent.grid.getPrimaryKeyFieldNames()[0];\n var position = null;\n value.taskData = isNullOrUndefined(value.taskData) ? extend({}, args.data) : value.taskData;\n var currentData = this.parent.grid.getCurrentViewRecords();\n if (this.parent.enableVirtualization && args.index !== 0) {\n this.addRowIndex = this.parent.grid.getCurrentViewRecords().indexOf(this.addRowRecord);\n this.selectedIndex = parseInt(this.parent.getRows()[this.addRowIndex].getAttribute('aria-rowindex'), 10);\n }\n var index = this.addRowIndex;\n value.uniqueID = getUid(this.parent.element.id + '_data_');\n setValue('uniqueIDCollection.' + value.uniqueID, value, this.parent);\n var level = 0;\n var idMapping = void 0;\n var parentUniqueID = void 0;\n var parentItem = void 0;\n var parentIdMapping = void 0;\n var isVirtualization = this.parent.enableVirtualization && this.addRowIndex > -1 && this.prevAriaRowIndex !== '-1';\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? currentData.indexOf(currentData[0]) : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withinRange = this.selectedIndex >= firstAriaIndex && this.selectedIndex <= lastAriaIndex;\n if (currentData.length) {\n idMapping = currentData[this.addRowIndex][this.parent.idMapping];\n parentIdMapping = currentData[this.addRowIndex][this.parent.parentIdMapping];\n if (currentData[this.addRowIndex].parentItem) {\n parentUniqueID = currentData[this.addRowIndex].parentItem.uniqueID;\n }\n parentItem = currentData[this.addRowIndex].parentItem;\n }\n if (this.parent.editSettings.newRowPosition !== 'Top' && currentData.length) {\n level = currentData[this.addRowIndex].level;\n if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n index = currentData[this.addRowIndex].index;\n }\n else if (this.parent.editSettings.newRowPosition === 'Below') {\n position = 'after';\n var childRecordCount = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex = currentData[this.addRowIndex].index;\n index = (childRecordCount > 0) ? (currentDataIndex + childRecordCount) : (currentDataIndex);\n }\n else if (this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n if ((this.selectedIndex > -1 || isVirtualization) && withinRange) {\n value.parentItem = extend({}, currentData[this.addRowIndex]);\n value.parentUniqueID = value.parentItem.uniqueID;\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n var childRecordCount1 = findChildrenRecords(currentData[this.addRowIndex]).length;\n var currentDataIndex1 = currentData[this.addRowIndex].index;\n if (this.selectedIndex >= 0) {\n value.level = level + 1;\n }\n index = (childRecordCount1 > 0) ? (currentDataIndex1 + childRecordCount1) : (currentDataIndex1);\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = idMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (this.parent.editSettings.newRowPosition === 'Above' || this.parent.editSettings.newRowPosition === 'Below') {\n if ((this.selectedIndex > -1 || isVirtualization) && level && withinRange) {\n value.parentUniqueID = parentUniqueID;\n value.parentItem = extend({}, parentItem);\n delete value.parentItem.childRecords;\n delete value.parentItem[this.parent.childMapping];\n }\n value.level = level;\n if (this.isSelfReference) {\n value.taskData[this.parent.parentIdMapping] = value[this.parent.parentIdMapping] = parentIdMapping;\n if (!isNullOrUndefined(value.parentItem)) {\n updateParentRow(key, value.parentItem, 'add', this.parent, this.isSelfReference, value);\n }\n }\n }\n if (position != null && (this.selectedIndex > -1 || isVirtualization) && withinRange) {\n args.index = position === 'before' ? index : index + 1;\n }\n if (this.parent.editSettings.newRowPosition === 'Bottom') {\n var dataSource = (this.parent.grid.dataSource instanceof DataManager ?\n this.parent.grid.dataSource.dataSource.json : this.parent.grid.dataSource);\n args.index = dataSource.length;\n }\n }\n if (isNullOrUndefined(value.level)) {\n value.level = level;\n }\n value.hasChildRecords = false;\n value.childRecords = [];\n value.index = 0;\n }\n if (args.action === 'add') {\n this.internalProperties = { level: value.level, parentItem: value.parentItem, uniqueID: value.uniqueID,\n taskData: value.taskData, parentUniqueID: isNullOrUndefined(value.parentItem) ? undefined : value.parentItem.uniqueID,\n childRecords: value.childRecords };\n }\n if (args.requestType === 'delete') {\n var deletedValues = args.data;\n for (var i = 0; i < deletedValues.length; i++) {\n if (deletedValues[i].parentItem) {\n var parentItem = getParentData(this.parent, deletedValues[i].parentItem.uniqueID);\n if (!isNullOrUndefined(parentItem) && parentItem.hasChildRecords) {\n var childIndex = parentItem.childRecords.indexOf(deletedValues[i]);\n parentItem.childRecords.splice(childIndex, 1);\n }\n }\n }\n }\n return args;\n };\n /**\n * If the data,index and position given, Adds the record to treegrid rows otherwise it will create edit form.\n *\n * @returns {void}\n */\n Edit.prototype.addRecord = function (data, index, position) {\n if (this.parent.editSettings.newRowPosition === this.previousNewRowPosition || this.previousNewRowPosition === null) {\n this.previousNewRowPosition = this.parent.editSettings.newRowPosition;\n }\n if (!this.isSelfReference && !isNullOrUndefined(data) && Object.hasOwnProperty.call(data, this.parent.childMapping)) {\n var addRecords = [];\n var previousEditMode = this.parent.editSettings.mode;\n var previousGridEditMode = this.parent.grid.editSettings.mode;\n addRecords.push(data);\n this.parent.setProperties({ editSettings: { mode: 'Batch' } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: 'Batch' } }, true);\n if (!isNullOrUndefined(position)) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n var updatedRecords = { addedRecords: addRecords, changedRecords: [], deletedRecords: [] };\n this.parent.notify(events.batchSave, { updatedRecords: updatedRecords, index: index });\n this.parent.setProperties({ editSettings: { mode: previousEditMode } }, true);\n this.parent.grid.setProperties({ editSettings: { mode: previousGridEditMode } }, true);\n this.parent.refresh();\n }\n else {\n if (data) {\n if (index > -1) {\n this.selectedIndex = index;\n this.addRowIndex = index;\n }\n else {\n this.selectedIndex = this.parent.selectedRowIndex;\n this.addRowIndex = this.parent.selectedRowIndex;\n }\n if (position) {\n this.parent.setProperties({ editSettings: { newRowPosition: position } }, true);\n }\n this.parent.grid.editModule.addRecord(data, index);\n }\n else {\n this.parent.grid.editModule.addRecord(data, index);\n }\n }\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n *\n * @returns {boolean} Returns form validation results\n */\n Edit.prototype.editFormValidate = function () {\n return this.parent.grid.editModule.editFormValidate();\n };\n /**\n * @hidden\n * @returns {void}\n */\n Edit.prototype.destroyForm = function () {\n this.parent.grid.editModule.destroyForm();\n };\n Edit.prototype.contentready = function (e) {\n if (!isNullOrUndefined(e.args.requestType)\n && (e.args.requestType.toString() === 'delete' || e.args.requestType.toString() === 'save'\n || (this.parent.editSettings.mode === 'Batch' && e.args.requestType.toString() === 'batchsave'))) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.frozenRows || this.parent.getFrozenColumns() || this.parent.frozenColumns) {\n if (this.parent.grid.dataSource.length === this.parent.getMovableDataRows().length) {\n this.updateIndex(this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n }\n };\n /**\n * If the row index and field is given, edits the particular cell in a row.\n *\n * @returns {void}\n */\n Edit.prototype.editCell = function (rowIndex, field) {\n if (this.parent.editSettings.mode === 'Cell' || this.parent.editSettings.mode === 'Batch') {\n if (this.parent.editSettings.mode !== 'Batch') {\n this.isOnBatch = true;\n this.updateGridEditMode('Batch');\n }\n this.parent.grid.editModule.editCell(rowIndex, field);\n }\n };\n return Edit;\n}());\nexport { Edit };\n","import { Grid, CommandColumn as Command } from '@syncfusion/ej2-grids';\n/**\n * Command Column Module for TreeGrid\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent) {\n Grid.Inject(Command);\n this.parent = parent;\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns CommandColumn module name\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * Destroys the ContextMenu.\n *\n * @function destroy\n * @returns {void}\n */\n CommandColumn.prototype.destroy = function () {\n //this.removeEventListener();\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { Grid, getObject } from '@syncfusion/ej2-grids';\nimport { DetailRow as detailrow } from '@syncfusion/ej2-grids';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport { getExpandStatus, isRemoteData } from '../utils';\n/**\n * TreeGrid Detail Row module\n *\n * @hidden\n */\nvar DetailRow = /** @class */ (function () {\n function DetailRow(parent) {\n Grid.Inject(detailrow);\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns DetailRow module name\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n DetailRow.prototype.addEventListener = function () {\n this.parent.on('dataBoundArg', this.dataBoundArg, this);\n this.parent.on('detaildataBound', this.detaildataBound, this);\n this.parent.grid.on('detail-indentcell-info', this.setIndentVisibility, this);\n this.parent.on('childRowExpand', this.childRowExpand, this);\n this.parent.on('rowExpandCollapse', this.rowExpandCollapse, this);\n this.parent.on('actioncomplete', this.actioncomplete, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n DetailRow.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('dataBoundArg', this.dataBoundArg);\n this.parent.off('detaildataBound', this.detaildataBound);\n this.parent.off('childRowExpand', this.childRowExpand);\n this.parent.off('rowExpandCollapse', this.rowExpandCollapse);\n this.parent.off('actioncomplete', this.actioncomplete);\n this.parent.grid.off('detail-indentcell-info', this.setIndentVisibility);\n };\n DetailRow.prototype.setIndentVisibility = function (args) {\n var visible = 'visible';\n args[visible] = false;\n };\n DetailRow.prototype.dataBoundArg = function () {\n var detailele = this.parent.getRows().filter(function (e) {\n return !e.classList.contains('e-detailrow');\n });\n for (var i = 0; i < detailele.length; i++) {\n var elements = detailele[i].getElementsByClassName('e-detailrowcollapse');\n var detailData = this.parent.grid.getRowObjectFromUID(detailele[i].getAttribute('data-Uid'));\n var parentItem = getObject('parentItem', this.parent.grid.getCurrentViewRecords()[i]);\n if (isNullOrUndefined(parentItem) || !isNullOrUndefined(parentItem) &&\n getExpandStatus(this.parent, detailData.data, this.parent.grid.getCurrentViewRecords())) {\n this.parent.grid.detailRowModule.expand(elements[0]);\n }\n }\n };\n DetailRow.prototype.childRowExpand = function (args) {\n var detailRowElement = args.row.getElementsByClassName('e-detailrowcollapse');\n if (!isNullOrUndefined(detailRowElement[0])) {\n this.parent.grid.detailRowModule.expand(detailRowElement[0]);\n }\n };\n DetailRow.prototype.rowExpandCollapse = function (args) {\n if (isRemoteData(this.parent)) {\n return;\n }\n for (var i = 0; i < args.detailrows.length; i++) {\n args.detailrows[i].style.display = args.action;\n }\n };\n DetailRow.prototype.detaildataBound = function (args) {\n var data = args.data;\n var row = args.detailElement.parentElement.previousSibling;\n var index = !isNullOrUndefined(data.parentItem) ? data.parentItem.index : data.index;\n var expandClass = 'e-gridrowindex' + index + 'level' + data.level;\n var classlist = row.querySelector('.' + expandClass).classList;\n var gridClas = [].slice.call(classlist).filter(function (gridclass) { return (gridclass === expandClass); });\n var newNo = gridClas[0].length;\n var slicedclas = gridClas.toString().slice(6, newNo);\n var detailClass = 'e-griddetail' + slicedclas;\n addClass([args.detailElement.parentElement], detailClass);\n };\n DetailRow.prototype.actioncomplete = function (args) {\n if (args.requestType === 'beginEdit' || args.requestType === 'add') {\n var spann = (args.row.querySelectorAll('.e-editcell')[0].getAttribute('colSpan'));\n var colum = parseInt(spann, 10) - 1;\n var updtdcolum = colum.toString();\n args.row.querySelectorAll('.e-editcell')[0].setAttribute('colSpan', updtdcolum);\n }\n var focusElement = this.parent.grid.contentModule.getRows();\n for (var i = 0; i < focusElement.length; i++) {\n focusElement[i].cells[0].visible = false;\n }\n var focusModule = getObject('focusModule', this.parent.grid);\n var matrix = 'refreshMatrix';\n focusModule[matrix](true)({ rows: this.parent.grid.contentModule.getRows() });\n };\n /**\n * Destroys the DetailModule.\n *\n * @function destroy\n * @returns {void}\n */\n DetailRow.prototype.destroy = function () {\n this.removeEventListener();\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Cell, CellType } from '@syncfusion/ej2-grids';\nimport { VirtualContentRenderer } from '@syncfusion/ej2-grids';\nimport { InterSectionObserver } from '@syncfusion/ej2-grids';\nimport { TreeVirtualRowModelGenerator } from '../renderer/virtual-row-model-generator';\nimport * as events from '../base/constant';\nimport { isNullOrUndefined, EventHandler, getValue, setValue, Browser, debounce } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { isCountRequired } from '../utils';\nvar VirtualTreeContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualTreeContentRenderer, _super);\n function VirtualTreeContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.isExpandCollapse = false;\n _this.translateY = 0;\n _this.maxiPage = 0;\n _this.recordAdded = false;\n /** @hidden */\n _this.startIndex = -1;\n _this.endIndex = -1;\n _this.preTranslate = 0;\n _this.isRemoteExpand = false;\n /** @hidden */\n _this.isDataSourceChanged = false;\n _this.addEventListener();\n return _this;\n }\n VirtualTreeContentRenderer.prototype.getModelGenerator = function () {\n return new TreeVirtualRowModelGenerator(this.parent);\n };\n VirtualTreeContentRenderer.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows().filter(function (e) { return parseInt(e.getAttribute('aria-rowindex'), 10) === index; })[0];\n };\n VirtualTreeContentRenderer.prototype.addEventListener = function () {\n this.parent.on(events.virtualActionArgs, this.virtualOtherAction, this);\n this.parent.on(events.indexModifier, this.indexModifier, this);\n };\n VirtualTreeContentRenderer.prototype.virtualOtherAction = function (args) {\n if (args.setTop) {\n this.translateY = 0;\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n else if (args.isExpandCollapse) {\n this.isExpandCollapse = true;\n }\n };\n VirtualTreeContentRenderer.prototype.indexModifier = function (args) {\n var content = this.parent.getContent().querySelector('.e-content');\n if (this.recordAdded && this.startIndex > -1 && this.endIndex > -1) {\n if (this.endIndex > args.count - this.parent.pageSettings.pageSize) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var lastIndex = nextSetResIndex + this.parent.getRows().length;\n if (lastIndex > args.count) {\n lastIndex = nextSetResIndex +\n (args.count - nextSetResIndex);\n }\n this.startIndex = lastIndex - this.parent.getRows().length;\n this.endIndex = lastIndex;\n }\n else {\n this.startIndex += 1;\n this.endIndex += 1;\n }\n this.recordAdded = false;\n }\n if (this.isDataSourceChanged) {\n this.startIndex = 0;\n this.endIndex = this.parent.pageSettings.pageSize - 1;\n }\n args.startIndex = this.startIndex;\n args.endIndex = this.endIndex;\n };\n VirtualTreeContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n this.parent[action]('data-ready', this.onDataReady, this);\n this.parent[action]('refresh-virtual-block', this.refreshContentRows, this);\n this.fn = function () {\n _this.observers.observes(function (scrollArgs) { return _this.scrollListeners(scrollArgs); }, _this.onEnteredAction());\n _this.parent.off('content-ready', _this.fn);\n };\n this.parent.addEventListener('dataBound', this.dataBoundEvent.bind(this));\n this.parent.addEventListener('rowSelected', this.rowSelectedEvent.bind(this));\n this.parent[action]('select-virtual-Row', this.toSelectVirtualRow, this);\n this.parent.on('content-ready', this.fn, this);\n this.parent.addEventListener(events.actionComplete, this.onActionComplete.bind(this));\n this.parent[action]('virtual-scroll-edit-action-begin', this.beginEdit, this);\n this.parent[action]('virtual-scroll-add-action-begin', this.beginAdd, this);\n this.parent[action]('virtual-scroll-edit-success', this.virtualEditSuccess, this);\n this.parent[action]('edit-reset', this.resetIseditValue, this);\n this.parent[action]('get-virtual-data', this.getData, this);\n this.parent[action]('virtual-scroll-edit-cancel', this.cancelEdit, this);\n this.parent[action]('select-row-on-context-open', this.toSelectRowOnContextOpen, this);\n this.parent[action]('refresh-virtual-editform-cells', this.refreshCell, this);\n this.parent[action]('virtaul-cell-focus', this.cellFocus, this);\n }\n else {\n _super.prototype.eventListener.call(this, 'on');\n }\n };\n VirtualTreeContentRenderer.prototype.cellFocus = function (e) {\n var virtualCellFocus = 'virtualCellFocus';\n _super.prototype[virtualCellFocus].call(this, e);\n };\n VirtualTreeContentRenderer.prototype.onDataReady = function (e) {\n _super.prototype.onDataReady.call(this, e);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n if (!isNullOrUndefined(e.count)) {\n this.totalRecords = e.count;\n if (!this.parent.enableColumnVirtualization) {\n getValue('virtualEle', this).setVirtualHeight(this.parent.getRowHeight() * e.count, '100%');\n }\n }\n if ((!isNullOrUndefined(e.requestType) && e.requestType.toString() === 'collapseAll') || (this.isDataSourceChanged && this.startIndex === -1)) {\n this.contents.scrollTop = 0;\n this.isDataSourceChanged = false;\n }\n }\n };\n VirtualTreeContentRenderer.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n if (!(this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || !isCountRequired(this.parent)) {\n getValue('observer', this).options.debounceEvent = false;\n this.observers = new TreeInterSectionObserver(getValue('observer', this).element, getValue('observer', this).options);\n this.contents = this.getPanel().firstChild;\n }\n };\n VirtualTreeContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (this.isRemoteExpand) {\n this.isRemoteExpand = false;\n return this.preTranslate;\n }\n else {\n this.preTranslate = _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n }\n else {\n return _super.prototype.getTranslateY.call(this, sTop, cHeight, info, isOnenter);\n }\n };\n VirtualTreeContentRenderer.prototype.dataBoundEvent = function () {\n var dataBoundEve = 'dataBound';\n var initialRowTop = 'initialRowTop';\n if (this.parent.getRows().length && !this[initialRowTop] && !isNullOrUndefined(this.parent.getRowByIndex(0))) {\n var rowTop = this.parent.getRowByIndex(0).getBoundingClientRect().top;\n var gridTop = this.parent.element.getBoundingClientRect().top;\n if (rowTop > 0) {\n this[initialRowTop] = this.parent.getRowByIndex(0).getBoundingClientRect().top - gridTop;\n }\n else {\n this[initialRowTop] = this.content.getBoundingClientRect().top -\n this.parent.getRowByIndex(0).getBoundingClientRect().height;\n }\n }\n _super.prototype[dataBoundEve].call(this);\n };\n VirtualTreeContentRenderer.prototype.rowSelectedEvent = function (args) {\n var rowSelected = 'rowSelected';\n _super.prototype[rowSelected].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectVirtualRow = function (args) {\n if (this.parent.isEdit) {\n return;\n }\n var selectVirtualRow = 'selectVirtualRow';\n var containerRect = 'containerRect';\n if (isNullOrUndefined(this.observer[containerRect])) {\n this.observer[containerRect] = this.observers[containerRect];\n }\n if (isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule) || args.selectedIndex !== 0 ||\n isNullOrUndefined(this.parent['clipboardModule'].treeGridParent.editModule['addRowIndex'])) {\n _super.prototype[selectVirtualRow].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.refreshCell = function (rowObj) {\n rowObj.cells = this.generateCells();\n };\n VirtualTreeContentRenderer.prototype.generateCells = function () {\n var cells = [];\n for (var i = 0; i < this.parent.columns.length; i++) {\n cells.push(this.generateCell(this.parent.columns[i]));\n }\n return cells;\n };\n VirtualTreeContentRenderer.prototype.generateCell = function (col, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': col.visible,\n 'isDataCell': !isNullOrUndefined(col.field || col.template),\n 'isTemplate': !isNullOrUndefined(col.template),\n 'rowID': rowId,\n 'column': col,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': col.commands,\n 'isForeignKey': col.isForeignColumn && col.isForeignColumn(),\n 'foreignKeyData': col.isForeignColumn && col.isForeignColumn() && getValue(col.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n opt.index = oIndex;\n }\n return new Cell(opt);\n };\n VirtualTreeContentRenderer.prototype.beginEdit = function (e) {\n var selector = '.e-row[aria-rowindex=\"' + e.index + '\"]';\n var index = this.parent.getContent().querySelector(selector).rowIndex;\n var rowData = this.parent.getCurrentViewRecords()[index];\n e.data = rowData;\n };\n VirtualTreeContentRenderer.prototype.beginAdd = function (args) {\n var addAction = 'addActionBegin';\n var isAdd = 'isAdd';\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n var rows = this.parent.getRows();\n var firstAriaIndex = rows.length ? +rows[0].getAttribute('aria-rowindex') : 0;\n var lastAriaIndex = rows.length ? +rows[rows.length - 1].getAttribute('aria-rowindex') : 0;\n var withInRange = this.parent.selectedRowIndex >= firstAriaIndex && this.parent.selectedRowIndex <= lastAriaIndex;\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n this[isAdd] = true;\n }\n if (this.rowPosition === 'Top' || this.rowPosition === 'Bottom' ||\n ((!this.addRowIndex || this.addRowIndex === -1) && (this.parent.selectedRowIndex === -1 || !withInRange))) {\n _super.prototype[addAction].call(this, args);\n }\n };\n VirtualTreeContentRenderer.prototype.restoreEditState = function () {\n var restoreEdit = 'restoreEdit';\n _super.prototype[restoreEdit].call(this);\n };\n VirtualTreeContentRenderer.prototype.resetIseditValue = function () {\n var resetIsEdit = 'resetIsedit';\n var isAdd = 'isAdd';\n this.parent.notify('reset-edit-props', {});\n if ((this.rowPosition === 'Top' || this.rowPosition === 'Bottom') && this[isAdd]) {\n _super.prototype[resetIsEdit].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.virtualEditSuccess = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && content.querySelector('.e-addedrow')) {\n this.recordAdded = true;\n }\n };\n VirtualTreeContentRenderer.prototype.cancelEdit = function (args) {\n var editCancel = 'editCancel';\n _super.prototype[editCancel].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.toSelectRowOnContextOpen = function (args) {\n var selectRowOnContextOpen = 'selectRowOnContextOpen';\n _super.prototype[selectRowOnContextOpen].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.restoreNewRow = function () {\n var isAdd = 'isAdd';\n var content = this.parent.getContent().querySelector('.e-content');\n if (this[isAdd] && !content.querySelector('.e-addedrow')) {\n this.parent.isEdit = false;\n this.parent.addRecord();\n }\n };\n VirtualTreeContentRenderer.prototype.getData = function (data) {\n var getVirtualData = 'getVirtualData';\n _super.prototype[getVirtualData].call(this, data);\n };\n VirtualTreeContentRenderer.prototype.onActionComplete = function (args) {\n if (args.requestType === 'add') {\n var addArgs = { newRowPosition: this.rowPosition, addRowIndex: this.addRowIndex, ariaRowIndex: this.ariaRowIndex };\n this.parent.notify('get-row-position', addArgs);\n this.rowPosition = addArgs.newRowPosition;\n this.addRowIndex = addArgs.addRowIndex;\n this.ariaRowIndex = addArgs.ariaRowIndex;\n }\n var actionComplete = 'actionComplete';\n _super.prototype[actionComplete].call(this, args);\n };\n VirtualTreeContentRenderer.prototype.onEnteredAction = function () {\n var _this = this;\n return function (element, current, direction, e, isWheel, check) {\n var directVirtualRender = 'directVirtualRender';\n if (!_this.parent[directVirtualRender]) { // with this property, columns are rendered without debouncing on horizontal scroll.\n var preventEvent = 'preventEvent';\n if (Browser.isIE && !isWheel && check && !_this[preventEvent]) {\n _this.parent.showSpinner();\n }\n var xAxis = current.axis === 'X';\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0]\n - 1);\n if (xAxis) {\n var idx = Object.keys(_this.vgenerator.cOffsets).length - _this.prevInfo.columnIndexes.length;\n var maxLeft = _this.vgenerator.cOffsets[idx - 1];\n x = x > maxLeft ? maxLeft : x; //TODO: This fix horizontal scrollbar jumping issue in column virtualization.\n }\n _this.virtualEle.adjustTable(x, _this.translateY);\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n }\n };\n };\n VirtualTreeContentRenderer.prototype.scrollListeners = function (scrollArgs) {\n var info = scrollArgs.sentinel;\n var outBuffer = this.parent.pageSettings.pageSize - Math.ceil(this.parent.pageSettings.pageSize / 2);\n var content = this.parent.getContent().querySelector('.e-content');\n var scrollHeight = outBuffer * this.parent.getRowHeight();\n var upScroll = (scrollArgs.offset.top - this.translateY) < 0;\n var downScroll = Math.ceil(scrollArgs.offset.top - this.translateY) >= scrollHeight;\n var selectedRowIndex = 'selectedRowIndex';\n if (upScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var vHeight = +(this.parent.height.toString().indexOf('%') < 0 ? this.parent.height :\n this.parent.element.getBoundingClientRect().height);\n var index = (~~(content.scrollTop / this.parent.getRowHeight())\n + Math.ceil(vHeight / this.parent.getRowHeight()))\n - this.parent.pageSettings.pageSize;\n index = (index > 0) ? index : 0;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 && index !== this[selectedRowIndex]) {\n index = this[selectedRowIndex];\n }\n this.startIndex = index;\n this.endIndex = index + this.parent.pageSettings.pageSize;\n if (this.endIndex > this.totalRecords) {\n var lastInx = this.totalRecords - 1;\n var remains = this.endIndex % lastInx;\n this.endIndex = lastInx;\n this.startIndex = (this.startIndex - remains) < 0 ? 0 : (this.startIndex - remains);\n }\n //var firsttdinx = parseInt(this.parent.getContent().querySelector('.e-content td').getAttribute('index'), 0);\n var rowPt = Math.ceil(scrollArgs.offset.top / this.parent.getRowHeight());\n rowPt = rowPt % this.parent.pageSettings.pageSize;\n var firsttdinx = 0;\n if (!isNullOrUndefined(this.parent.getRows()[rowPt]) &&\n !isNullOrUndefined(this.parent.getContent().querySelectorAll('.e-content tr')[rowPt])) {\n var attr = this.parent.getContent().querySelectorAll('.e-content tr')[rowPt]\n .querySelector('td').getAttribute('index');\n firsttdinx = +attr; // this.parent.getContent().querySelector('.e-content tr').getAttribute('aria-rowindex');\n }\n if (firsttdinx === 0) {\n this.translateY = scrollArgs.offset.top;\n }\n else {\n var height = this.parent.getRowHeight();\n this.translateY = (scrollArgs.offset.top - (outBuffer * height) > 0) ?\n scrollArgs.offset.top - (outBuffer * height) + 10 : 0;\n }\n }\n else if (downScroll && (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left')) {\n var nextSetResIndex = ~~(content.scrollTop / this.parent.getRowHeight());\n var isLastBlock = (this[selectedRowIndex] + this.parent.pageSettings.pageSize) < this.totalRecords ? false : true;\n if (!isNullOrUndefined(this[selectedRowIndex]) && this[selectedRowIndex] !== -1 &&\n nextSetResIndex !== this[selectedRowIndex] && !isLastBlock) {\n nextSetResIndex = this[selectedRowIndex];\n }\n var lastIndex = nextSetResIndex + this.parent.pageSettings.pageSize;\n if (lastIndex > this.totalRecords) {\n lastIndex = nextSetResIndex +\n (this.totalRecords - nextSetResIndex);\n }\n this.startIndex = !isLastBlock ? lastIndex - this.parent.pageSettings.pageSize : nextSetResIndex;\n this.endIndex = lastIndex;\n if (scrollArgs.offset.top > (this.parent.getRowHeight() * this.totalRecords)) {\n this.translateY = this.getTranslateY(scrollArgs.offset.top, content.getBoundingClientRect().height);\n }\n else {\n this.translateY = scrollArgs.offset.top;\n }\n }\n if (((downScroll && (scrollArgs.offset.top < (this.parent.getRowHeight() * this.totalRecords)))\n || (upScroll)) || (scrollArgs.direction === 'right' || scrollArgs.direction === 'left')) {\n var viewInfo = this.currentInfo = getValue('getInfoFromView', this).apply(this, [scrollArgs.direction, info, scrollArgs.offset]);\n this.previousInfo = viewInfo;\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n var page = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.setProperties({ pageSettings: { currentPage: page } }, true);\n if (scrollArgs.direction !== 'right' && scrollArgs.direction !== 'left') {\n viewInfo.event = viewInfo.event === 'refresh-virtual-block' ? 'model-changed' : viewInfo.event;\n }\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo, focusElement: scrollArgs.focusElement });\n }\n };\n VirtualTreeContentRenderer.prototype.appendContent = function (target, newChild, e) {\n if ((this.parent.dataSource instanceof DataManager && this.parent.dataSource.dataSource.url !== undefined\n && !this.parent.dataSource.dataSource.offline && this.parent.dataSource.dataSource.url !== '') || isCountRequired(this.parent)) {\n if (getValue('isExpandCollapse', e)) {\n this.isRemoteExpand = true;\n }\n _super.prototype.appendContent.call(this, target, newChild, e);\n }\n else {\n var info = e.virtualInfo.sentinelInfo && e.virtualInfo.sentinelInfo.axis === 'Y' &&\n getValue('currentInfo', this).page && getValue('currentInfo', this).page !== e.virtualInfo.page ?\n getValue('currentInfo', this) : e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width = void 0;\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, (Browser.isIE || Browser.info.name === 'edge'));\n target = this.parent.createElement('tbody');\n target.appendChild(newChild);\n var replace = 'replaceWith';\n this.getTable().querySelector('tbody')[replace](target);\n if (!this.isExpandCollapse || this.translateY === 0) {\n this.translateY = this.translateY < 0 ? 0 : this.translateY;\n getValue('virtualEle', this).adjustTable(cOffset, this.translateY);\n }\n else {\n this.isExpandCollapse = false;\n }\n setValue('prevInfo', this.previousInfo ? this.previousInfo : info, this);\n if (e.requestType === 'virtualscroll' && e.virtualInfo.sentinelInfo.axis === 'X') {\n this.parent.notify(events.autoCol, {});\n }\n var focusCell = 'focusCell';\n var restoreAdd = 'restoreAdd';\n var ensureSelectedRowPosition = 'ensureSelectedRowPosition';\n _super.prototype[focusCell].call(this, e);\n var isAdd = 'isAdd';\n if (this[isAdd] && !this.parent.getContent().querySelector('.e-content').querySelector('.e-addedrow')) {\n if (!(this.rowPosition === 'Top' || this.rowPosition === 'Bottom')) {\n if (this.ariaRowIndex >= this.startIndex) {\n this.restoreNewRow();\n }\n else if (this.addRowIndex && this.addRowIndex > -1) {\n this[isAdd] = false;\n this.parent.isEdit = false;\n }\n }\n }\n this.restoreEditState();\n _super.prototype[restoreAdd].call(this);\n _super.prototype[ensureSelectedRowPosition].call(this);\n }\n };\n VirtualTreeContentRenderer.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('data-ready', this.onDataReady);\n this.parent.off('content-ready', this.fn);\n this.parent.off('select-virtual-Row', this.toSelectVirtualRow);\n this.parent.off('dataBound', this.dataBoundEvent);\n this.parent.off('rowSelected', this.rowSelectedEvent);\n this.parent.off(events.virtualActionArgs, this.virtualOtherAction);\n this.parent.off(events.indexModifier, this.indexModifier);\n this.parent.off('virtual-scroll-edit-action-begin', this.beginEdit);\n this.parent.off('virtual-scroll-add-action-begin', this.beginAdd);\n this.parent.off('virtual-scroll-edit-success', this.virtualEditSuccess);\n this.parent.off('edit-reset', this.resetIseditValue);\n this.parent.off('get-virtual-data', this.getData);\n this.parent.off('virtual-scroll-edit-cancel', this.cancelEdit);\n this.parent.off('select-row-on-context-open', this.toSelectRowOnContextOpen);\n this.parent.off('refresh-virtual-editform-cells', this.refreshCell);\n this.parent.off('virtaul-cell-focus', this.cellFocus);\n };\n return VirtualTreeContentRenderer;\n}(VirtualContentRenderer));\nexport { VirtualTreeContentRenderer };\nvar TreeInterSectionObserver = /** @class */ (function (_super) {\n __extends(TreeInterSectionObserver, _super);\n function TreeInterSectionObserver() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isWheeling = false;\n _this.newPos = 0;\n _this.lastPos = 0;\n _this.timer = 0;\n return _this;\n }\n TreeInterSectionObserver.prototype.observes = function (callback, onEnterCallback) {\n var containerRect = 'containerRect';\n _super.prototype[containerRect] = getValue('options', this).container.getBoundingClientRect();\n EventHandler.add(getValue('options', this).container, 'scroll', this.virtualScrollHandlers(callback, onEnterCallback), this);\n };\n TreeInterSectionObserver.prototype.clear = function () {\n this.lastPos = null;\n };\n TreeInterSectionObserver.prototype.virtualScrollHandlers = function (callback, onEnterCallback) {\n var _this = this;\n var delay = Browser.info.name === 'chrome' ? 200 : 100;\n var options = 'options';\n var movableEle = 'movableEle';\n var element = 'element';\n var fromWheel = 'fromWheel';\n var debounced100 = debounce(callback, delay);\n var debounced50 = debounce(callback, 50);\n this[options].prevTop = this[options].prevLeft = 0;\n return function (e) {\n var top = _this[options].movableContainer ? _this[options].container.scrollTop : e.target.scrollTop;\n var left = _this[options].movableContainer ? _this[options].scrollbar.scrollLeft : e.target.scrollLeft;\n var direction = _this[options].prevTop < top ? 'down' : 'up';\n direction = _this[options].prevLeft === left ? direction : _this[options].prevLeft < left ? 'right' : 'left';\n _this[options].prevTop = top;\n _this[options].prevLeft = left;\n var current = _this.sentinelInfo[direction];\n var delta = 0;\n _this.newPos = top;\n if (_this.lastPos != null) { // && newPos < maxScroll\n delta = _this.newPos - _this.lastPos;\n }\n _this.lastPos = _this.newPos;\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n _this.timer = setTimeout(_this.clear, 0);\n if ((delta > 100 || delta < -100) && (e && e.preventDefault)) {\n e.returnValue = false;\n e.preventDefault();\n }\n if (_this[options].axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered && current.axis === 'X') {\n if (_this[movableEle] && (direction === 'right' || direction === 'left')) {\n onEnterCallback(_this[movableEle], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n else {\n onEnterCallback(_this[element], current, direction, { top: top, left: left }, _this[fromWheel], check);\n }\n }\n if (check) {\n var fn = debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n else {\n callback({ direction: direction, sentinel: current, offset: { top: top, left: left },\n focusElement: document.activeElement });\n }\n }\n _this[fromWheel] = false;\n };\n };\n return TreeInterSectionObserver;\n}(InterSectionObserver));\nexport { TreeInterSectionObserver };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Grid, VirtualScroll as GridVirtualScroll } from '@syncfusion/ej2-grids';\nimport { RenderType } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { getExpandStatus } from '../utils';\nimport { VirtualTreeContentRenderer } from '../renderer/virtual-tree-content-render';\nimport { VirtualHeaderRenderer } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid Virtual Scroll module will handle Virtualization\n *\n * @hidden\n */\nvar VirtualScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function VirtualScroll(parent) {\n this.prevstartIndex = -1;\n this.prevendIndex = -1;\n this.parent = parent;\n Grid.Inject(TreeVirtual);\n this.addEventListener();\n }\n VirtualScroll.prototype.returnVisualData = function (args) {\n args.data = this.visualData;\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns VirtualScroll module name\n */\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds, this);\n this.parent.on(events.pagingActions, this.virtualPageAction, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandVirtualchilds);\n this.parent.off(events.pagingActions, this.virtualPageAction);\n this.parent.off(events.destroy, this.destroy);\n };\n VirtualScroll.prototype.collapseExpandVirtualchilds = function (row) {\n this.parent.grid.notify(events.virtualActionArgs, { isExpandCollapse: true });\n this.expandCollapseRec = row.record;\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n if (this.parent.enableVirtualization && this.parent.selectionSettings.mode === 'Cell' ||\n this.parent.selectionSettings.mode === 'Row' && !this.parent.selectionSettings.persistSelection) {\n this.parent.grid.clearSelection();\n }\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n VirtualScroll.prototype.virtualPageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var parents = dm.executeLocal(new Query().where(expanded));\n var visualData = parents.filter(function (e) {\n return getExpandStatus(_this.parent, e, parents);\n });\n this.visualData = visualData;\n this.parent.grid.notify(events.dataListener, { data: visualData });\n var counts = { startIndex: -1, endIndex: -1, count: pageingDetails.count };\n this.parent.grid.notify(events.indexModifier, counts);\n var startIndex = counts.startIndex;\n var endIndex = counts.endIndex;\n pageingDetails.count = visualData.length;\n if (startIndex === -1 && endIndex === -1) {\n var query = new Query();\n var size = this.parent.grid.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n var skip = size * (current - 1);\n query = query.skip(skip).take(size);\n dm.dataSource.json = visualData;\n pageingDetails.result = dm.executeLocal(query);\n }\n else {\n var requestType = pageingDetails.actionArgs.requestType;\n if (requestType === 'filtering' || requestType === 'collapseAll' || requestType === 'searching' ||\n (requestType === 'refresh' && this.parent.enableCollapseAll && endIndex > visualData.length)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.getContent().firstElementChild.scrollTop = 0;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n //if ((this.prevendIndex !== -1 && this.prevstartIndex !== -1) &&\n //this.prevendIndex === endIndex && this.prevstartIndex === startIndex) {\n if (!isNullOrUndefined(this.expandCollapseRec) && (pageingDetails.actionArgs.requestType === 'virtualscroll' ||\n (pageingDetails.actionArgs.requestType === 'refresh' && startIndex !== this.prevstartIndex)) &&\n (startIndex < this.parent.getRows().length && endIndex <= startIndex + this.parent.getRows().length)) {\n startIndex = 0;\n }\n if (!isNullOrUndefined(this.expandCollapseRec)) {\n var resourceCount = this.parent.getRows();\n var sIndex = visualData.indexOf(this.expandCollapseRec);\n var tempdata = visualData.slice(sIndex, sIndex + resourceCount.length);\n if (tempdata.length < resourceCount.length && sIndex >= 0 && startIndex !== 0) {\n sIndex = visualData.length - resourceCount.length;\n sIndex = sIndex > 0 ? sIndex : 0;\n startIndex = sIndex;\n endIndex = visualData.length;\n }\n else if (getValue('isCollapseAll', this.parent)) {\n startIndex = 0;\n endIndex = this.parent.grid.pageSettings.pageSize - 1;\n this.parent.grid.notify(events.virtualActionArgs, { setTop: true });\n }\n }\n //}\n if ((this.parent.enableCollapseAll || this.parent.expandStateMapping) && !isNullOrUndefined(this.expandCollapseRec)) {\n if (pageingDetails.count < this.parent.getRows()[0].getBoundingClientRect().height) {\n startIndex = 0;\n }\n else if (!this.parent['isExpandAll']) {\n startIndex = this.prevstartIndex === -1 ? 0 : this.prevstartIndex;\n }\n }\n this.expandCollapseRec = null;\n pageingDetails.result = visualData.slice(startIndex, endIndex);\n this.prevstartIndex = startIndex;\n this.prevendIndex = endIndex;\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * To destroy the virtualScroll module\n *\n * @returns {void}\n * @hidden\n */\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\nvar TreeVirtual = /** @class */ (function (_super) {\n __extends(TreeVirtual, _super);\n function TreeVirtual(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n getValue('parent', _this).off('initial-load', getValue('instantiateRenderer', _this), _this);\n getValue('parent', _this).on('initial-load', _this.instantiateRenderers, _this);\n return _this;\n }\n TreeVirtual.prototype.getModuleName = function () {\n return 'treeVirtualScroll';\n };\n TreeVirtual.prototype.instantiateRenderers = function () {\n var parentGrid = getValue('parent', this);\n getValue('parent', this).log(['limitation', 'virtual_height'], 'virtualization');\n var renderer = getValue('locator', this).getService('rendererFactory');\n if (parentGrid.enableColumnVirtualization) {\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Header, new VirtualHeaderRenderer(getValue('parent', this), getValue('locator', this))]);\n }\n getValue('addRenderer', renderer)\n .apply(renderer, [RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this))]);\n //renderer.addRenderer(RenderType.Content, new VirtualTreeContentRenderer(getValue('parent', this), getValue('locator', this)));\n this.ensurePageSize();\n };\n TreeVirtual.prototype.ensurePageSize = function () {\n var parentGrid = getValue('parent', this);\n var rowHeight = parentGrid.getRowHeight();\n if (!isNullOrUndefined(parentGrid.height) && typeof (parentGrid.height) === 'string' && parentGrid.height.indexOf('%') !== -1) {\n parentGrid.element.style.height = parentGrid.height;\n }\n var vHeight = parentGrid.height.toString().indexOf('%') < 0 ? parentGrid.height :\n parentGrid.element.getBoundingClientRect().height;\n var blockSize = ~~(vHeight / rowHeight);\n var height = blockSize * 2;\n var size = parentGrid.pageSettings.pageSize;\n parentGrid.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n return TreeVirtual;\n}(GridVirtualScroll));\nexport { TreeVirtual };\n","import { Grid, ColumnChooser as GridColumnChooser } from '@syncfusion/ej2-grids';\n/**\n * TreeGrid ColumnChooser module\n *\n * @hidden\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {TreeGrid} parent - Tree Grid instance.\n */\n function ColumnChooser(parent) {\n Grid.Inject(GridColumnChooser);\n this.parent = parent;\n }\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n *\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @returns {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n return this.parent.grid.columnChooserModule.openColumnChooser(X, Y);\n };\n /**\n * Destroys the openColumnChooser.\n *\n * @function destroy\n * @returns {void}\n */\n ColumnChooser.prototype.destroy = function () {\n //this.parent.grid.ColumnChooserModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} Returns ColumnChooser module name\n */\n ColumnChooser.prototype.getModuleName = function () {\n return 'ColumnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Grid, InfiniteScroll as GridInfiniteScroll } from '@syncfusion/ej2-grids';\nimport { RowRenderer, resetRowIndex } from '@syncfusion/ej2-grids';\nimport { getValue, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nimport { findChildrenRecords, getExpandStatus } from '../utils';\n/**\n * TreeGrid Infinite Scroll module will handle Infinite Scrolling.\n *\n * @hidden\n */\nvar InfiniteScroll = /** @class */ (function () {\n /**\n * Constructor for VirtualScroll module\n *\n * @param {TreeGrid} parent - Tree Grid instance\n */\n function InfiniteScroll(parent) {\n this.parent = parent;\n Grid.Inject(GridInfiniteScroll);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n *\n * @private\n * @returns {string} - Returns Logger module name\n */\n InfiniteScroll.prototype.getModuleName = function () {\n return 'infiniteScroll';\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.addEventListener = function () {\n this.parent.on(events.pagingActions, this.infinitePageAction, this);\n this.parent.on('infinite-remote-expand', this.infiniteRemoteExpand, this);\n this.parent.grid.on('delete-complete', this.infiniteDeleteHandler, this);\n this.parent.grid.on('infinite-edit-handler', this.infiniteEditHandler, this);\n this.parent.grid.on('infinite-crud-cancel', this.createRows, this);\n this.parent.grid.on('content-ready', this.contentready, this);\n this.parent.on(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds, this);\n };\n /**\n * @hidden\n * @returns {void}\n */\n InfiniteScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('infinite-remote-expand', this.infiniteRemoteExpand);\n this.parent.grid.off('delete-complete', this.infiniteDeleteHandler);\n this.parent.grid.off('infinite-edit-handler', this.infiniteEditHandler);\n this.parent.off(events.pagingActions, this.infinitePageAction);\n this.parent.grid.off('infinite-crud-cancel', this.createRows);\n this.parent.grid.off('content-ready', this.contentready);\n this.parent.off(events.localPagedExpandCollapse, this.collapseExpandInfinitechilds);\n };\n /**\n * Handles the Expand Collapse action for Remote data with infinite scrolling.\n *\n * @param {{ index: number, childData: ITreeData[] }} args - expanded row index and its child data\n * @param { number } args.index - expanded row index\n * @param { ITreeData[] } args.childData - child data of expanded row\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteRemoteExpand = function (args) {\n var rowObjects = this.parent.grid.getRowsObject();\n var locator = 'serviceLocator';\n var generateRows = 'generateRows';\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var rows = this.parent.getRows();\n var position = args.index === rows.length - 1 ? 'after' : 'before';\n var cols = this.parent.grid.getColumns();\n var childRowObjects = this.parent.grid.infiniteScrollModule[generateRows](args.childData, args);\n var childRowElements = [];\n for (var i = 0; i < childRowObjects.length; i++) {\n childRowElements.push(rowRenderer.render(childRowObjects[i], cols));\n }\n rowObjects.splice.apply(rowObjects, [args.index + 1, 0].concat(childRowObjects));\n for (var i = 0; i < childRowElements.length; i++) {\n if (position === 'after') {\n rows[args.index + i][position](childRowElements[i]);\n }\n else {\n rows[args.index + i + 1][position](childRowElements[i]);\n }\n rows.splice(args.index + 1 + i, 0, childRowElements[i]);\n }\n resetRowIndex(this.parent.grid, this.parent.grid.getRowsObject(), this.parent.grid.getRows(), 0);\n };\n /**\n * Resetted the row index for expand collapse action for cache support.\n *\n * @returns {void}\n */\n InfiniteScroll.prototype.contentready = function () {\n if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(this.parent.editModule)) {\n var updateIndex = 'updateIndex';\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getRows(), this.parent.getCurrentViewRecords());\n if (this.parent.getFrozenColumns()) {\n this.parent.editModule[updateIndex](this.parent.grid.dataSource, this.parent.getMovableDataRows(), this.parent.getCurrentViewRecords());\n }\n }\n };\n InfiniteScroll.prototype.collapseExpandInfinitechilds = function (row) {\n row.record.expanded = row.action === 'collapse' ? false : true;\n var ret = {\n result: this.parent.flatData,\n row: row.row,\n action: row.action,\n record: row.record,\n count: this.parent.flatData.length\n };\n var requestType = getValue('isCollapseAll', this.parent) ? 'collapseAll' : 'refresh';\n getValue('grid.renderModule', this.parent).dataManagerSuccess(ret, { requestType: requestType });\n };\n /**\n * Handles the page query for Data operations and CRUD actions.\n *\n * @param {{ result: ITreeData[], count: number, actionArgs: object }} pageingDetails - data, its count and action details\n * @param {ITreeData[]} pageingDetails.result - data on scroll action\n * @param {number} pageingDetails.count - data count on scroll action\n * @param {Object} pageingDetails.actionArgs - scroll action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infinitePageAction = function (pageingDetails) {\n var _this = this;\n var dm = new DataManager(pageingDetails.result);\n var expanded = new Predicate('expanded', 'notequal', null).or('expanded', 'notequal', undefined);\n var infiniteParents = dm.executeLocal(new Query().where(expanded));\n var visualData = infiniteParents.filter(function (e) {\n return getExpandStatus(_this.parent, e, infiniteParents);\n });\n var actionArgs = getValue('actionArgs', pageingDetails.actionArgs);\n var actions = getValue('actions', this.parent.grid.infiniteScrollModule);\n var initial = actions.some(function (value) { return value === actionArgs.requestType; });\n var initialRender = initial ? true : this.parent.initialRender ? true : false;\n this.visualData = visualData;\n pageingDetails.count = visualData.length;\n if (getValue('isPrinting', pageingDetails.actionArgs)) {\n pageingDetails.result = visualData;\n }\n else {\n var query = new Query();\n var isCache = this.parent.infiniteScrollSettings.enableCache;\n if (isCache && this.parent.infiniteScrollSettings.initialBlocks > this.parent.infiniteScrollSettings.maxBlocks) {\n this.parent.infiniteScrollSettings.initialBlocks = this.parent.infiniteScrollSettings.maxBlocks;\n }\n var size = initialRender ?\n this.parent.pageSettings.pageSize * this.parent.infiniteScrollSettings.initialBlocks :\n this.parent.pageSettings.pageSize;\n var current = this.parent.grid.pageSettings.currentPage;\n if (!isNullOrUndefined(actionArgs)) {\n var lastIndex = getValue('lastIndex', this.parent.grid.infiniteScrollModule);\n var firstIndex = getValue('firstIndex', this.parent.grid.infiniteScrollModule);\n if (!isCache && actionArgs.requestType === 'delete') {\n var skip = lastIndex - actionArgs.data.length + 1;\n var take = actionArgs.data.length;\n query = query.skip(skip).take(take);\n }\n else if (isCache && actionArgs.requestType === 'delete' ||\n (actionArgs.requestType === 'save' && actionArgs.action === 'add')) {\n query = query.skip(firstIndex);\n query = query.take(this.parent.infiniteScrollSettings.initialBlocks * this.parent.pageSettings.pageSize);\n }\n else {\n if ((pageingDetails.actionArgs['action'] === 'expand' || pageingDetails.actionArgs['action'] === 'collapse') && this.parent.grid.pageSettings.currentPage !== 1) {\n current = 1;\n size = this.parent.pageSettings.pageSize * this.parent.grid.pageSettings.currentPage;\n }\n query = query.page(current, size);\n }\n }\n else {\n query = query.page(current, size);\n }\n dm.dataSource.json = visualData;\n if (!isCache && !isNullOrUndefined(actionArgs) && actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n pageingDetails.result = [actionArgs.data];\n }\n else {\n pageingDetails.result = dm.executeLocal(query);\n }\n }\n this.parent.notify('updateAction', pageingDetails);\n };\n /**\n * Handles the currentviewdata for delete operation.\n *\n * @param {{ e: InfiniteScrollArgs, result: Object[] }} args - Scroller and data details\n * @param {InfiniteScrollArgs} args.e - scroller details while CRUD\n * @param {Object[]} args.result - data details while CRUD\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteEditHandler = function (args) {\n var infiniteData = 'infiniteCurrentViewData';\n var infiniteCurrentViewData = this.parent.grid.infiniteScrollModule[infiniteData];\n var keys = Object.keys(infiniteCurrentViewData);\n if (args.e.requestType === 'delete' && args.result.length > 1) {\n for (var i = 1; i < args.result.length; i++) {\n infiniteCurrentViewData[keys[keys.length - 1]].push(args.result[i]);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {ActionEventArgs} args - crud action details\n * @returns {void}\n */\n InfiniteScroll.prototype.infiniteDeleteHandler = function (args) {\n if (args.requestType === 'delete') {\n var rows = this.parent.grid.getRowsObject();\n var rowElms = this.parent.getRows();\n var data = args.data instanceof Array ? args.data : [args.data];\n var keyField = this.parent.grid.getPrimaryKeyFieldNames()[0];\n this.removeRows(rowElms, rows, data, keyField, true);\n if (this.parent.getFrozenColumns() > 0) {\n var mRows = this.parent.grid.getMovableRowsObject();\n var mRowElms = this.parent.grid.getMovableRows();\n this.removeRows(mRowElms, mRows, data, keyField);\n }\n }\n };\n /**\n * Handles the row objects for delete operation.\n *\n * @param {Element[]} rowElms - row elements\n * @param {Row<Column>[]} rows - Row object collection\n * @param {Object[]} data - data collection\n * @param {string} keyField - primary key name\n * @param { boolean} isFrozen - Specifies whether frozen column enabled\n * @returns {void}\n */\n InfiniteScroll.prototype.removeRows = function (rowElms, rows, data, keyField, isFrozen) {\n var _this = this;\n var resetInfiniteCurrentViewData = 'resetInfiniteCurrentViewData';\n var _loop_1 = function (i) {\n rows.filter(function (e, index) {\n if (e.data[keyField] === data[i][keyField]) {\n if (isFrozen) {\n var page = Math.ceil((index + 1) / _this.parent.grid.pageSettings.pageSize);\n _this.parent.grid.infiniteScrollModule[resetInfiniteCurrentViewData](page, index);\n }\n rows.splice(index, 1);\n remove(rowElms[index]);\n rowElms.splice(index, 1);\n }\n });\n };\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * Handles the row objects for Add operation.\n */\n InfiniteScroll.prototype.createRows = function (eventArgs) {\n var locator = 'serviceLocator';\n var actionArgs = eventArgs.args.e;\n var row = eventArgs.row;\n var serviceLocator = this.parent.grid.infiniteScrollModule[locator];\n var rowRenderer = new RowRenderer(serviceLocator, null, this.parent.grid);\n var tbody;\n var currentData = this.parent.getCurrentViewRecords();\n var currentRows = eventArgs.isMovable ? this.parent.grid.getMovableRows()\n : this.parent.grid.getDataRows();\n if (eventArgs.isFrozenRight) {\n tbody = this.parent.element.querySelector('.e-frozen-right-content').querySelector('tbody');\n }\n else {\n tbody = !this.parent.grid.isFrozenGrid() ? this.parent.getContent().querySelector('tbody') : eventArgs.isMovable\n ? this.parent.grid.getMovableVirtualContent().querySelector('tbody')\n : this.parent.grid.getFrozenVirtualContent().querySelector('tbody');\n }\n if (this.parent.frozenRows) {\n tbody = eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType !== 'add'\n || !eventArgs.isFrozenRows && this.parent.grid.infiniteScrollModule.requestType === 'add'\n ? !this.parent.grid.isFrozenGrid() ? this.parent.getHeaderContent().querySelector('tbody')\n : eventArgs.isMovable ? this.parent.grid.getMovableVirtualHeader().querySelector('tbody')\n : eventArgs.isFrozenRight ? this.parent.element.querySelector('.e-frozen-right-header').querySelector('tbody')\n : this.parent.grid.getFrozenVirtualHeader().querySelector('tbody') : tbody;\n }\n var position;\n var addRowIndex = 'addRowIndex';\n var newRowIndex = this.parent.editModule[addRowIndex];\n for (var i = 0; i < row.length; i++) {\n var newRow = rowRenderer.render(row[i], this.parent.grid.getColumns());\n if (actionArgs.requestType === 'save' && actionArgs.action === 'add') {\n if (getValue('selectedIndex', this.parent.editModule) !== -1 && this.parent.editSettings.newRowPosition !== 'Top') {\n if (this.parent.editSettings.newRowPosition === 'Below' || this.parent.editSettings.newRowPosition === 'Child') {\n position = 'after';\n newRowIndex += findChildrenRecords(currentData[newRowIndex]).length;\n if (this.parent.editSettings.newRowPosition === 'Child') {\n newRowIndex -= 1; //// for child position already child record is added in childRecords so subtracting 1\n }\n currentRows[newRowIndex][position](newRow);\n }\n else if (this.parent.editSettings.newRowPosition === 'Above') {\n position = 'before';\n currentRows[this.parent.editModule[addRowIndex]][position](newRow);\n }\n }\n else if (this.parent.editSettings.newRowPosition === 'Bottom') {\n tbody.appendChild(newRow);\n }\n else {\n tbody.insertBefore(newRow, tbody.firstElementChild);\n }\n }\n else if (actionArgs.requestType === 'delete') {\n tbody.appendChild(newRow);\n }\n }\n eventArgs.cancel = true;\n };\n /**\n * To destroy the infiniteScroll module\n *\n * @returns {void}\n * @hidden\n */\n InfiniteScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return InfiniteScroll;\n}());\nexport { InfiniteScroll };\n"],"names":["isRemoteData","parent","dataSource","DataManager","adaptor","ODataAdaptor","WebApiAdaptor","WebMethodAdaptor","CacheAdaptor","UrlAdaptor","isCountRequired","isCheckboxcolumn","i","columns","length","showCheckbox","isFilterChildHierarchy","isNullOrUndefined","grid","searchSettings","key","hierarchyMode","allowFiltering","filterSettings","findParentRecords","records","datas","len","Object","keys","getObject","push","getExpandStatus","record","parents","childParent","parentRecord","parentItem","getParentData","uniqueID","initialRender","expandStateMapping","expanded","findChildrenRecords","hasChildRecords","childRecords","concat","isOffline","dm","ready","extendArray","array","obj","objArr","j","getPlainData","value","index","level","taskData","requireFilter","isHidden","el","style","window","getComputedStyle","display","visibility","editAction","details","control","isSelfReference","addRowIndex","selectedIndex","columnName","addRowRecord","batchChanges","action","getPrimaryKeyFieldNames","treeData","json","modifiedData","originalData","isSkip","editSettings","mode","editModule","getBatchChanges","addAct","currentViewRecords","getCurrentViewRecords","extend","newRowPosition","unshift","primaryKeys","currentdata","addAction","Array","k","_loop_1","prototype","hasOwnProperty","call","editedData","parentIdMapping","idMapping","splice","childMapping","updateParentRow","currentData_1","parentData","flatData","filter","e","p","enableImmutableMode","removeChildRecords","isChildAll","editRowIndex","updateCurrentViewData","child","index_1","currentRecords","map","enableVirtualization","getValue","parentUniqueID","sortSettings","indexOf","data","setRowData","row","getRowByIndex","getRows","getRowIndexByPrimaryKey","movableRow","frozenRows","getFrozenColumns","getMovableRowByIndex","index_2","treeColumnIndex","allowRowDragAndDrop","renderModule","cellRender","cell","cells","column","getColumns","requestType","RowModifier","Column","options","this","allowEditing","edit","disableHtmlEncode","allowReordering","showColumnMenu","allowSorting","allowResizing","merge","setProperties","clipboardModule","uid","__extends","extendStatics","d","b","setPrototypeOf","__proto__","__","constructor","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Predicate","_super","apply","Property","ChildProperty","FilterSettings","Collection","TextWrapSettings","DOC_URL","BASE_DOC_URL","IsRowDDEnabled","Logger","Grid","Inject","GridLogger","getModuleName","log","types","args","type","item","detailLists","cOp","check","success","message","generateMessage","replace","gridurl","substring","treeGridObj","dataStateChange","console","logType","treeLog","treeGrid","isPrimaryKey","treeGridDetails","mapping_fields_missing","opt","ERROR","rowDataBound","queryCellInfo","beforeDataBound","actionBegin","actionComplete","rowSelected","checkboxChange","rowDeselected","toolbarClick","beforeExcelExport","beforePdfExport","collapsed","remoteExpand","localPagedExpandCollapse","pagingActions","printGridInit","contextMenuOpen","contextMenuClick","crudAction","beginEdit","beginAdd","recordDoubleClick","cellSave","cellSaved","cellEdit","batchDelete","batchCancel","batchAdd","beforeBatchDelete","beforeBatchAdd","beforeBatchSave","batchSave","keyPressed","doubleTap","virtualActionArgs","dataListener","indexModifier","beforeStartEdit","beforeBatchCancel","detailDataBound","rowDragStartHelper","rowsAdd","rowsRemove","rowdraging","rowDropped","TreeClipboard","_this","treeCopyContent","copiedUniqueIdCollection","treeGridParent","setCopyData","withHeader","copyContent","getSelection","toString","clipBoardTextArea","rows","selectionSettings","selectedIndexes","getSelectedRowIndexes","sort","a","classList","contains","slice","querySelectorAll","uniqueid","getSelectedRecords","copyHierarchyMode","parentContentData","childContentData","headerTextArray","getVisibleColumns","headerText","cancel","trigger","Browser","userAgent","match","setSelectionRange","select","treeLevel","copy","paste","rowIndex","colIndex","destroy","childData","GridClipboard","Selection","selectedItems","filteredList","addEventListener","on","headerCheckbox","columnCheckbox","updateGridActions","checkboxSelection","removeEventListener","isDestroyed","off","checkBox","checkWrap","parentsUntil","querySelector","closest","selectCheckboxes","triggerChkChangeEvent","nextElementSibling","autoCheckHierarchy","checkBoxvalue","headerSelection","checkState","rowElement","checked","rowData","getCheckedRecords","events.checkboxChange","getCheckboxcolumnIndex","mappingUid","columnIndex","col","headerCelllength","getHeaderContent","getAttribute","headerElement","rowChkBox","createElement","className","attrs","createCheckBox","label","add","insertBefore","cloneNode","firstChild","renderColumnCheckbox","setAttribute","checkboxState","allowTextWrap","width","checkbox","removeClass","container","containerELe","spanEle","innerHTML","divEle","appendChild","rowIndexes","flatRecord","traverSelection","ischildItem","updateSelectedItems","updateParentSelection","filterModule","filteredResult","getFilteredChildRecords","count","isSummaryRow","indeter","checkChildRecords","checkBoxRecord","checkAll","filterResult","rec","currentRecord","checkedRecord","recordIndex","checkboxRecord","tr","movableTr","getMovableDataRows","checkedIndex","checkBoxclass","childLength","updatedData","forEach","getCheckedrecords","getCheckedRowIndexes","Freeze","FreezeColumn","rowExpandCollapse","dataBoundArg","dblClickHandler","frozenRightRows","movableRows","frozenrows","freeze","getFrozenLeftColumnsCount","getFrozenRightColumnsCount","getFrozenRightRows","detailrows","rData","getRowObjectFromUID","queryselector","cRow","i_1","allowEditOnDblClick","startEdit","freezeModule","addClass","element","getElementsByClassName","Print","GridPrint","events.printGridInit","printTreeGrid","printGrid","gridElement","events.queryCellInfo","events.rowDataBound","events.beforeDataBound","print","SearchSettings","SelectionSettings","Render","templateResult","columnTemplateResult","reactTemplateRender","allowPaging","pageSettings","pageSizeMode","enableCollapseAll","proxy_1","parentrec","cellElement","pad","filterLevel","totalIconsWidth","getColumnByUid","summaryRow","frozenColumns","enableColumnVirtualization","getColumnIndexByUid","emptyExpandIcon","styles","n","iconRequired","hasFilteredChildRecords","expandIcon","expand","updateTreeCell","freezerightColumns","getFrozenRightColumns","freezeLeftColumns","getFrozenLeftColumns","movableColumns","getMovableColumns","field","notify","checkboxElement","parseInt","summaryData","rowTemplate","treeColumn","templateFn","colindex","template","templateCompiler","textContent","appendChildren","children","tempID","id","portals","isReact","result","refreshReactColumnTemplateByUid","columnUid","clearTemplate","undefined","rowsObj","getRowsObject","indent","getIndentCount","cellIndex","getNormalizedColumnIndex","isDataRow","cellRenderer","CellRenderer","serviceLocator","td","getCellFromIndex","refreshTD","treecell","DataManipulation","addedRecords","parentItems","taskIds","hierarchyData","storedIndex","sortedData","isSortAction","dataResults","updateParentRemoteData","beginSorting","updateData","events.remoteExpand","collectExpandingRecs","dataProcessor","isRemote","convertToFlatData","query","Query","filterKey","params","param","where","addParams","hasChildMapping","qry","clone","queries","executeQuery","then","DataUtil","distinct","httpRequest","statusText","setValue","zerothLevelData","dataManagerSuccess","hideSpinner","convertJSONData","tempData","selfData","mappingData","executeLocal","group","groupData","items","selfReferenceUpdate","createRecords","referenceData","shift","loadChildOnDemand","getUid","Math","ceil","random","rowDetails","isChild","gridRows","getContentTable","childRecord","targetEle","childRows","parentRow","expandingTd","detailRowModule","fetchRemoteChildData","getDataModule","generateQuery","clonequries","fn","showSpinner","currentViewData","inx","haveChild","events.actionComplete","aggregates","gridQuery","aggregateQuery","summaryQuery","q","summaryModule","calculateSummaryValue","totalRecordsCount","virtualArgs","remoteVirtualAction","notifyArgs","enableInfiniteScrolling","events.expanded","contentModule","currentInfo","prevInfo","loadNext","currentPage","nextInfo","page","parentRecords","treeGridData","currentData","dataObj","isExport","expresults","exportType","isPrinting","actionArgs","actionData","actionAddArgs","primaryKeyColumnName","dataValue","isLocalData","updateAction","filterQuery","searchQuery","results","fltrQuery","srchQuery","filteredData","gridQuery_1","srtQry","srt","compFun","sortComparer","bind","direction","sortBy","sortArgs","temp","paging","printMode","actArgs","events.pagingActions","isCollapsedStatePersist","actualResults","dataResult","events.crudAction","events.batchSave","ToolbarItem","ContextMenuItems","PageSettings","AggregateColumn","intl","Internationalization","setFormatter","cultureName","format","skeleton","formatFn","getFormatFunction","getDateFormat","getNumberFormat","getFormatter","setTemplate","helper","footerTemplate","getEnumValue","CellType","Summary","compile","property","getTemplate","setPropertiesSilent","prop","AggregateRow","EditSettings","SortDescriptor","SortSettings","InfiniteScrollSettings","TreeGrid","uniqueIDCollection","uniqueIDFilterCollection","changedRecords","deletedRecords","indentOutdentAction","modifiedRecords","stackedHeader","objectEqualityChecker","old","current","isEqual","excludeKeys","Date","getTime","TreeGrid_1","TreeGridSelection","mergePersistTreeGridData","injectedModules","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","Map","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","preRender","TreeGridLocale","initProperties","defaultLocale","Above","Below","Child","AddRow","ExpandAll","CollapseAll","RowIndent","RowOutdent","l10n","L10n","locale","sortByColumn","isMultiSort","sortModule","sortColumn","clearSorting","removeSortColumn","search","searchString","autoFitColumns","fieldNames","resizeModule","updateColumnModel","reorderColumns","fromFName","toFName","localeObject","gridLocale","treeGridLocale","load","printModule","treeGridkeyActionHandler","allowKeyboard","parentTarget","summaryElement","expandAll","collapseAll","expandCollapseRequest","parentElement","findnextRowElement","selectRow","row_1","clearSelection","findPreviousRowElement","rIndex","cIndex","summaryRowElement","previousElementSibling","columnModel","isExpandAll","isCollapseAll","keyConfigs","ctrlDownArrow","ctrlUpArrow","ctrlShiftUpArrow","ctrlShiftDownArrow","downArrow","upArrow","offline","RemoteSaveAdaptor","wireEvents","EventHandler","mouseClickHandler","keyboardModule","KeyboardEvents","keyAction","eventName","tabIndex","requiredModules","modules","getGridColumns","member","toolbar","contextMenuItems","allowExcelExport","detailTemplate","allowPdfExport","showColumnChooser","extendRequiredModules","IsRowDDInjected","isIndentEnabled","allowAdding","allowDeleting","isCommandColumn","allowSelection","some","commands","commandsTemplate","unwireEvents","remove","loggerModule","render","isVue","createSpinner","dataModule","autoGenerateColumns","convertTreeData","loadGrid","rowDropSettings","targetID","addListener","gridContainer","height","gridRequiredModules","appendTo","refreshToolbarItems","renderComplete","destroyTemplateFn","toolbarElement","toolbarModule","getToolbar","indentID","outdentID","indentElement","outdentElement","afterGridRender","griddata","bindGridProperties","bindedDataSource","enableRtl","columnQueryMode","getActualProperties","pagerTemplate","infiniteScrollSettings","enableAltRow","enableHover","enableAutoFill","enableAdaptiveUI","rowHeight","gridLines","getGridToolbar","toolbarTemplate","textWrapSettings","selectedRowIndex","getContextMenu","columnMenuItems","getGridEditSettings","clipMode","templateInstance","triggerEvents","bindGridEvents","rowSelecting","isHeaderCheckboxClicked","selectionModule","selectedRowIndexes","events.rowSelected","events.rowDeselected","resizeStop","excelQueryCellInfo","pdfQueryCellInfo","checkBoxChange","pdfExportComplete","excelExportComplete","excelHeaderQueryCellInfo","pdfHeaderQueryCellInfo","dataSourceChanged","rowDeselecting","cellDeselected","cellDeselecting","columnMenuOpen","columnMenuClick","cellSelected","headerCellInfo","resizeStart","resizing","columnDrag","columnDragStart","columnDrop","beforePrint","beforeCopy","beforePaste","TreeLogger","printComplete","actionFailure","extendedGridDataBoundEvent","extendedGridEvents","extendedGridActionEvents","extendedGridEditEvents","bindGridDragEvents","bindCallBackEvents","lastRowBorder","visiblerow","isAddBorder","isPixelHeight","dataBound","updateRowTemplate","updateAltRow","req","totalRows","persistSelection","callBackPromise_1","Deferred","beforeDataBoundArgs","resolve","callBackPromise","events.toolbarClick","toolbarargs","cellSelecting","cellselectingArgs","events.beginEdit","begineditArgs","isExpandRefresh","events.dataStateChange","isContextMenuOpen","contextitems","contextMenuModule","contextMenu","events.cellSave","cellsaveArgs","events.cellSaved","promise","events.cellEdit","events.batchAdd","events.beforeBatchSave","events.beforeBatchAdd","events.batchDelete","events.beforeBatchDelete","events.batchCancel","treeColumnRowTemplate","datacount","defaultQuery","JsonAdaptor","dataManager","isQueryInvokedFromData","callBackPromise_2","events.actionBegin","updateTreeGridModel","events.beginAdd","ag","showChildSummary","refresh","selectedItem_1","selectedRecords","dropIndex","dropPosition","selectedRows","events.recordDoubleClick","events.detailDataBound","events.contextMenuClick","events.contextMenuOpen","events.rowDragStartHelper","rowDragStart","rowDrag","isEdit","events.rowdraging","rowDrop","events.rowDropped","registeredTemplate","showConfirmDialog","showDeleteConfirmDialog","allowNextRowEdit","dialog","text","getConstant","iconCss","tooltipText","Search","prefixIcon","isEmptyColumnModel","treeGridColumn","gridColumn","gridColumnCollection","_i","_a","enablePersistence","treeColumnTextAlign","textAlign","treeColumnField","onPropertyChanged","newProp","requireRefresh","properties_1","refreshColumns","allowMultiSorting","isDataSourceChanged","eventListener","renderTable","updateTreeColumnTextAlign","closeEdit","getColumnByField","treeGridElement","hasTreeGridChild","removeListener","dataBind","document","getElementById","getPersistData","keyEntity","ignoreOnPersist","currentObject","val","ignoreInArrays","addOnPersist","ignoreOnColumn","ignoreInColumn","touches","isEditCollapse","getPager","addRecord","position","saveCell","updateCell","updateRow","deleteRecord","fieldName","editCell","enableToolbarItems","isEnable","enableItems","endEdit","openColumnChooser","x","y","columnChooserModule","deleteRow","setCellValue","primaryKey","visibleRecords","getVisibleRecords","sHeight","scrollHeight","clientHeight","getContent","goToPage","pageNo","pagerModule","updateExternalMessage","iterateArrayOrObject","Columns","getColumnFieldNames","getFooterContent","getFooterContentTable","showColumns","showBy","hideColumns","hideBy","getColumnHeaderByField","getColumnHeaderByIndex","getColumnHeaderByUid","getColumnIndexByField","getVirtualColIndexByUid","isRefresh","gridColumns","mergeColumns","storedColumn","getDataRows","dRows","getHeaderTable","getRowInfo","getUidByColumnField","cols","visible","indexes","refreshUI","refreshHeader","dialogObj","targetElement","rowInfo","collapseRow","expandRow","getCollapseExpandRecords","expandingArgs","expandCollapse","expandCollapseAllChildren","collapseArgs","setHeightForFrozenContent","updateExpandStateMapping","refreshScrollOffset","collapsingArgs","events.collapsed","firstElementChild","scrollTop","getRowHeight","scrollBy","state","totalRecords","expandAtLevel","expandAction","getRecordDetails","expandByKey","expandCollapseActionByKey","isPaging","puniqueID_1","this_1","collapseAtLevel","collapseAction","collapseByKey","primaryKeyField","startIndex","expandCollapseAll","isExpandCollapseall","updateChildOnDemand","displayAction","localExpand","events.localPagedExpandCollapse","deff","data_1","length_1","rows_1","args_1","collapseRemoteChild","freezeRightRows","rows_2","getMovableRows","visibleRowCount","gridRow","rcell","arg","movablerows","rightrows","collapsingTd","collapse","expandElement","eRows","updateRowAndCellElements","updateResultModel","returnResult","filterByColumn","filterOperator","filterValue","predicate","matchCase","ignoreAccent","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","isToggle","selectRows","selectCell","getSelectedRows","getMovableCellFromIndex","getFrozenRightRowByIndex","getFrozenRightDataRows","getFrozenRightCellFromIndex","getFrozenLeftColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getMovableColumnHeaderByIndex","getMovableColumnsCount","getVisibleMovableCount","getVisibleFrozenRightCount","getVisibleFrozenLeftCount","getFrozenCount","cnt","isFrozen","getSelectedRowCellIndexes","baseModule","treeModule","reorderRows","fromIndexes","toIndex","rowDragAndDropModule","outdent","Complex","RowDropSettings","Event","NotifyPropertyChanges","Component","Reorder","GridReorder","getTreeColumn","treeIndex","updatedCols","f","Resize","GridResize","fName","RowDD","canDrop","isDraggedWithChild","hasDropItem","isaddtoBottom","GridDragDrop","getChildrecordsByParentID","Rowdraging","events.rowsAdd","rowsAdded","events.rowsRemove","rowsRemoved","tObj","dropRows","orderToIndex","dropData","totalRecord","parentrow","request","selectedItemIndex","selectedItem","selectedRow","selectedRecord","record_1","eventTrigger","updatedParent","draggedRecord","dragRecords","draggedRecord_1","dragRecords_1","deleteDragRow","refreshGridDataSource","tempDataSource","idx","droppedRecord","proxy","removeFirstrowBorder","canremove","removeLastrowBorder","isEmptyRow","islastRowIndex","updateIcon","rowEle","rowPositionHeight","addErrorElem","rowTop","toolHeight","offsetHeight","positionOffSet","getOffset","contentHeight","top","offsetTop","divide","topRowSegment","middleRowSegment","bottomRowSegment","mouseEvent","touchEvent","posy","pageY","changedTouches","isTopSegment","isMiddleRowSegment","isBottomRowSegment","removeChildBorder","removetopOrBottomBorder","addFirstrowBorder","removeErrorElem","topOrBottomBorder","addRemoveClasses","addLastRowborder","borderElem","targetRow","node","div","gridheaderEle","toolbarHeight","multiplegrid","offsetWidth","getScrollWidth","trElement","bottomborder","gridcontentEle","bottom","scrollElem","scrollWidth","Scroll","getScrollBarWidth","dragelem","ele","errorVal","content","parentNode","removeChild","spanContent","paddingLeft","dropItemSpan","dropItemLeft","left","spanLeft","errorelem","errorValue","setStyleAttribute","border","box","getBoundingClientRect","body","docElem","documentElement","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","round","cloneElement","cursor","rowIdx","ensuredropPosition","dropElement","ej2_instances","dragDropGrid","fromIndex","getTargetIdx","srcControl","targetIndex","isNaN","actualData","srcControlFlatData","actualIndex","isByMethod","draggedRecord_2","isMultipleGrid","dragLength","reverse","correctIndex","offsetParent","newParentIndex","recordIndex1","dropAtTop","getChildCount","droppedRecordIndex","updateChildRecordLevel","updateChildRecord","dropMiddle","nonRepeat_1","childRecordsLength","recordLevel","childItem","deletedRow","removeRecords","flatParentData","childIndex","removeChildItem","idz","parentIndex","deletedRecordCount","updateModifiedRecords","i_2","i_3","draggedRecords","TreeVirtualRowModelGenerator","events.dataListener","getDatas","visualData","getDataInfo","getData","generateRows","virtualInfo","info","blockIndexes","getBlockIndexes","url","checkAndResetCache","clear","cache","groups","getBlockSize","VirtualRowModelGenerator","Filter","GridFilter","isHierarchyFilter","flatFilteredData","filteredParentRecs","updatedFilteredRecord","clearFilterLevel","dataDetails","addParentRecord","ischild","checkChildExsist","parent_1","parRecord","updateParentFilteredRecord","updateFilterLevel","uniqueIDValue","childRec","isExist","parent_2","parent_3","fLevel","ExcelExport","GridExcel","updateExcelResultModel","exportRowDataBound","finalPageSetup","isCsv","Promise","isLocal","event.beforeExcelExport","customData","manipulateExportProperties","book","dtSrc","queryResult","flatsData","dataSrc","excelRow","excelrowobj","rowObj","filtercolumnlength","rowlength","excelRows","rowlevel","Boolean","expandedStatus","sublevelState","grouping","outlineLevel","isCollapsed","worksheets","pageSetup","isSummaryRowBelow","PdfExport","GridPdf","updatePdfResultModel","event.beforePdfExport","customsData","manipulatePdfProperties","flatDatas","paragraphIndent","Page","GridPage","collapseExpandPagedchilds","pageAction","primaryKeyField_1","ret","pageRoot","pagedResults","newResults","t","res","updatePageSize","pageingDetails","updateSize","gridPagerModule","pageSizes","pagerObj","pagerdropdownModule","getLocalizedLabel","pageSize","propname","skip","size","take","dm_1","or","parents_1","floor","Toolbar","tool","refreshToolbar","toolbarClickHandler","indentEle","outdentEle","selectedrow","isCheckBoxSelection","Aggregate","GridAggregate","flatChildRecords","isSort","flatRecords","summaryLength","dataLength","getChildRecordsLength","summaryRowIndex","len_1","createSummaryItem","idx_1","currentIndex","summaryParent","length_2","itemData","summary","displayColumn","keys_1","getSummaryValues","summaryColumn","single","getFormatFromType","tempObj","requiresCount","summaryKey","sumData","toLowerCase","calculateAggregate","disp","value_1","summaryformat","Sort","GridSort","flatSortedData","updateModel","createdSortedRecords","sortParams","iterateSort","childSort","ColumnMenu","GridColumnMenu","getColumnMenu","columnMenuModule","ContextMenu","cmenu","addRow","editRecord","event","BatchEdit","batchChildCount","batchAddedRecords","batchDeletedRecords","batchAddRowRecord","batchRecords","isAdd","batchPageAction","batchCancelAction","immutableBatchAction","nextCellIndex","getBatchRecords","getAddRowIndex","getSelectedIndex","getBatchChildCount","actualCellIndex","frozenCols","columnObject","getColumnByIndex","added","primaryKey_1","currentDataIndex","indexvalue","rowObjectIndex","getActualRowObjectIndex","newBatchRowAdded","changes","batchIndex","primaryParent","childRecordCount","updateChildCount","updateRowIndex","focusModule","table","matrix","childs","primarykey","parentRowIndex","getRowElementByUID","totalCount","mRows","deleterecords","deleteUniqueID","positionIndex","updatedRecords","primarykey_1","addRecords","endIndex","indexValue","Edit","prevAriaRowIndex","isAddedRowByMethod","GridEdit","previousNewRowPosition","internalProperties","batchEditModule","events.keyPressed","lastCellTab","contentready","editActionEvents","events.doubleTap","gridDblClick","customCellSave","savePreviousRowPosition","events.beforeStartEdit","events.beforeBatchCancel","resetIsOnBatch","getRowPosition","doubleClickTarget","addArgs","ariaRowIndex","applyFormValidation","eventArgs","treeObj","keyData","paramsLength","infiniteAddAction","rowObjects","newRowObject","newRowObjectIndex","newRecord","updateInfiniteCurrentViewData","movableRowsObject","getMovableRowsObject","isCache","enableCache","resetRowIndex","updateIndex","newRowIndex","dataIndex","infiniteCurrentViewData","infiniteScrollModule","isOnBatch","updateGridEditMode","keyPress","prom","celleditArgs","toolbarID","cellDetails","treeCell","afterCellSave","form","rowIndex_1","primaryKeys_1","isTabLastRow","update","fromTable","previousValue","editArgs","filterChoiceCount","excelSearchOperator","mRow","aggregateModule","destroyWidgets","formObj","restoreFocus","saveArgs","previousData","data1","treeColIndex","l","data2","firstAriaIndex","lastAriaIndex","withinRange","isVirtualization","focussedElement","activeElement","newFreezeRowObject","rightFrozenRows","errors","focus","seletedRow","beginAddEdit","primaryKeys_2","selector","childRecordCount1","currentDataIndex1","deletedValues","previousEditMode","previousGridEditMode","editFormValidate","destroyForm","CommandColumn","Command","DetailRow","detailrow","detaildataBound","setIndentVisibility","childRowExpand","actioncomplete","detailele","elements","detailData","detailRowElement","detailElement","previousSibling","expandClass","classlist","gridClas","gridclass","newNo","detailClass","spann","updtdcolum","focusElement","VirtualTreeContentRenderer","locator","isExpandCollapse","translateY","maxiPage","recordAdded","preTranslate","isRemoteExpand","getModelGenerator","events.virtualActionArgs","virtualOtherAction","events.indexModifier","setTop","nextSetResIndex","lastIndex","onDataReady","refreshContentRows","observers","observes","scrollArgs","scrollListeners","onEnteredAction","dataBoundEvent","rowSelectedEvent","toSelectVirtualRow","onActionComplete","virtualEditSuccess","resetIseditValue","cancelEdit","toSelectRowOnContextOpen","refreshCell","cellFocus","setVirtualHeight","contents","debounceEvent","TreeInterSectionObserver","getPanel","getTranslateY","sTop","cHeight","isOnenter","initialRowTop","gridTop","containerRect","observer","generateCells","generateCell","rowId","cellType","colSpan","oIndex","foreignKeyData","isDataCell","isTemplate","rowID","Data","isForeignKey","isForeignColumn","Cell","rowPosition","withInRange","restoreEditState","restoreNewRow","isWheel","isIE","xAxis","axis","getColumnOffset","vgenerator","getColumnIndexes","columnIndexes","cOffsets","maxLeft","virtualEle","adjustTable","header","sentinel","outBuffer","upScroll","offset","downScroll","vHeight","lastInx","remains","rowPt","firsttdinx","isLastBlock","viewInfo","previousInfo","setColumnIndexesInView","loadSelf","appendContent","newChild","sentinelInfo","cBlock","cOffset","setWrapperWidth","name","getTable","VirtualContentRenderer","isWheeling","newPos","lastPos","timer","callback","onEnterCallback","virtualScrollHandlers","delay","debounced50","debounce","prevTop","prevLeft","movableContainer","scrollbar","delta","clearTimeout","setTimeout","preventDefault","returnValue","axes","entered","InterSectionObserver","VirtualScroll","prevstartIndex","prevendIndex","TreeVirtual","returnVisualData","collapseExpandVirtualchilds","virtualPageAction","expandCollapseRec","counts","resourceCount","sIndex","instantiateRenderers","parentGrid","renderer","getService","RenderType","Header","VirtualHeaderRenderer","Content","ensurePageSize","GridVirtualScroll","ColumnChooser","GridColumnChooser","X","Y","InfiniteScroll","GridInfiniteScroll","infinitePageAction","infiniteRemoteExpand","infiniteDeleteHandler","infiniteEditHandler","createRows","collapseExpandInfinitechilds","rowRenderer","RowRenderer","childRowObjects","childRowElements","infiniteParents","initialBlocks","maxBlocks","firstIndex","rowElms","keyField","removeRows","mRowElms","tbody","currentRows","isMovable","isFrozenRight","isFrozenGrid","getMovableVirtualContent","getFrozenVirtualContent","isFrozenRows","getMovableVirtualHeader","getFrozenVirtualHeader","newRow"],"mappings":"shBAQA,SAAgBA,EAAaC,GACzB,GAAIA,EAAOC,sBAAsBC,cAAa,CAC1C,IAAIC,EAAUH,EAAOC,WAAWE,QAChC,OAAQA,aAAmBC,gBACtBD,aAAmBE,iBAAmBF,aAAmBG,oBACzDH,aAAmBI,gBAAiBJ,aAAmBK,aAEhE,OAAO,EAMX,SAAgBC,EAAgBT,GAC5B,SAAIA,EAAOC,YAAc,WAAYD,EAAOC,YAShD,SAAgBS,EAAiBV,GAC7B,IAAK,IAAIW,EAAI,EAAGA,EAAIX,EAAOY,QAAQC,OAAQF,IACvC,GAAIX,EAAOY,QAAQD,GAAGG,aAClB,OAAO,EAGf,OAAO,EAMX,SAAgBC,EAAuBf,GACnC,SAAMgB,oBAAkBhB,EAAOiB,KAAKC,eAAeC,MAA2C,KAAnCnB,EAAOiB,KAAKC,eAAeC,KACzC,UAAxCnB,EAAOkB,eAAeE,eAAqE,SAAxCpB,EAAOkB,eAAeE,kBACzEpB,EAAOqB,iBAAkBrB,EAAOiB,KAAKK,eAAeV,QAAQC,QAChB,UAAxCb,EAAOsB,eAAeF,eAAqE,SAAxCpB,EAAOsB,eAAeF,gBAUtF,SAAgBG,EAAkBC,GAG9B,IAAK,IAFDC,KAEKd,EAAI,EAAGe,EADIC,OAAOC,KAAKJ,GAASX,OACJF,EAAIe,EAAKf,IAAK,CAChCkB,YAAU,kBAAmBL,EAAQb,KAEhDc,EAAMK,KAAKN,EAAQb,IAG3B,OAAOc,EASX,SAAgBM,EAAgB/B,EAAQgC,EAAQC,GAC5C,IAEIC,EAFAC,EAAenB,oBAAkBgB,EAAOI,YAAc,KACtDC,EAAcrC,EAAQgC,EAAOI,WAAWE,UAE5C,OAAoB,MAAhBH,KACInC,EAAOuC,eAAkBvB,oBAAkBmB,EAAanC,EAAOwC,sBAC3DL,EAAanC,EAAOwC,qBAIO,IAA1BL,EAAaM,YAGbN,EAAaC,cAClBF,EAAcG,EAAcrC,EAAQmC,EAAaC,WAAWE,YACzCtC,EAAOuC,gBAAkBvB,oBAAkBkB,EAAYlC,EAAOwC,uBACzEN,EAAYlC,EAAOwC,qBACvBN,EAAYO,UAAW,GAChB,KAEPP,IAAwC,IAAzBA,EAAYO,aAGtBP,GACEH,EAAgB/B,EAAQkC,EAAaD,OAjBhDE,EAAaM,UAAW,GACjB,IAiCnB,SAAgBC,EAAoBlB,GAChC,IAAIC,KACJ,GAAIT,oBAAkBQ,KAAcA,EAAQmB,kBAAoB3B,oBAAkBQ,EAAQoB,gBAClFpB,EAAQoB,aAAa/B,OACzB,SAEJ,IAAKG,oBAAkBQ,EAAQoB,cAG3B,IAAK,IAFDA,EAAepB,EAAQoB,aAElBjC,EAAI,EAAGe,EADLC,OAAOC,KAAKgB,GACI/B,OAAQF,EAAIe,EAAKf,IACxCc,EAAMK,KAAKc,EAAajC,KACpBiC,EAAajC,GAAGgC,kBAAqB3B,oBAAkB4B,EAAajC,GAAGiC,eACvEA,EAAajC,GAAGiC,aAAa/B,UAC7BY,EAAQA,EAAMoB,OAAOH,EAAoBE,EAAajC,MAIlE,OAAOc,EAMX,SAAgBqB,EAAU9C,GACtB,GAAID,EAAaC,GAAS,CACtB,IAAI+C,EAAK/C,EAAOC,WAChB,OAAQe,oBAAkB+B,EAAGC,OAEjC,OAAO,EAMX,SAAgBC,EAAYC,GAIxB,IAAK,IAFDC,EACAvB,EAFAwB,KAGKzC,EAAI,EAAGuC,GAASvC,EAAIuC,EAAMrC,OAAQF,IAAK,CAC5CiB,EAAOD,OAAOC,KAAKsB,EAAMvC,IACzBwC,KACA,IAAK,IAAIE,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IAC7BF,EAAIvB,EAAKyB,IAAMH,EAAMvC,GAAGiB,EAAKyB,IAEjCD,EAAOtB,KAAKqB,GAEhB,OAAOC,EAMX,SAAgBE,EAAaC,GAQzB,cAPOA,EAAMZ,uBACNY,EAAMX,oBACNW,EAAMC,aACND,EAAMnB,kBACNmB,EAAME,aACNF,EAAMG,gBACNH,EAAMjB,SACNiB,EAQX,SAAgBlB,EAAcrC,EAAQuD,EAAOI,GACzC,GAAIA,EAAe,CAEf,OAAO3D,EAAe,yBAAEuD,GAIxB,OAAOvD,EAAS,mBAAEuD,GAO1B,SAAgBK,EAASC,GACrB,IAAIC,EAAQC,OAAOC,iBAAiBH,GACpC,MAA2B,SAAlBC,EAAMG,SAA6C,WAArBH,EAAMI,WCvLjD,SAAgBC,EAAWC,EAASC,EAASC,EAAiBC,EAAaC,EAAeC,EAAYC,GAClG,IAGI/D,EACA0C,EAEAsB,EANApB,EAAQa,EAAQb,MAChBqB,EAASR,EAAQQ,OAMjBzD,EAAMkD,EAAQpD,KAAK4D,0BAA0B,GAC7CC,EAAWT,EAAQpE,sBAAsBC,cACzCmE,EAAQpE,WAAWA,WAAW8E,KAAOV,EAAQpE,WAC7C+E,KACAC,EAAe1B,EACf2B,GAAS,EAIb,GAHkC,UAA9Bb,EAAQc,aAAaC,OACrBT,EAAeN,EAAQpD,KAAKoE,WAAWC,mBAE5B,QAAXV,GAAgC,cAAXA,GAAyD,UAA9BP,EAAQc,aAAaC,MAClET,EAAyB,aAAE9D,OAAU,CACxC,IAAI0E,EA4HZ,SAA0BnB,EAASU,EAAUT,EAASC,EAAiBC,EAAaC,EAAeE,GAC/F,IAAInB,EACA2B,GAAS,EACTM,EAAqBnB,EAAQpD,KAAKwE,wBAGtC,OAFAlC,EAAQmC,YAAWtB,EAAQb,OAC3BA,EAAQD,EAAaC,GACbc,EAAQc,aAAaQ,gBACzB,IAAK,MACDb,EAASc,QAAQrC,GACjB2B,GAAS,EACT,MACJ,IAAK,SACDJ,EAAShD,KAAKyB,GACd2B,GAAS,EACT,MACJ,IAAK,QAOG3B,EANCvC,oBAAkB0D,GAMXpB,EADRC,EAAQmC,YAAWF,EAAmBjB,EAAc,KAH5CjB,EADRC,EAAQmC,YAAWhB,IAOvB,MACJ,IAAK,QACL,IAAK,QACD,GAAK1D,oBAAkB0D,GAIlB,CACD,IAAImB,EAAcxB,EAAQpD,KAAK4D,0BAA0B,GACrDiB,EAAcN,EAAmBjB,GAOrChB,EAAQD,EALJC,GADCvC,oBAAkB8E,IAAgBA,EAAYD,KAAiBzB,EAAQb,MAAMsC,KAAmC,IAAnBrB,EACtFkB,YAAWI,GAGXJ,YAAWtB,EAAQb,QAI/Bc,EAAQgB,WAA2B,mBAAE3B,SAAWH,OAbhDA,EAAQD,EADRC,EAAQmC,YAAWhB,KAgBA,IAAnBF,IACAM,EAASc,QAAQrC,GACjB2B,GAAS,GAGrB,OAAS3B,MAAOA,EAAO2B,OAAQA,GA7Kda,CAAU3B,EAASU,EAAUT,EAASC,EAAiBC,EAAaC,EAAeE,GAChGnB,EAAQgC,EAAOhC,MACf2B,EAASK,EAAOL,OAQpB,GANI3B,aAAiByC,MACjBhB,EAAe/B,EAAYM,GAG3ByB,EAAalD,KAAK4D,YAAWnC,KAE5B2B,IAAsB,QAAXN,GAC6B,QAAxCP,EAAQc,aAAaQ,gBAAoE,WAAxCtB,EAAQc,aAAaQ,gBACvE,IAAK,IAAIM,EAAI,EAAGA,EAAIjB,EAAanE,OAAQoF,IAAK,CACJ,iBAA1BjB,EAAaiB,GAAG9E,KACxB6D,EAAaiB,GAAKjB,EAAaiB,GAAG9E,IAEtC,IAAIS,EAAOoD,EAAaiB,GAAGvC,SAAW/B,OAAOC,KAAKoD,EAAaiB,GAAGvC,UAC9D/B,OAAOC,KAAKoD,EAAaiB,IAC7BtF,EAAImE,EAASjE,OAoFb,IAnFA,IAAIqF,EAAU,WACV,GAAIpB,EAASnE,GAAGQ,KAAS6D,EAAaiB,GAAG9E,GAAM,CAC3C,GAAe,WAAXyD,EA0BC,CACD,GAAe,SAAXA,GACA,IAAKvB,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IACzB,GAAI1B,OAAOwE,UAAUC,eAAeC,KAAKvB,EAASnE,GAAIiB,EAAKyB,MAAuC,SAA9BgB,EAAQc,aAAaC,OAChFpE,oBAAkB2D,IAAyD,IAAxCA,EAA2B,eAAE9D,QAClEe,EAAKyB,KAAOoB,GAAa,CAC5B,IAAI6B,EAAajE,EAAcgC,EAASW,EAAaiB,GAAG3D,UACxDwC,EAASnE,GAAGiB,EAAKyB,IAAM2B,EAAaiB,GAAGrE,EAAKyB,IACxCiD,GAAcA,EAAW5C,WACzB4C,EAAW5C,SAAS9B,EAAKyB,IAAMiD,EAAW1E,EAAKyB,IAAMyB,EAASnE,GAAGiB,EAAKyB,WAKjF,GAAe,QAAXuB,GAA+B,cAAXA,EAAwB,CACjD,IAAIpB,OAAQ,EACgC,UAAxCa,EAAQc,aAAaQ,eACjBrB,GACAW,EAAavB,SAASW,EAAQkC,iBAAmBzB,EAASnE,GAAG0D,EAAQmC,WACrE1B,EAAS2B,OAAO9F,EAAI,EAAG,EAAGsE,EAAavB,YAGlC/B,OAAOwE,UAAUC,eAAeC,KAAKvB,EAASnE,GAAI0D,EAAQqC,gBAC3D5B,EAASnE,GAAG0D,EAAQqC,kBAExB5B,EAASnE,GAAG0D,EAAQqC,cAAc5E,KAAKmD,EAAavB,UACpDiD,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,EAAiBW,IAG3B,UAAxCZ,EAAQc,aAAaQ,gBAC1Bb,EAAS2B,OAAO9F,EAAI,EAAG,EAAGsE,EAAavB,UAClC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAK2D,EAASnE,EAAI,GAAIiE,EAAQP,EAASC,EAAiBW,IAGtEV,EAIuC,UAAxCF,EAAQc,aAAaQ,iBAC1Bb,EAAS2B,OAAO9F,EAAG,EAAGsE,EAAavB,UAC9B1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,EAAiBW,KANxEzB,EAAQ,EACRsB,EAAS2B,OAAOjD,EAAO,EAAGyB,EAAavB,WAS/C,MAAO,QAvEP,IAAIkD,EAAgB9B,EAASnE,GAE7B,GADAmE,EAAS2B,OAAO9F,EAAG,GACf2D,EAAiB,CACjB,IAAKtD,oBAAkB4F,EAAcvC,EAAQkC,kBAKzC,IAAK,IAJDM,EAAaxC,EAAQyC,SAASC,OAAO,SAAUC,GAC/C,OAAOA,EAAE3C,EAAQmC,aAAeI,EAAcvC,EAAQkC,mBACvD,GACC3D,EAAeiE,EAAaA,EAAWxC,EAAQqC,iBAC1CO,EAAIrE,EAAa/B,OAAS,EAAGoG,GAAK,EAAGA,IAC1C,GAAIrE,EAAaqE,GAAG5C,EAAQmC,aAAeI,EAAcvC,EAAQmC,WAAY,CACpEnC,EAAQ6C,qBACTL,EAAyB,aAAEJ,OAAOQ,EAAG,GAEzCrE,EAAa6D,OAAOQ,EAAG,GAClBrE,EAAa/B,SACdgG,EAAWlE,iBAAkB,EAC7BgE,EAAgBxF,EAAK0F,EAAYjC,EAAQP,EAASC,IAEtD,MAIZ,MAAO,cAoDTtD,oBAAkB8D,EAASnE,GAAG0D,EAAQqC,gBACxCS,EAAmBrC,EAASnE,GAAG0D,EAAQqC,cAAe1B,EAAaiB,GAAIrB,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,IAC5HkC,EAAgBxF,EAAK2D,EAASnE,GAAIiE,EAAQP,EAASC,IAIxD3D,KAAOA,GAAK,GAAG,CAElB,GAAgB,UADFuF,IAEV,QAiFpB,SAAgBiB,EAAmBvE,EAAcoC,EAAcJ,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,GAGhH,IAFA,IAAI2C,GAAa,EACb/D,EAAIT,EAAa/B,OACdwC,KAAOA,GAAK,GACf,GAAIT,EAAaS,GAAGlC,KAAS6D,EAAa7D,IACrCmD,GAAmB1B,EAAaS,GAAGgB,EAAQkC,mBAAqBvB,EAAaX,EAAQmC,WAAa,CACnG,GAAe,SAAX5B,EAAmB,CAGnB,IAAK,IAFDhD,EAAOD,OAAOC,KAAKoD,GACnBsB,EAAajE,EAAcgC,EAASW,EAAa1C,UAC5C3B,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAC7B,GAAIgB,OAAOwE,UAAUC,eAAeC,KAAKzD,EAAaS,GAAIzB,EAAKjB,MAAsC,SAA9B0D,EAAQc,aAAaC,MAAmBxD,EAAKjB,KAAO8D,KACvH6B,EAAW1E,EAAKjB,IAAM2F,EAAW5C,SAAS9B,EAAKjB,IAAMiC,EAAaS,GAAGzB,EAAKjB,IAAMqE,EAAapD,EAAKjB,IAC3D,WAAnC0D,EAAQpD,KAAKkE,aAAaC,MAAmD,SAA9Bf,EAAQc,aAAaC,MAAiB,CAErFf,EAAQpD,KAAKoE,WAAqB,WAAEgC,aAAerC,EAAaxB,MAChEa,EAAQpD,KAAKoE,WAAqB,WAAEiC,sBAAsBtC,GAItE,MAEgB,QAAXJ,GAA+B,cAAXA,EACmB,UAAxCP,EAAQc,aAAaQ,eACjBrB,GACAW,EAAaZ,EAAQkC,iBAAmB3D,EAAaS,GAAGgB,EAAQmC,WAChE5D,EAAa6D,OAAOpD,EAAI,EAAG,EAAG4B,GAC9B0B,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,KAGnEtD,OAAOwE,UAAUC,eAAeC,KAAKzD,EAAaS,GAAIgB,EAAQqC,gBAC/D9D,EAAaS,GAAGgB,EAAQqC,kBAE5B9D,EAAaS,GAAGgB,EAAQqC,cAAc5E,KAAKmD,EAAavB,UACxDiD,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,IAG/B,UAAxCZ,EAAQc,aAAaQ,gBAC1B/C,EAAa6D,OAAOpD,EAAG,EAAG4B,EAAavB,UAClC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,IAG/B,UAAxCZ,EAAQc,aAAaQ,iBAC1B/C,EAAa6D,OAAOpD,EAAI,EAAG,EAAG4B,EAAavB,UACtC1C,oBAAkBiE,EAAa7C,aAChCuE,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,EAAiBW,KAKhFrC,EAAa6D,OAAOpD,EAAG,GAClBT,EAAa/B,SACduG,GAAa,SAIfpG,oBAAkB4B,EAAaS,GAAGgB,EAAQqC,gBAC5CS,EAAmBvE,EAAaS,GAAGgB,EAAQqC,cAAe1B,EAAcJ,EAAQzD,EAAKkD,EAASC,EAAiBW,EAAcR,IAC7HkC,EAAgBxF,EAAKyB,EAAaS,GAAIuB,EAAQP,EAASC,GAInE,OAAO8C,EAWX,SAAgBT,EAAgBxF,EAAKa,EAAQ4C,EAAQP,EAASC,EAAiBiD,GAC3E,GAA6C,UAAxClD,EAAQc,aAAaQ,gBAAsE,UAAxCtB,EAAQc,aAAaQ,gBACzD,QAAXf,GAA+B,cAAXA,GAA6B5D,oBAAkBuG,EAAMnF,YAI7E,CACD,IACIoF,EADAC,EAAiBpD,EAAQpD,KAAKwE,wBAkBlC,GAhBAgC,EAAeC,IAAI,SAAUV,EAAGrG,GAASqG,EAAE7F,KAASa,EAAOb,KACvDqG,EAAU7G,KAGTK,oBAAkBwG,KACnBxF,EAASyF,EAAeD,IAExBnD,EAAQsD,sBAAwB3G,oBAAkBgB,KAAYhB,oBAAkBuG,KAChFvF,EAAS4F,WAAS,sBAAwBL,EAAMM,eAAgBxD,IAE/DC,GAAoBtD,oBAAkBgB,EAAOY,gBAAiBZ,EAAOY,aAAa/B,OAInFmB,EAAOW,iBAAkB,EAHzBX,EAAOW,iBAAkB,EAKd,QAAXiC,GAA+B,cAAXA,EAAwB,CAC5C5C,EAAOS,UAAW,EAClBT,EAAOW,iBAAkB,EACrB0B,EAAQyD,aAAalH,QAAQC,QAAUG,oBAAkBuG,KACzDA,EAAQE,EAAeV,OAAO,SAAUC,GACpC,OAAIA,EAAEa,iBAAmB7F,EAAOM,SACrB0E,EAGA,QAInB,IAAIpE,EAAe2E,EAAQA,aAAiBvB,MAAQuB,EAAM,GAAKA,EAAQE,EAAeD,EAAU,GACpD,UAAxCnD,EAAQc,aAAaQ,iBAChBhE,OAAOwE,UAAUC,eAAeC,KAAKrE,EAAQ,gBAIzChB,oBAAkBuG,IAAUvF,EAAOb,KAASoG,EAAMpG,IACnDa,EAAOY,aAAad,KAAKyF,GAJ7BvF,EAAOY,iBAOwC,IAA/CZ,EAAOY,aAAamF,QAAQnF,IAAwBZ,EAAOb,KAASoG,EAAMpG,IAC1Ea,EAAOY,aAAagD,QAAQhD,GAE5B0B,IACK3C,OAAOwE,UAAUC,eAAeC,KAAKrE,EAAQqC,EAAQqC,gBACtD1E,EAAOqC,EAAQqC,mBAEyC,IAAxD1E,EAAOqC,EAAQqC,cAAcqB,QAAQnF,IAAwBZ,EAAOb,KAASoG,EAAMpG,IACnFa,EAAOqC,EAAQqC,cAAcd,QAAQhD,KAQrD,IAAK,IAHDiD,EAAcxB,EAAQpD,KAAK4D,0BAA0B,GACrDmD,EAAO3D,EAAQpD,KAAKhB,sBAAsBC,cAC1CmE,EAAQpD,KAAKhB,WAAWA,WAAW8E,KAAOV,EAAQpD,KAAKhB,WAClDU,EAAI,EAAGA,EAAIqH,EAAKnH,OAAQF,IAC7B,GAAIqH,EAAKrH,GAAGkF,KAAiB7D,EAAO6D,GAAc,CAC9CmC,EAAKrH,GAAKqB,EACV,MAGRqC,EAAQpD,KAAKgH,WAAW9G,EAAKa,GAC7B,IAAIkG,EAAM7D,EAAQ8D,cAAcX,GACE,UAA9BnD,EAAQc,aAAaC,OAEjB8C,EADW,QAAXtD,EACMP,EAAQ+D,UAAU/D,EAAQpD,KAAKwE,wBAAwBsC,QAAQ/F,IAG/DqC,EAAQ+D,UAAU/D,EAAQpD,KAAKoH,wBAAwBrG,EAAOb,MAG5E,IAAImH,OAAa,EAIjB,IAHIjE,EAAQkE,YAAclE,EAAQmE,sBAC9BF,EAAajE,EAAQoE,qBAAqBjB,KAEzCnD,EAAQsD,uBAAyB3G,oBAAkBkH,KAASlH,oBAAkBsH,GAAa,CAC5F,IAAII,EAAUrE,EAAQsE,gBAClBtE,EAAQuE,qBAAuBvE,EAAQ6C,sBACvCwB,GAAoB,GAExBrE,EAAQwE,aAAaC,YACjBd,KAAMhG,EAAQ+G,KAAMb,EAAIc,MAAMN,GAAWR,EAAIc,MAAMN,GAC7CJ,EAAWU,MAAMN,EAAUrE,EAAQmE,oBACzCS,OAAQ5E,EAAQpD,KAAKiI,aAAa7E,EAAQsE,iBAC1CQ,YAAavE,KAEbP,EAAQ6C,qBAA6C,cAAtB7C,EAAgB,QAA2C,eAAtBA,EAAgB,SACpFA,EAAQwE,aAAaO,aACjBpB,KAAMhG,EAAQkG,IAAKA,SA/F4D,CAC1E7F,EAAcgC,EAASkD,EAAMnF,WAAWE,UAC9CM,aAAad,KAAKyF,ICvSrC,IAAI8B,EAAwB,WACxB,SAASA,EAAOC,GAOZC,KAAKC,cAAe,EAMpBD,KAAKE,QAMLF,KAAKG,mBAAoB,EAOzBH,KAAKI,iBAAkB,EAOvBJ,KAAKK,gBAAiB,EAOtBL,KAAKlI,gBAAiB,EAOtBkI,KAAKM,cAAe,EAOpBN,KAAKO,eAAgB,EAWrBP,KAAKxC,UACLgD,QAAMR,KAAMD,GAqBhB,OAZAD,EAAOlD,UAAU6D,cAAgB,SAAUf,GAGvC,IAAK,IADDrH,EAAOD,OAAOC,KAAKqH,GACdtI,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAG7B,GAFA4I,KAAK3H,EAAKjB,IAAMsI,EAAOrH,EAAKjB,IAExB4I,KAAKvJ,QAAUuJ,KAAKvJ,OAAgB,SAAiB,aAAZ4B,EAAKjB,GAAmB,CAEjE4I,KAAKvJ,OAAOiK,gBAAgC,eAAEpB,aAA4C,gCAAEU,KAAKW,OAItGb,KC5FPc,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,EAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5DK,EAA2B,SAAUC,GAErC,SAASD,IACL,OAAkB,OAAXC,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAsC/D,OAxCAY,EAAUoB,EAAWC,GAIrBZ,GACIc,cACDH,EAAUpF,UAAW,aAAS,GACjCyE,GACIc,cACDH,EAAUpF,UAAW,gBAAY,GACpCyE,GACIc,cACDH,EAAUpF,UAAW,aAAS,GACjCyE,GACIc,cACDH,EAAUpF,UAAW,iBAAa,GACrCyE,GACIc,cACDH,EAAUpF,UAAW,oBAAgB,GACxCyE,GACIc,cACDH,EAAUpF,UAAW,iBAAa,GACrCyE,GACIc,gBACDH,EAAUpF,UAAW,yBAAqB,GAC7CyE,GACIc,gBACDH,EAAUpF,UAAW,sBAAkB,GAC1CyE,GACIc,cACDH,EAAUpF,UAAW,YAAQ,GAChCyE,GACIc,cACDH,EAAUpF,UAAW,mBAAe,GACvCyE,GACIc,cACDH,EAAUpF,UAAW,WAAO,GAC/ByE,GACIc,cACDH,EAAUpF,UAAW,oBAAgB,GACjCoF,GACTI,iBAKEC,EAAgC,SAAUJ,GAE1C,SAASI,IACL,OAAkB,OAAXJ,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KA0B/D,OA5BAY,EAAUyB,EAAgBJ,GAI1BZ,GACIiB,gBAAeN,IAChBK,EAAezF,UAAW,eAAW,GACxCyE,GACIc,WAAS,cACVE,EAAezF,UAAW,YAAQ,GACrCyE,GACIc,cACDE,EAAezF,UAAW,YAAQ,GACrCyE,GACIc,YAAS,IACVE,EAAezF,UAAW,2BAAuB,GACpDyE,GACIc,WAAS,OACVE,EAAezF,UAAW,0BAAsB,GACnDyE,GACIc,cACDE,EAAezF,UAAW,iBAAa,GAC1CyE,GACIc,YAAS,IACVE,EAAezF,UAAW,oBAAgB,GAC7CyE,GACIc,WAAS,WACVE,EAAezF,UAAW,qBAAiB,GACvCyF,GACTD,iBCpGExB,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,EAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5DY,EAAkC,SAAUN,GAE5C,SAASM,IACL,OAAkB,OAAXN,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAK/D,OAPAY,EAAU2B,EAAkBN,GAI5BZ,GACIc,WAAS,SACVI,EAAiB3F,UAAW,gBAAY,GACpC2F,GACTH,iBChCExB,EAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAoBxCsB,EAAU,oDACVC,EAAe,2CAMfC,GAAiB,EACjBC,EAAwB,SAAUV,GAElC,SAASU,EAAOlM,GAIZ,OAFAmM,OAAKC,OAAOC,UACJb,EAAOnF,KAAKkD,KAAMvJ,IAAWuJ,KAgFzC,OApFAY,EAAU+B,EAAQV,GAalBU,EAAO/F,UAAUmG,cAAgB,WAC7B,MAAO,UAEXJ,EAAO/F,UAAUoG,IAAM,SAAUC,EAAOC,GAC9BD,aAAiBxG,QACnBwG,GAASA,IAGb,IAAK,IADDE,EAAOF,EACF7L,EAAI,EAAGA,EAAI+L,EAAK7L,OAAQF,IAAK,CAClC,IAAIgM,EAAOC,cAAYF,EAAK/L,IACxBkM,EAAMF,EAAKG,MAAML,EAAMlD,KAAKvJ,QAChC,GAAI6M,EAAIE,QAAS,CACb,IAAIC,EAAUL,EAAKM,gBAAgBR,EAAMlD,KAAKvJ,OAAQ6M,EAAIvD,SAC1D0D,EAAUA,EAAQE,QAAQ,UAAW,eAAeA,QAAQ,mBAAoB,IAAIA,QAAQ,aAAc,IACtGjB,GAA8B,2BAAZS,EAAK/L,KACvBqM,EAAUA,EAAQE,QAAQ,UAAW,mBACrCjB,GAAiB,GAErB,IAAIzI,EAAQwJ,EAAQjF,QAAQ,SACxBoF,EAAUH,EAAQI,UAAU5J,GAChB,mBAAZkJ,EAAK/L,GACLqM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,2BAAZW,EAAK/L,IAA+C,0BAAZ+L,EAAK/L,GAClDqM,EAAUA,EAAQE,QAAQC,EAASnB,EAAe,sCAEjC,qBAAZU,EAAK/L,GACVqM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,SAE5B,mBAAZW,EAAK/L,GACVqM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,6BAAZW,EAAK/L,GACVqM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,YAE5B,mBAAZW,EAAK/L,KACVqM,EAAUA,EAAQE,QAAQC,EAASpB,EAAU,gCAEjC,+BAAZW,EAAK/L,GACAK,oBAAkBuI,KAAK8D,cAAiBrM,oBAAkBuI,KAAK8D,YAAYC,kBAE5EC,QAAQZ,EAAKa,SAASR,GAK1BO,QAAQZ,EAAKa,SAASR,MAKtCd,EAAO/F,UAAUsH,QAAU,SAAUjB,EAAOC,EAAMiB,GAC9CnE,KAAK8D,YAAcK,EACblB,aAAiBxG,QACnBwG,GAASA,IAEb,IAAIE,EAAOF,EACPkB,EAAS9E,sBAAwB8E,EAAS9M,QAAQmG,OAAO,SAAUkC,GAAU,OAAOA,EAAO0E,eAAiB9M,SAC5GoL,GAAiB,EACjB1C,KAAKgD,IAAI,yBAA0BE,IAEvC,IAAK,IAAI9L,EAAI,EAAGA,EAAI+L,EAAK7L,OAAQF,IAAK,CAClC,IAAIgM,EAAOiB,EAAgBlB,EAAK/L,IAC5BkM,EAAMF,EAAKG,MAAML,EAAMiB,GAC3B,GAAIb,EAAIE,QAAS,CACb,IAAIC,EAAUL,EAAKM,gBAAgBR,EAAMiB,EAAUb,EAAIvD,SAEvDiE,QAAQZ,EAAKa,SAASR,MAI3Bd,GACTG,UAESuB,GAEPC,wBACInB,KAAM,yBACNc,QAAS,QACTV,MAAO,SAAUL,EAAMzM,GACnB,IAAI8N,GAAQf,SAAS,GAOrB,OANK/L,oBAAkBhB,EAAOwG,YAAcxF,oBAAkBhB,EAAO0G,eAC9D1F,oBAAkBhB,EAAOuG,mBAC1BvF,oBAAkBhB,EAAOwG,YAAcxF,oBAAkBhB,EAAOuG,kBACjEvF,oBAAkBhB,EAAOwG,aAAexF,oBAAkBhB,EAAOuG,oBAClEuH,GAAQf,SAAS,IAEde,GAEXb,gBAAiB,WACb,MAAOc,iRAIF/B,EAAe,+BACfA,EAAe,4BACfA,EAAe,oCCrIrBgC,EAAe,eAIfC,EAAgB,gBAEhBC,EAAkB,kBAElBC,EAAc,cAEdb,EAAkB,kBAElBc,EAAiB,iBAIjBC,EAAc,cAEdC,EAAiB,iBAEjBC,EAAgB,gBAEhBC,EAAe,eAEfC,EAAoB,oBAEpBC,EAAkB,kBAIlBjM,EAAW,WAIXkM,EAAY,YAIZC,EAAe,eAEfC,EAA2B,2BAE3BC,EAAgB,gBAEhBC,EAAgB,iBAEhBC,EAAkB,kBAElBC,GAAmB,mBAQnBC,GAAa,aAEbC,GAAY,YAEZC,GAAW,WAEXC,GAAoB,oBAEpBC,GAAW,WAEXC,GAAY,YAEZC,GAAW,WAEXC,GAAc,cAEdC,GAAc,cAEdC,GAAW,WAEXC,GAAoB,oBAEpBC,GAAiB,iBAEjBC,GAAkB,kBAElBC,GAAY,YAEZC,GAAa,cAIbC,GAAY,aAIZC,GAAoB,sBAIpBC,GAAe,gBAEfC,GAAgB,iBAEhBC,GAAkB,YAElBC,GAAoB,sBAIpBC,GAAkB,kBAIlBC,GAAqB,qBAMrBC,GAAU,WAEVC,GAAa,cAEbC,GAAa,cAEbC,GAAa,cC/HpBzG,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAqBxCoG,GAA+B,SAAUrF,GAEzC,SAASqF,EAAc7Q,GACnB,IAAI8Q,EAAQtF,EAAOnF,KAAKkD,KAAMvJ,EAAOiB,OAASsI,KAI9C,OAHAuH,EAAMC,gBAAkB,GACxBD,EAAME,4BACNF,EAAMG,eAAiBjR,EAChB8Q,EAwJX,OA9JA3G,GAAU0G,EAAerF,GAQzBqF,EAAc1K,UAAU+K,YAAc,SAAUC,GAC5C,IAAIC,EAAc,cAId3J,EAAiB8B,KAAK0H,eAAexL,wBACzC,GAAyC,KAArC1B,OAAOsN,eAAeC,WAAmB,CACzC/H,KAAKgI,kBAAkBhO,MAAQgG,KAAK6H,GAAe,GACnD,IAAII,EAAOjI,KAAK0H,eAAehQ,KAAKmH,UACpC,GAAmD,SAA/CmB,KAAK0H,eAAeQ,kBAAkBrM,KAAiB,CAIvD,IAAK,IAHDsM,EAAkBnI,KAAK0H,eAAeU,wBAAwBC,KAAK,SAAUC,EAAGvH,GAChF,OAAOuH,EAAIvH,IAEN3J,EAAI,EAAGA,EAAI+Q,EAAgB7Q,OAAQF,IAIxC,GAHIA,EAAI,IACJ4I,KAAKwH,iBAAmB,OAEvBS,EAAKE,EAAgB/Q,IAAImR,UAAUC,SAAS,gBAAiB,CAC9D,IAAI/I,KAAWgJ,MAAM3L,KAAKmL,EAAKE,EAAgB/Q,IAAIsR,iBAAiB,eAChEC,EAAW3I,KAAK0H,eAAekB,qBAAqBxR,GAAW,UACV,IAArD4I,KAAKyH,yBAAyBjJ,QAAQmK,KACQ,WAA1C3I,KAAK0H,eAAemB,mBAA4E,SAA1C7I,KAAK0H,eAAemB,mBAC1E7I,KAAK8I,kBAAkB5K,EAAgBiK,EAAgB/Q,GAAI6Q,EAAML,EAAYxQ,GAEjF4I,KAAgB,YAAEP,GAAO,EAAO,KAAMmI,GACtC5H,KAAKwH,iBAAmBxH,KAAK6H,GAC7B7H,KAAKyH,yBAAyBlP,KAAKoQ,GACnC3I,KAAK6H,GAAe,GAC0B,UAA1C7H,KAAK0H,eAAemB,mBAA2E,SAA1C7I,KAAK0H,eAAemB,mBACzE7I,KAAK+I,iBAAiB7K,EAAgBiK,EAAgB/Q,GAAI6Q,EAAML,IAKhF,GAAIA,EAAY,CAEP,IADDoB,KACJ,IAAS5R,EAAI,EAAGA,EAAI4I,KAAK0H,eAAeuB,oBAAoB3R,OAAQF,IAChE4R,EAAgB5R,GAAK4I,KAAK0H,eAAeuB,oBAAoB7R,GAAG8R,WAEpElJ,KAAgB,YAAEgJ,GAAiB,EAAO,KAAMpB,GAChD5H,KAAKwH,gBAAkBxH,KAAK6H,GAAe,KAAO7H,KAAKwH,gBAE3D,IAAItE,GACAzE,KAAMuB,KAAKwH,gBACX2B,QAAQ,GAGZ,GADAnJ,KAAK0H,eAAe0B,QDrBZ,aCqBuClG,GAC3CA,EAAKiG,OACL,OAEJnJ,KAAKgI,kBAAkBhO,MAAQgG,KAAK6H,GAAe3E,EAAKzE,KACnD4K,UAAQC,UAAUC,MAAM,qBAIzBvJ,KAAKgI,kBAAkBwB,kBAAkB,EAAGxJ,KAAKgI,kBAAkBhO,MAAM1C,QAHzE0I,KAAKgI,kBAAkByB,SAK3BzJ,KAAa,UAAI,EACjBA,KAAKyH,4BACLzH,KAAKwH,gBAAkB,QAGvBvF,EAAOrF,UAAU+K,YAAY7K,KAAKkD,KAAM4H,KAIpDN,EAAc1K,UAAUkM,kBAAoB,SAAU5K,EAAgBjD,EAAegN,EAAML,EAAY3N,GACnG,IACI4N,EAAc,cACdhP,EAAa,aACbE,EAAW,WAEf,IAAKtB,oBAAkByG,EAAejD,GAAepC,IAEjD,IAAK,IADD6Q,EAAYxL,EAAejD,GAAepC,GAAiB,MACtDzB,EAAI,EAAGA,EAAIsS,EAAY,EAAGtS,IAC/B,IAAK,IAAI0C,EAAI,EAAGA,EAAIoE,EAAe5G,OAAQwC,IACvC,IAAKrC,oBAAkByG,EAAejD,GAAepC,KACjDqF,EAAepE,GAAGf,KAAcmF,EAAejD,GAAepC,GAAYE,GAAW,CACrFkC,EAAgBnB,EAChB,IAAI2F,KAAWgJ,MAAM3L,KAAKmL,EAAKhN,GAAeyN,iBAAiB,eAC3DC,EAAWzK,EAAepE,GAAGf,GACjC,IAAyD,IAArDiH,KAAKyH,yBAAyBjJ,QAAQmK,GAAkB,CACxD3I,KAAgB,YAAEP,GAAO,EAAO,KAAMmI,GAElC5H,KAAKwH,gBADLvN,EAAQ,EACe+F,KAAKwH,gBAAkBxH,KAAK6H,GAAe,KAG3C7H,KAAK6H,GAAe,KAAO7H,KAAKwH,gBAE3DxH,KAAKyH,yBAAyBlP,KAAKoQ,GACnC3I,KAAK6H,GAAe,GACpB,SAOxBP,EAAc1K,UAAU+M,KAAO,SAAU/B,GACrC3F,EAAOrF,UAAU+M,KAAK7M,KAAKkD,KAAM4H,IAErCN,EAAc1K,UAAUgN,MAAQ,SAAUnL,EAAMoL,EAAUC,GACtD7H,EAAOrF,UAAUgN,MAAM9M,KAAKkD,KAAMvB,EAAMoL,EAAUC,IAQtDxC,EAAc1K,UAAUmG,cAAgB,WACpC,MAAO,aAQXuE,EAAc1K,UAAUmN,QAAU,WAC9B9H,EAAOrF,UAAUmN,QAAQjN,KAAKkD,OAElCsH,EAAc1K,UAAUmM,iBAAmB,SAAU7K,EAAgBjD,EAAegN,EAAML,GACtF,IAII7O,EAAW,WACf,GAAImF,EAAejD,GAA8B,gBAE7C,IAAK,IADD+O,EAAY9L,EAAejD,GAA2B,aACjD7D,EAAI,EAAGA,EAAI4S,EAAU1S,OAAQF,IAClC,IAAK,IAAI0C,EAAI,EAAGA,EAAIoE,EAAe5G,OAAQwC,IACvC,IAAKrC,oBAAkBuS,EAAU5S,GAAG2B,KAAcmF,EAAepE,GAAGf,KAAciR,EAAU5S,GAAG2B,GAAW,CACtG,IAAMtB,oBAAkBwQ,EAAKnO,MAASmO,EAAKnO,GAAGyO,UAAUC,SAAS,gBAAiB,CAC9E,IAAI/I,KAAWgJ,MAAM3L,KAAKmL,EAAKnO,GAAG4O,iBAAiB,eAC/CC,EAAWzK,EAAepE,GAAGf,IACwB,IAArDiH,KAAKyH,yBAAyBjJ,QAAQmK,KACtC3I,KAAgB,YAAEP,GAAO,EAAO,KAAMmI,GACtC5H,KAAKwH,iBAAoB,KAAOxH,KAAgB,YAChDA,KAAgB,YAAI,GACpBA,KAAKyH,yBAAyBlP,KAAKoQ,GACnC3I,KAAK+I,iBAAiB7K,EAAgBpE,EAAGmO,EAAML,IAGvD,QAMbN,GACT2C,aC3KEC,GAA2B,WAM3B,SAASA,EAAUzT,GACfuJ,KAAKvJ,OAASA,EACduJ,KAAKmK,iBACLnK,KAAKmI,mBACLnI,KAAKoK,gBACLpK,KAAKqK,mBAscT,OA9bAH,EAAUtN,UAAUmG,cAAgB,WAChC,MAAO,aAEXmH,EAAUtN,UAAUyN,iBAAmB,WACnCrK,KAAKvJ,OAAO6T,GAAG,eAAgBtK,KAAKuK,eAAgBvK,MACpDA,KAAKvJ,OAAO6T,GAAG,iBAAkBtK,KAAKwK,eAAgBxK,MACtDA,KAAKvJ,OAAO6T,GAAG,oBAAqBtK,KAAKyK,kBAAmBzK,MAC5DA,KAAKvJ,OAAOiB,KAAK4S,GAAG,mBAAoBtK,KAAKuK,eAAgBvK,MAC7DA,KAAKvJ,OAAO6T,GAAG,oBAAqBtK,KAAK0K,kBAAmB1K,OAEhEkK,EAAUtN,UAAU+N,oBAAsB,WAClC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,eAAgB7K,KAAKuK,gBACrCvK,KAAKvJ,OAAOoU,IAAI,iBAAkB7K,KAAKwK,gBACvCxK,KAAKvJ,OAAOiB,KAAKmT,IAAI,mBAAoB7K,KAAKuK,gBAC9CvK,KAAKvJ,OAAOoU,IAAI,oBAAqB7K,KAAK0K,mBAC1C1K,KAAKvJ,OAAOoU,IAAI,oBAAqB7K,KAAKyK,qBAQ9CP,EAAUtN,UAAUmN,QAAU,WAC1B/J,KAAK2K,uBAETT,EAAUtN,UAAU8N,kBAAoB,SAAUxH,GAC9C,IAEI4H,EAFAvJ,EAASjJ,YAAU,SAAU4K,GAC7B6H,EAAYC,eAAazJ,EAAQ,sBAErC,GAAIwJ,GAAaA,EAAUrC,iBAAiB,sBAAsBpR,OAAS,EAAG,CAC1EwT,EAAWC,EAAUE,cAAc,0BACnC,IAAIpB,KACJA,EAAStR,KAAKgJ,EAAO2J,QAAQ,MAAMrB,UACnC7J,KAAKmL,iBAAiBtB,GACtB7J,KAAKoL,sBAAsBN,EAAUA,EAASO,mBAAmB9C,UAAUC,SAAS,WAAYjH,EAAO2J,QAAQ,YAE9G,GAAIH,GAAaA,EAAUrC,iBAAiB,oBAAoBpR,OAAS,GAAK0I,KAAKvJ,OAAO6U,mBAAoB,CAC/G,IAAIC,GAAiBR,EAAUE,cAAc,YAAY1C,UAAUC,SAAS,aACpEuC,EAAUE,cAAc,YAAY1C,UAAUC,SAAS,UAC/DxI,KAAKwL,gBAAgBD,GACrBT,EAAWC,EAAUE,cAAc,0BACnCjL,KAAKoL,sBAAsBN,EAAUS,EAAehK,EAAO2J,QAAQ,SAG3EhB,EAAUtN,UAAUwO,sBAAwB,SAAUN,EAAUW,EAAYC,GACxE,IAAIjN,EAAOuB,KAAKvJ,OAAOyF,wBAAwBwP,EAAW7B,UACtD3G,GAASyI,QAASF,EAAYlK,OAAQuJ,EAAUY,WAAYA,EAC5DE,QAASd,EAASvC,UAAUC,SAAS,mBAC/BxI,KAAKvJ,OAAOoV,oBAAsBpN,GAC5CuB,KAAKvJ,OAAO2S,QAAQ0C,EAAuB5I,IAE/CgH,EAAUtN,UAAUmP,uBAAyB,WAMzC,IAAK,IALDC,EACAC,EAGA5U,EAAU2I,KAAKvJ,OAAoB,cAAIuJ,KAAKvJ,OAAkB,YAAKuJ,KAAKvJ,OAAc,QACjFyV,EAAM,EAAGA,EAAM7U,EAAQC,OAAQ4U,IAChC7U,EAAQ6U,GAAK3U,eACbyU,EAAa3U,EAAQ6U,GAAKvL,KAIlC,IAAK,IADDwL,EAAmBnM,KAAKvJ,OAAO2V,mBAAmB1D,iBAAiB,oBAAoBpR,OAClFwC,EAAI,EAAGA,EAAIqS,EAAkBrS,IAAK,CACtBkG,KAAKvJ,OAAO2V,mBAAmB1D,iBAAiB,oBAAoB5O,GACtEuS,aAAa,kBAAoBL,IAC5CC,EAAcnS,GAGtB,OAAOmS,GAEX/B,EAAUtN,UAAU2N,eAAiB,WAEjC,GADAvK,KAAKiM,YAAcjM,KAAK+L,yBACpB/L,KAAKiM,aAAe,GAAoF,IAA/EjM,KAAKvJ,OAAO2V,mBAAmB1D,iBAAiB,oBAAoBpR,OAAc,CAC3G,IAAIgV,EAAgBtM,KAAKvJ,OAAO2V,mBAAmB1D,iBAAiB,oBAAoB1I,KAAKiM,aAEzFM,EAAYvM,KAAKvJ,OAAO+V,cAAc,SAAWC,UAAW,kBAAmBC,OAASvJ,KAAQ,eAChG4H,EAAY4B,iBAAe3M,KAAKvJ,OAAO+V,eAAe,GAASb,SAFvD,EAEuEiB,MAAO,OAChFrE,UAAUsE,IAAI,uBACxB9B,EAAU+B,aAAaP,EAAUQ,YAAahC,EAAUiC,YACnDvV,oBAAkB6U,IACnBA,EAAcQ,aAAa/B,EAAWuB,EAAcU,YAEpDhN,KAAKvJ,OAAO6U,oBACZtL,KAAKwL,uBAGR,GAAIxL,KAAKiM,aAAe,GAAKjM,KAAKvJ,OAAO2V,mBAAmB1D,iBAAiB,oBAAoBpR,OAAS,EAAG,CAC9G,IAAIyT,EACAQ,GADAR,EAAY/K,KAAKvJ,OAAO2V,mBAAmB1D,iBAAiB,uBAAuB,IACzDuC,cAAc,YAAY1C,UAAUC,SAAS,WACvExI,KAAKvJ,OAAO6U,oBAAsBC,GAClCvL,KAAKwL,gBAAgBD,KAIjCrB,EAAUtN,UAAUqQ,qBAAuB,SAAU/J,GACjD,IAAIqJ,EAAYvM,KAAKvJ,OAAO+V,cAAc,SAAWC,UAAW,oBAAqBC,OAASvJ,KAAQ,cAClG1E,EAAOyE,EAAKzE,KAChByE,EAAK1D,KAAK+I,UAAUsE,IAAI,sBACxB3J,EAAK1D,KAAK0N,aAAa,aAAc,YACrC,IAAIlT,GAASvC,oBAAkBgH,EAAK0O,gBAAyC,YAAvB1O,EAAK0O,cACvDpC,EAAY4B,iBAAe3M,KAAKvJ,OAAO+V,eAAe,GAASb,QAAS3R,EAAO4S,MAAO,MAK1F,GAJA7B,EAAUxC,UAAUsE,IAAI,uBACpB7M,KAAKvJ,OAAO2W,gBACZrC,EAAUE,cAAc,YAAY1Q,MAAM8S,MAAQ,QAE3B,kBAAvB5O,EAAK0O,cAAmC,CACxC,IAAIG,EAAWvC,EAAUrC,iBAAiB,YAAY,GACtD6E,eAAaD,IAAY,UAAW,SAAU,cAC9CvC,EAAUE,cAAc,YAAY1C,UAAUsE,IAAI,UAGtD,OADA9B,EAAU+B,aAAaP,EAAUQ,YAAahC,EAAUiC,YACjDjC,GAEXb,EAAUtN,UAAU4N,eAAiB,SAAUgD,GAC3C,IAAIzC,EAAY/K,KAAKiN,qBAAqBO,GACtCC,EAAeD,EAAUhO,KAAKyL,cAAc,2BAChD,GAAKxT,oBAAkBgW,GAKlB,CACD,IAAIC,EAAU1N,KAAKvJ,OAAO+V,cAAc,QAAUC,UAAW,mBACzDhO,EAAO+O,EAAUhO,KAAKmO,UAC1BH,EAAUhO,KAAKmO,UAAY,GAC3BD,EAAQC,UAAYlP,EACpB,IAAImP,EAAS5N,KAAKvJ,OAAO+V,cAAc,OAASC,UAAW,6BAC3DmB,EAAOC,YAAY9C,GACnB6C,EAAOC,YAAYH,GACnBF,EAAUhO,KAAKqO,YAAYD,QAZtBJ,EAAUhO,KAAKyL,cAAc,yBAC9BwC,EAAaX,aAAa/B,EAAW0C,EAAa/E,iBAAiB,eAAe,KAc9FwB,EAAUtN,UAAUuO,iBAAmB,SAAU2C,GAC7C,IAAK,IAAI1W,EAAI,EAAGA,EAAI0W,EAAWxW,OAAQF,IAAK,CACxC,IAAIqB,EAASuH,KAAKvJ,OAAOyF,wBAAwB4R,EAAW1W,IACxD2W,EAAajV,EAAckH,KAAKvJ,OAAQgC,EAAOM,UAE/CoU,EAA0C,aAD9C1U,EAASsV,GACmBZ,cAA+B,QAAU,UACrE1U,EAAO0U,cAAgBA,EAEvB,IAAK,IADD9U,EAAOD,OAAOC,KAAKI,GACdqB,EAAI,EAAGA,EAAIzB,EAAKf,OAAQwC,IACzB1B,OAAOwE,UAAUC,eAAeC,KAAKiR,EAAY1V,EAAKyB,MACtDiU,EAAW1V,EAAKyB,IAAMrB,EAAOJ,EAAKyB,KAG1CkG,KAAKgO,gBAAgBvV,EAAQ0U,GAAe,GACxCnN,KAAKvJ,OAAO6U,oBACZtL,KAAKwL,oBAIjBtB,EAAUtN,UAAUoR,gBAAkB,SAAUvV,EAAQ0U,EAAec,GACnE,IAAI3W,EAAS,EAKb,GAJA0I,KAAKkO,oBAAoBzV,EAAQ0U,IAC5Bc,GAAexV,EAAOI,YAAcmH,KAAKvJ,OAAO6U,oBACjDtL,KAAKmO,sBAAsB1V,EAAOI,YAElCJ,EAAOY,cAAgB2G,KAAKvJ,OAAO6U,mBAAoB,CACvD,IAAIjS,EAAeZ,EAAOY,cACrB5B,oBAAkBuI,KAAKvJ,OAAO2X,eAC/BpO,KAAKvJ,OAAO2X,aAAaC,eAAe/W,OAAS,GAAK0I,KAAKvJ,OAAO6U,qBAClEjS,EAAe2G,KAAKsO,wBAAwBjV,IAEhD/B,EAAS+B,EAAa/B,OACtB,IAAK,IAAIiX,EAAQ,EAAGA,EAAQjX,EAAQiX,IAC3BlV,EAAakV,GAAOC,eACjBnV,EAAakV,GAAOnV,gBACpB4G,KAAKgO,gBAAgB3U,EAAakV,GAAQpB,GAAe,GAGzDnN,KAAKkO,oBAAoB7U,EAAakV,GAAQpB,MAMlEjD,EAAUtN,UAAU0R,wBAA0B,SAAUjV,GACpD,IAAIkO,EAAQvH,KAIZ,OAH2B3G,EAAamE,OAAO,SAAUC,GACrD,OAAO8J,EAAM9Q,OAAO2X,aAAaC,eAAe7P,QAAQf,IAAM,KAItEyM,EAAUtN,UAAUuR,sBAAwB,SAAUvV,GAClD,IAAItB,EAAS,EACT+B,KACAZ,EAASK,EAAckH,KAAKvJ,OAAQmC,EAAaG,UACjDN,GAAUA,EAAOY,eACjBA,EAAeZ,EAAOY,eAErB5B,oBAAkBuI,KAAKvJ,OAAO2X,eAC/BpO,KAAKvJ,OAAO2X,aAAaC,eAAe/W,OAAS,GAAK0I,KAAKvJ,OAAO6U,qBAClEjS,EAAe2G,KAAKsO,wBAAwBjV,IAEhD/B,EAAS+B,GAAgBA,EAAa/B,OACtC,IAAImX,EAAU,EACVC,EAAoB,EACxB,IAAKjX,oBAAkBgB,GAAS,CAC5B,IAAK,IAAIrB,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IAAK,CAC1C,IACIuX,EADgB7V,EAAckH,KAAKvJ,OAAQ4C,EAAajC,GAAG2B,UAE1DtB,oBAAkBkX,KACkB,kBAAjCA,EAAexB,cACfsB,IAEsC,UAAjCE,EAAexB,eACpBuB,KAKRjW,EAAO0U,cADPsB,EAAU,GAAMC,EAAoB,GAAKA,IAAsBpX,EACxC,gBAEI,IAAtBoX,GAAuC,IAAZD,EACT,UAGA,QAE3BzO,KAAKkO,oBAAoBzV,EAAQA,EAAO0U,eACpC1U,EAAOI,YACPmH,KAAKmO,sBAAsB1V,EAAOI,cAI9CqR,EAAUtN,UAAU4O,gBAAkB,SAAUoD,GAC5C,IAAIrH,EAAQvH,KAER1I,EAAS,EACb,IAAKG,oBAAkBuI,KAAKvJ,OAAO2X,eAAiBpO,KAAKvJ,OAAO2X,aAAaC,eAAe/W,OAAS,EAAG,CACpG,IAAIuX,EAAe7O,KAAKvJ,OAAO2X,aAAaC,eACX,IAA7BrO,KAAKoK,aAAa9S,OAClB0I,KAAKoK,aAAeyE,EAGhB7O,KAAKoK,eAAiByE,IACtB7O,KAAKoK,aAAeyE,GAI5B7O,KAAKoK,aAAa9S,OAAS,IACtB0I,KAAKvJ,OAAOsB,eAAeV,QAAQC,QAAU0I,KAAKoK,aAAa9S,SAChE0I,KAAKoK,iBAGb,IAAI3L,GAAShH,oBAAkBuI,KAAKvJ,OAAO2X,eACtCpO,KAAKoK,aAAa9S,OAAS,EAAM0I,KAAKoK,aACvCpK,KAAKvJ,OAAO8G,SAEhB,GADAkB,EAAOjI,EAAawJ,KAAKvJ,QAAUuJ,KAAKvJ,OAAOyF,wBAA0BuC,GACpEhH,oBAAkBmX,GACnB,IAAK,IAAIxX,EAAI,EAAGA,EAAIqH,EAAKnH,OAAQF,IAC7B,GAAIwX,EAAU,CACV,GAA8B,UAA1BnQ,EAAKrH,GAAG+V,cACR,SAEJ1O,EAAKrH,GAAG+V,cAAgB,QACxBnN,KAAKkO,oBAAoBzP,EAAKrH,GAAIqH,EAAKrH,GAAG+V,oBAGlCnN,KAAKmK,cAAc3L,QAAQC,EAAKrH,KAC3B,IACTqH,EAAKrH,GAAG+V,cAAgB,UACxBnN,KAAKkO,oBAAoBzP,EAAKrH,GAAIqH,EAAKrH,GAAG+V,eACtCnN,KAAKvJ,OAAO6U,oBACZtL,KAAKmO,sBAAsB1P,EAAKrH,MAMnC,IAAbwX,GAAsB5O,KAAKvJ,OAAO2H,uBAClC4B,KAAKmK,iBACLnK,KAAKmI,mBACL1J,EAAKjB,OAAO,SAAUsR,GAClBA,EAAI3B,cAAgB,UACpB5F,EAAM2G,oBAAoBY,EAAKA,EAAI3B,kBAG3C7V,EAAS0I,KAAKmK,cAAc7S,OAC5B,IAAIgW,EAAWtN,KAAKvJ,OAAO2V,mBAAmB1D,iBAAiB,YAAY,GACvEpR,EAAS,GAAKmH,EAAKnH,OAAS,EACxBA,IAAWmH,EAAKnH,QAAWsX,GAK3BrB,eAAaD,IAAY,WACzBA,EAAS/E,UAAUsE,IAAI,aALvBU,eAAaD,IAAY,YACzBA,EAAS/E,UAAUsE,IAAI,WAQ3BU,eAAaD,IAAY,UAAW,YAG5CpD,EAAUtN,UAAUsR,oBAAsB,SAAUa,EAAetD,GAC/D,IAGIuD,EAGA1B,EANA7U,EAASuH,KAAKvJ,OAAOyF,wBAAwBsB,OAAO,SAAUC,GAC9D,OAAOA,EAAE1E,WAAagW,EAAchW,WAGpCkW,EAAcjP,KAAKvJ,OAAOyF,wBAAwBsC,QAAQ/F,EAAO,IACjEyW,EAAiBpW,EAAckH,KAAKvJ,OAAQsY,EAAchW,UAE9D,GAAIkW,GAAe,EAAG,CAClB,IAAIE,EAAKnP,KAAKvJ,OAAOoI,UAAUoQ,GAC3BG,OAAY,GACZpP,KAAKvJ,OAAOuI,YAAcgB,KAAKvJ,OAAOwI,sBACtCmQ,EAAYpP,KAAKvJ,OAAO4Y,qBAAqBJ,IAEjD3B,EAAW6B,EAAGzG,iBAAiB,YAAY,GAAKyG,EAAGzG,iBAAiB,YAAY,GAC1E0G,EAAU1G,iBAAiB,YAAY,GACxCjR,oBAAkB6V,IACnBC,eAAaD,IAAY,UAAW,SAAU,cAQtD,GALA0B,EAAgBE,EACZzX,oBAAkBuX,KAClBA,EAAgBD,GAEpBC,EAAc7B,cAAgB1B,EACX,UAAfA,GAA0BhU,oBAAkBsX,EAAcP,eACrC,IAAjBS,IAAqE,IAA/CjP,KAAKmI,gBAAgB3J,QAAQyQ,IACnDjP,KAAKmI,gBAAgB5P,KAAK0W,IAEqB,IAA/CjP,KAAKmK,cAAc3L,QAAQwQ,KAA2C,IAAjBC,IACnDxX,oBAAkBuI,KAAKvJ,OAAO2X,eAAiBpO,KAAKvJ,OAAO2X,aAAaC,eAAe/W,OAAS,GAClG0I,KAAKmK,cAAc5R,KAAKyW,IAEuB,IAA/ChP,KAAKmK,cAAc3L,QAAQwQ,IAAyBhP,KAAKvJ,OAAO2H,uBAA2B3G,oBAAkBuI,KAAKvJ,OAAO2X,eAAiBpO,KAAKvJ,OAAO2X,aAAaC,eAAe/W,OAAS,GAC3L0I,KAAKmK,cAAc5R,KAAKyW,IAEuB,IAA/ChP,KAAKmK,cAAc3L,QAAQwQ,IAA2BvX,oBAAkBuI,KAAKvJ,OAAO2X,eACjC,IAAnDpO,KAAKvJ,OAAO2X,aAAaC,eAAe/W,QACxC0I,KAAKmK,cAAc5R,KAAKyW,IAEuB,IAA/ChP,KAAKmK,cAAc3L,QAAQwQ,IAAyBvX,oBAAkBuI,KAAKvJ,OAAO2X,eAClFpO,KAAKmK,cAAc5R,KAAKyW,QAG3B,IAAoB,YAAfvD,GAA2C,kBAAfA,IAAmChU,oBAAkBsX,EAAcP,cAAe,CACpH,IAAIvU,EAAQ+F,KAAKmK,cAAc3L,QAAQwQ,GAIvC,IAHe,IAAX/U,GACA+F,KAAKmK,cAAcjN,OAAOjD,EAAO,IAEc,IAA/C+F,KAAKmI,gBAAgB3J,QAAQyQ,GAAqB,CAClD,IAAIK,EAAetP,KAAKmI,gBAAgB3J,QAAQyQ,GAChDjP,KAAKmI,gBAAgBjL,OAAOoS,EAAc,IAGlD,IAAIC,EAA+B,kBAAf9D,EAAiC,SAAW,KAAOA,EACnEwD,GAAe,IACVxX,oBAAkB6V,IACnBA,EAAS/E,UAAUsE,IAAI0C,KAInCrF,EAAUtN,UAAU6N,kBAAoB,SAAUvH,GAC9C,IAEI8G,EACAwF,EAHAjI,EAAQvH,KACRJ,EAAcsD,EAAKtD,YAGvB,GAAIzI,EAAiB6I,KAAKvJ,SAClBuJ,KAAKvJ,OAAO6U,mBACZ,GAAqB,YAAhB1L,GAA6C,WAAhBA,EAA2B,CACzD,IAAIqI,EAAOjI,KAAKvJ,OAAOiB,KAAKmH,UAE5B2Q,GADAxF,EAAYhK,KAAKvJ,OAAOyF,yBACA5E,OACxB0I,KAAKmI,mBACL,IAAK,IAAI/Q,EAAI,EAAGA,EAAIoY,EAAapY,IACxB6Q,EAAK7Q,GAAGmR,UAAUC,SAAS,iBAC5BxI,KAAKkO,oBAAoBlE,EAAU5S,GAAI4S,EAAU5S,GAAG+V,oBAI3D,GAAoB,WAAhBvN,GAA4C,QAAhBsD,EAAK7H,OAAkB,CACxD,IAAIoU,KACgB,WAAhB7P,EACA6P,EAAcvM,EAAKzE,KAGnBgR,EAAYlX,KAAK2K,EAAKzE,MAE1B,IAASrH,EAAI,EAAGA,EAAIqY,EAAYnY,OAAQF,IAAK,CACzC,GAAoB,WAAhBwI,EAA0B,CAC1B,IAAI3F,EAAQ+F,KAAKvJ,OAAO8G,SAASiB,QAAQiR,EAAYrY,IACjDkY,EAAetP,KAAKmI,gBAAgB3J,QAAQvE,GAChD+F,KAAKmI,gBAAgBjL,OAAOoS,EAAc,GAC1CtP,KAAKkO,oBAAoBuB,EAAYrY,GAAI,WAExCK,oBAAkBgY,EAAYrY,GAAGyB,aAClCmH,KAAKmO,sBAAsBsB,EAAYrY,GAAGyB,iBAIxB,QAArBqK,EAAKtD,aAAyBI,KAAKvJ,OAAO6U,mBAC/CpI,EAAKzE,KAAK0O,cAAgB,WAEL,cAAhBvN,GAA+C,cAAhBA,GAA+C,YAAhBA,IAC/DpJ,EAAawJ,KAAKvJ,WACtBuJ,KAAKmK,iBACLnK,KAAKmI,oBACL6B,GAAcvS,oBAAkBuI,KAAKvJ,OAAO2X,eAAiBpO,KAAKvJ,OAAO2X,aAAaC,eAAe/W,OAAS,EAC1G0I,KAAKvJ,OAAOyF,wBAA0B8D,KAAKvJ,OAAO8G,UAC5CmS,QAAQ,SAAUjX,GACxB,GAAI8O,EAAM9Q,OAAO2H,qBAAsB,CAC/B3F,EAAOW,gBACPmO,EAAM4G,sBAAsB1V,GAG5B8O,EAAM2G,oBAAoBzV,EAAQA,EAAO0U,eAE7C,IAAInP,EAAQ7E,EAAoBV,GAChCuF,EAAQuJ,EAAM+G,wBAAwBtQ,GACtC,IAAK,IAAI5G,EAAI,EAAGA,EAAI4G,EAAM1G,OAAQF,IAC1B4G,EAAM5G,GAAGgC,gBACTmO,EAAM4G,sBAAsBnQ,EAAM5G,IAE3B4G,EAAM5G,GAAkB,iBAAMK,oBAAkBuG,EAAM5G,KAC7DmQ,EAAM2G,oBAAoBlQ,EAAM5G,GAAI4G,EAAM5G,GAAG+V,oBAKjD1U,EAAOW,gBACPmO,EAAM4G,sBAAsB1V,GAG5B8O,EAAM2G,oBAAoBzV,EAAQA,EAAO0U,iBAIrDnN,KAAKwL,oBAKrBtB,EAAUtN,UAAU+S,kBAAoB,WACpC,OAAO3P,KAAKmK,eAEhBD,EAAUtN,UAAUgT,qBAAuB,WACvC,OAAO5P,KAAKmI,iBAET+B,KCndP2F,GAAwB,WAMxB,SAASA,EAAOpZ,GACZmM,OAAKC,OAAOiN,UACZ9P,KAAKvJ,OAASA,EACduJ,KAAKqK,mBAkFT,OAhFAwF,EAAOjT,UAAUyN,iBAAmB,WAChCrK,KAAKvJ,OAAO6T,GAAG,oBAAqBtK,KAAK+P,kBAAmB/P,MAC5DA,KAAKvJ,OAAO6T,GAAG,eAAgBtK,KAAKgQ,aAAchQ,MAClDA,KAAKvJ,OAAOiB,KAAK4S,GAAG,WAAYtK,KAAKiQ,gBAAiBjQ,OAE1D6P,EAAOjT,UAAU+N,oBAAsB,WAC/B3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,oBAAqB7K,KAAK+P,mBAC1C/P,KAAKvJ,OAAOoU,IAAI,eAAgB7K,KAAKgQ,cACrChQ,KAAKvJ,OAAOiB,KAAKmT,IAAI,WAAY7K,KAAKiQ,mBAE1CJ,EAAOjT,UAAUmT,kBAAoB,SAAU7M,GAC3C,IAEI+E,EACAiI,EAHAC,EAAcnQ,KAAKvJ,OAAO4Y,qBAC1Be,EAAapQ,KAAKvJ,OAAOoI,UAGzBwR,EAAUrQ,KAAKvJ,OAAO6Z,4BAA8B,GACpDtQ,KAAKvJ,OAAO8Z,6BAA+B,EAC3CF,IACAH,EAAkBlQ,KAAKvJ,OAAO+Z,qBAAqBhT,OAAO,SAAUC,GAChE,OAAOA,EAAEwN,cAAc,kBAAoB/H,EAAKzK,OAAOwB,MAAQ,SAAWiJ,EAAKzK,OAAOyB,MAAQ,OASlG+N,EANC/E,EAAKuN,WAAWnZ,OAMV4L,EAAKuN,WALLN,EAAY3S,OAAO,SAAUC,GAChC,OAAOA,EAAEwN,cAAc,kBAAoB/H,EAAKzK,OAAOwB,MAAQ,SAAWiJ,EAAKzK,OAAOyB,MAAQ,MAMtG,IAAK,IAAI9C,EAAI,EAAGA,EAAI6Q,EAAK3Q,OAAQF,IAAK,CAClC,IAAIsZ,EAAQ1Q,KAAKvJ,OAAOiB,KAAKiZ,oBAAoB1I,EAAK7Q,GAAGiV,aAAa,aAAa5N,KACnFwJ,EAAK7Q,GAAGmD,MAAMG,QAAUwI,EAAK7H,OACzBgV,IACAH,EAAgB9Y,GAAGmD,MAAMG,QAAUwI,EAAK7H,QAE5C,IAAIuV,EAAgC,SAAhB1N,EAAK7H,OAAoB,8CACvC,4CACN,GAAI+U,EAAWnI,EAAK7Q,GAAGyS,UAAUoB,cAAc2F,GAAgB,CAE3D,IAAK,IADDC,KACKC,EAAM,EAAGA,EAAMX,EAAY7Y,OAAQwZ,IACpCX,EAAYW,GAAK7F,cAAc,kBAAoByF,EAAMzW,MAAQ,SAAWyW,EAAMxW,MAAQ,KAC1F2W,EAAKtY,KAAK4X,EAAYW,IAG1BD,EAAKvZ,QACL0I,KAAK+P,mBAAoBU,WAAYI,EAAMxV,OAAQ6H,EAAK7H,YAKxEwU,EAAOjT,UAAUqT,gBAAkB,SAAUxS,GACrCuN,eAAavN,EAAE8D,OAAQ,cACvBvB,KAAKvJ,OAAOiB,KAAKkE,aAAamV,qBAAyD,SAAlC/Q,KAAKvJ,OAAOmF,aAAaC,MAC9EmE,KAAKvJ,OAAOiB,KAAKoE,WAAWkV,UAAUhG,eAAavN,EAAE8D,OAAQ,WAGrEsO,EAAOjT,UAAUoT,aAAe,WACPhQ,KAAKvJ,OAAOkJ,aAAanC,OAAO,SAAUC,GAC3D,OAAOA,EAAElG,eAEMD,QAAU0I,KAAKvJ,OAAOwa,cAAgBjR,KAAKvJ,OAAOuC,eACjEkY,YAAUlR,KAAKvJ,OAAO0a,QAAQC,uBAAuB,UAAU,IAAK,qBAG5EvB,EAAOjT,UAAUmN,QAAU,WACvB/J,KAAK2K,uBAQTkF,EAAOjT,UAAUmG,cAAgB,WAC7B,MAAO,UAEJ8M,KC3FPwB,GAAuB,WAMvB,SAASA,EAAM5a,GACXuJ,KAAKvJ,OAASA,EACdmM,OAAKC,OAAOyO,SACZtR,KAAKqK,mBAyCT,OAjCAgH,EAAMzU,UAAUmG,cAAgB,WAC5B,MAAO,SAMXsO,EAAMzU,UAAUyN,iBAAmB,WAC/BrK,KAAKvJ,OAAOiB,KAAK4S,GAAGiH,EAAsBvR,KAAKwR,cAAexR,OAElEqR,EAAMzU,UAAU+N,oBAAsB,WAClC3K,KAAKvJ,OAAOiB,KAAKmT,IAAI0G,EAAsBvR,KAAKwR,gBAEpDH,EAAMzU,UAAU4U,cAAgB,SAAUC,GACtC,IAAI/Z,EAAOY,YAAU,YAAamZ,GAC9BC,EAAcpZ,YAAU,UAAWmZ,GACvC/Z,EAAK2S,iBAAiBsH,EAAsB3R,KAAKvJ,OAAOiB,KAAKgN,eAC7DhN,EAAK2S,iBAAiBuH,EAAqB5R,KAAKvJ,OAAOiB,KAAK+M,cAC5D/M,EAAK2S,iBAAiBwH,EAAwB7R,KAAKvJ,OAAOiB,KAAKiN,iBAC/DuM,YAAUQ,GAAc,eAE5BL,EAAMzU,UAAUkV,MAAQ,WACpB9R,KAAKvJ,OAAOiB,KAAKoa,SAQrBT,EAAMzU,UAAUmN,QAAU,WACtB/J,KAAK2K,uBAEF0G,KC1DPzQ,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5DoQ,GAAgC,SAAU9P,GAE1C,SAAS8P,IACL,OAAkB,OAAX9P,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAiB/D,OAnBAY,GAAUmR,EAAgB9P,GAI1BZ,IACIc,cACD4P,EAAenV,UAAW,cAAU,GACvCyE,IACIc,YAAS,IACV4P,EAAenV,UAAW,kBAAc,GAC3CyE,IACIc,WAAS,aACV4P,EAAenV,UAAW,gBAAY,GACzCyE,IACIc,cACD4P,EAAenV,UAAW,WAAO,GACpCyE,IACIc,cACD4P,EAAenV,UAAW,qBAAiB,GACvCmV,GACT3P,iBC5CExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5DqQ,GAAmC,SAAU/P,GAE7C,SAAS+P,IACL,OAAkB,OAAX/P,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAuB/D,OAzBAY,GAAUoR,EAAmB/P,GAI7BZ,IACIc,WAAS,QACV6P,EAAkBpV,UAAW,YAAQ,GACxCyE,IACIc,WAAS,SACV6P,EAAkBpV,UAAW,yBAAqB,GACrDyE,IACIc,WAAS,WACV6P,EAAkBpV,UAAW,YAAQ,GACxCyE,IACIc,YAAS,IACV6P,EAAkBpV,UAAW,wBAAoB,GACpDyE,IACIc,WAAS,YACV6P,EAAkBpV,UAAW,oBAAgB,GAChDyE,IACIc,YAAS,IACV6P,EAAkBpV,UAAW,oBAAgB,GAChDyE,IACIc,YAAS,IACV6P,EAAkBpV,UAAW,oBAAgB,GACzCoV,GACT5P,iBCxCE6P,GAAwB,WAMxB,SAASA,EAAOxb,GACZuJ,KAAKvJ,OAASA,EACduJ,KAAKkS,eAAiB,KACtBlS,KAAKvJ,OAAOiB,KAAK4S,GAAG,kBAAmBtK,KAAKmS,qBAAsBnS,MAClEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,sBAAuBtK,KAAKoS,oBAAqBpS,MA2SzE,OAnSAiS,EAAOrV,UAAUiD,YAAc,SAAUqD,GACrC,GAAKA,EAAKzE,KAAV,CAGA,IAAIA,EAAOyE,EAAKzE,KACZnB,EAAamB,EAAK5F,WACtB,IAAKpB,oBAAkBgH,EAAK5F,cAAgBrB,EAAuBwI,KAAKvJ,WACjEuJ,KAAKvJ,OAAO4b,aAA2D,SAA1CrS,KAAKvJ,OAAO6b,aAAaC,cACpD/b,EAAawJ,KAAKvJ,UAAY8C,EAAUyG,KAAKvJ,SAAW,EAC5CuJ,KAAKvJ,OAAOuC,kBAAoBvB,oBAAkB6F,EAAW0C,KAAKvJ,OAAOwC,sBACtFqE,EAAW0C,KAAKvJ,OAAOwC,sBAAwB+G,KAAKvJ,OAAO+b,qBAC1Dha,EAAgBwH,KAAKvJ,OAAQyM,EAAKzE,KAAMuB,KAAKvJ,OAAOiB,KAAKwE,4BAE1DgH,EAAKvE,IAAIpE,MAAMG,QAAU,QAGjC,GAAIlE,EAAawJ,KAAKvJ,UAAY8C,EAAUyG,KAAKvJ,QAAS,CACtD,IAAIgc,EAAUzS,KAAKvJ,OACfic,EAAY1S,KAAKvJ,OAAOyF,wBAAwBsB,OAAO,SAAUsR,GACjE,OAAOzQ,WAASoU,EAAQxV,UAAW6R,KAASzQ,WAASoU,EAAQzV,gBAAiByB,KAElF,GAAIiU,EAAUpb,OAAS,EAAG,CACtB,IAAIoD,EAAUgY,EAAU,GAAGxZ,SAAW,YAAc,OACpDgK,EAAKvE,IAAIuO,aAAa,QAAS,YAAcxS,EAAU,MAI9CpC,YAAU,eAAgB4K,EAAKzE,OAE5CyS,YAAUhO,EAAKvE,KAAM,gBAErBuE,EAAKvE,IAAIsM,cAAc,qBACvB/H,EAAKvE,IAAIuO,aAAa,gBAAiB,QAElChK,EAAKvE,IAAIsM,cAAc,wBAC5B/H,EAAKvE,IAAIuO,aAAa,gBAAiB,SAEvClN,KAAKvJ,OAAO+b,mBAAqBxS,KAAKvJ,OAAOuC,gBACxCvB,oBAAkBgH,EAAK5F,cACxBqK,EAAKvE,IAAIpE,MAAMG,QAAU,SAGjCsF,KAAKvJ,OAAO2S,QAAQwI,EAAqB1O,KAQ7C+O,EAAOrV,UAAU2C,WAAa,SAAU2D,GACpC,GAAKA,EAAKzE,KAAV,CAGA,IAEIxE,EAIA0Y,EANAjb,EAAOsI,KAAKvJ,OAAOiB,KACnB+G,EAAOyE,EAAKzE,KAGZmU,EADcnb,oBAAkBgH,EAAKoU,aACjBpU,EAAKvE,MAAQuE,EAAKoU,YACtCC,EAAkB,EAElBpT,EAASM,KAAKvJ,OAAOsc,eAAe7P,EAAKxD,OAAOiB,KAChDqS,EAAavU,EAAK+P,aAClByE,EAAgBjT,KAAKvJ,OAAOwI,mBAK5BhF,EAJCxC,oBAAkBgH,EAAK5F,YAIhB4F,EAAKxE,MAHLwE,EAAK5F,WAAWoB,MAa5B,IANI+F,KAAKvJ,OAAOyc,6BAA+BlT,KAAKvJ,OAAOuC,cACzCgH,KAAKvJ,OAA8B,wBAAEyM,EAAKxD,OAAOiB,KAGjDjJ,EAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,QAEnCX,KAAKvJ,OAAO2I,iBAAyC,QAArB8D,EAAKtD,aACjD,mBAD0EsD,EAAKtD,aACtC,WAArBsD,EAAKtD,cAA4BnI,oBAAkByL,EAAK1D,KAAKyL,cAAc,gBAqD9FjL,KAAKkS,iBACVlS,KAAKkS,eAAiB,UAtD+F,CAMrH,IAAK,IALD1E,EAAYhB,gBAAc,OAASC,UAAW,2BAC9C2G,EAAkB5G,gBAAc,QAChCC,UAAW,iBACX4G,OAAQ,uCAEHC,EAAI,EAAGA,EAAIV,EAAKU,IACrBR,GAAmB,GACnBtF,EAAUK,YAAYuF,EAAgBrG,aAE1C,IAAIwG,EAAgB9b,oBAAkBgH,EAAK+U,yBACN/U,EAAKrF,gBAApCqF,EAAK+U,wBAIX,GAHID,IAAiB9b,oBAAkBgH,EAAKpF,gBACxCka,IAA8C,IAA7B9U,EAAKpF,aAAa/B,SAEnCic,EAAc,CACdrC,YAAUhO,EAAK1D,MAAO,iBACtB,IAAIiU,EAAajH,gBAAc,QAAUC,UAAW,YAChDiH,OAAS,EAETA,EADA1T,KAAKvJ,OAAOuC,cACHyF,EAAKvF,WACTzB,oBAAkBgH,EAAKuB,KAAKvJ,OAAOwC,sBAAwBwF,EAAKuB,KAAKvJ,OAAOwC,uBAC5E+G,KAAKvJ,OAAO+b,qBAGL/T,EAAKvF,WAAaV,EAAgBwH,KAAKvJ,OAAQgI,EAAMuB,KAAKvJ,OAAOiB,KAAKwE,0BAEtFgV,YAAUuC,GAAa,EAAW,mBAAqB,sBACvDX,GAAmB,GACnBtF,EAAUK,YAAY4F,GACtBL,EAAgB7Y,MAAM8S,MAAQ,MAC9ByF,GAAmB,EACnBtF,EAAUK,YAAYuF,EAAgBrG,kBAEjC6F,IAAQA,IAAQnU,EAAKvE,SAE1B4Y,GAAmB,GACnBtF,EAAUK,YAAYuF,EAAgBrG,aACtCS,EAAUK,YAAYuF,EAAgBrG,cAM1C4F,EAAcnG,gBAAc,QAAUC,UAAW,eAC7CzM,KAAKvJ,OAAO2W,gBACZuF,EAAYpY,MAAM8S,MAAQ,eAAiByF,EAAkB,OAEjE5B,YAAUhO,EAAK1D,MAAO,iBAAmBvF,EAAQ,QAAUwE,EAAKvE,OAChE8F,KAAK2T,eAAezQ,EAAMyP,GAC1BnF,EAAUK,YAAY8E,GACtBzP,EAAK1D,KAAKqO,YAAYL,GAM1B,GADc9V,EAAK4Y,4BAA8B,GAAK5Y,EAAK6Y,6BAA+B,EAgBrF,CACD,IAAIqD,EAAqBlc,EAAKmc,wBAC1BC,EAAoBpc,EAAKqc,uBACzBC,EAAiBtc,EAAKuc,oBACrBL,EAAmBtc,OAAS,GAAMsc,EAAmB,GAAGM,QAAUhR,EAAKxD,OAAOwU,MAC/EhD,YAAUhO,EAAK1D,MAAO,iBAAmBvF,EAAQ,QAAUwE,EAAKvE,OAE1D4Z,EAAkBxc,OAAS,GAAMwc,EAAkB,GAAGI,QAAUhR,EAAKxD,OAAOwU,MAClFhD,YAAUhO,EAAK1D,MAAO,iBAAmBvF,EAAQ,QAAUwE,EAAKvE,OAE1D8Z,EAAe1c,OAAS,GAAM0c,EAAe,GAAGE,QAAUhR,EAAKxD,OAAOwU,OAC5EhD,YAAUhO,EAAK1D,MAAO,iBAAmBvF,EAAQ,QAAUwE,EAAKvE,YAzBhE+Y,EAAgBjT,KAAKvJ,OAAO2I,iBAAmB6T,EAAgB,GAC/Dvb,EAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,OAASsS,EAC9C/B,YAAUhO,EAAK1D,MAAO,iBAAmBvF,EAAQ,QAAUwE,EAAKvE,OAE3D+Y,EAAgBjT,KAAKvJ,OAAO2I,iBAAmB6T,EAAgB,IACnEvb,EAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,OAASsS,GACxCvb,EAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,OAASsS,EAAgB,GACrE/B,YAAUhO,EAAK1D,MAAO,iBAAmBvF,EAAQ,QAAUwE,EAAKvE,OAE3D+Y,IAAkBjT,KAAKvJ,OAAO2I,iBAAmB6T,EAAgB,GACtEvb,EAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,OAASX,KAAKvJ,OAAO2I,gBAAkB,GAC5E8R,YAAUhO,EAAK1D,MAAO,iBAAmBvF,EAAQ,QAAUwE,EAAKvE,OAiBxE,IAAKzC,oBAAkBiI,IAAWA,EAAOnI,eACrCyI,KAAKvJ,OAAO0d,OAAO,iBAAkBjR,GACjClD,KAAKvJ,OAAO2W,eAAe,CAC3B,IAAIgH,EAAkBlR,EAAK1D,KAAKkJ,iBAAiB,YAAY,GAE7DoK,GADYuB,SAASD,EAAgB7Z,MAAM8S,MAAO,IAElDyF,GAAmB,IAEfH,EADAjb,EAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,OAASX,KAAKvJ,OAAO2I,gBAC5C8D,EAAK1D,KAAKyL,cAAc,eAGxB/H,EAAK1D,KAAKyL,cAAc,oBAE9B1Q,MAAM8S,MAAQ,eAAiByF,EAAkB,MAGrE,GAAIE,EAAY,CACZ9B,YAAUhO,EAAK1D,MAAO,iBACtB,IAAI8U,EAAchc,YAAU4K,EAAKxD,OAAOwU,MAAOhR,EAAKzE,MACN,MAA1CyE,EAAK1D,KAAKyL,cAAc,eACxB/H,EAAK1D,KAAKyL,cAAc,eAAe0C,UAAY2G,EAGnDpR,EAAK1D,KAAKmO,UAAY2G,EAG1B7c,oBAAkBuI,KAAKvJ,OAAO8d,cAC9BvU,KAAKvJ,OAAO2S,QAAQuI,EAAsBzO,KAGlD+O,EAAOrV,UAAU+W,eAAiB,SAAUzQ,EAAMyP,GAC9C,IACI6B,EADcnW,WAAS,cAAe2B,KAAKvJ,QAClBuJ,KAAKvJ,OAAO2I,iBACrCqV,EAAa,aACbC,EAAWxR,EAAKxD,OAAOzF,MACvBxC,oBAAkB+c,EAAWN,QAC7BhR,EAAK1D,KAAK0N,aAAa,gBAAiBwH,EAAW,IAEnDF,EAAWN,QAAUhR,EAAKxD,OAAOwU,OAAUzc,oBAAkB+c,EAAWG,YACxEzR,EAAKxD,OAAOiV,SAAWH,EAAWG,SAClCzR,EAAKxD,OAAO+U,GAAcG,mBAAiB1R,EAAKxD,OAAOiV,UACvDzR,EAAK1D,KAAK+I,UAAUsE,IAAI,mBAE5B,IAAIgI,EAAwD,MAA1C3R,EAAK1D,KAAKyL,cAAc,eACtC/H,EAAK1D,KAAKyL,cAAc,eAAe0C,UAAYzK,EAAK1D,KAAKmO,UACjE,GAAsC,iBAA1BzK,EAAKxD,OAAe,UAAkBM,KAAKkS,eACnD4C,iBAAenC,EAAa3S,KAAKkS,gBACjClS,KAAKkS,eAAiB,KACtBhP,EAAK1D,KAAKmO,UAAY,QAErB,GAAIzK,EAAK1D,KAAK+I,UAAUC,SAAS,kBAAmB,CACrD,IAAIrQ,EAAM+K,EAAK1D,KAAKuV,SAASzd,OACzB0d,EAAShV,KAAKvJ,OAAO0a,QAAQ8D,GAAK/R,EAAKxD,OAAOiB,IAClD,GAAI6T,EAAWN,QAAUhR,EAAKxD,OAAOwU,OAAUzc,oBAAkB+c,EAAWG,UAqBxE,KAAa,EAAOxc,EAAKA,EAAM+K,EAAK1D,KAAKuV,SAASzd,OAC9Cqb,EAAY9E,YAAY3K,EAAK1D,KAAKuV,SADzB,QArBsE,CACnF,IAAIG,EAAU,UAEd,GAAIlV,KAAKvJ,OAAO0e,SAA6C,iBAA1BjS,EAAKxD,OAAe,SACnDwD,EAAKxD,OAAO+U,GAAYvR,EAAKzE,KAAMuB,KAAKvJ,OAAQ,WAAYue,EAAQ,KAAM,KAAMrC,GAC5Elb,oBAAkBuI,KAAKvJ,OAAOiB,KAAKwd,MACnClV,KAAKvJ,OAAOiB,KAAKwd,GAAWlV,KAAKvJ,OAAOye,IAE5ClV,KAAKvJ,OAAO0d,OAAO,sBAAuBnU,KAAKvJ,OAAOye,IACtDlV,KAAKvJ,OAA2B,2BAE/B,CACD,IACI2e,EAASlS,EAAKxD,OAAO+U,GAAYtY,UAASlC,MAAS,IAAMiJ,EAAKzE,MAAOuB,KAAKvJ,OAAQ,WAAYue,EAAQhV,KAAKvJ,OAAU,kBACzHqe,iBAAenC,EAAayC,UAEzBlS,EAAKxD,OAAOiV,gBACZzR,EAAKxD,OAAO+U,GACnBvR,EAAK1D,KAAKmO,UAAY,SAS1BgF,EAAYhF,UAAYkH,EACxB3R,EAAK1D,KAAKmO,UAAY,IAQ9BsE,EAAOrV,UAAUyY,gCAAkC,SAAUC,GACzD,IAAI/N,EAAQvH,KACRA,KAAKvJ,OAAO0e,SAEZnV,KAAKvJ,OAAO8e,eAAe,uBAAmBC,EAAW,WAMrD,IAAK,IAHDC,EAAUlO,EAAM9Q,OAAOiB,KAAKge,gBAC5BC,EAASpO,EAAM9Q,OAAOiB,KAAKke,iBAC3BC,EAAYtO,EAAM9Q,OAAOiB,KAAKoe,yBAAyBR,GAClDxb,EAAI,EAAGA,EAAI2b,EAAQne,OAAQwC,IAChC,GAAI2b,EAAQ3b,GAAGic,YAActe,oBAAkBge,EAAQ3b,GAAGG,OAAQ,CAC9D,IAAIuF,EAAOiW,EAAQ3b,GAAQ,MAAE+b,GACzBG,EAAe,IAAIC,eAAa1O,EAAM9Q,OAAOiB,KAAM6P,EAAM9Q,OAAOiB,KAAKwe,gBACrEC,EAAK5O,EAAM9Q,OAAO2f,iBAAiBX,EAAQ3b,GAAGG,MAAO4b,EAAYF,GACrEK,EAAaK,UAAUF,EAAI3W,EAAMiW,EAAQ3b,GAAG2E,MAAQxE,MAAOwb,EAAQ3b,GAAS,QAC5E,IAAIwc,EAAW/O,EAAM9Q,OAAOoI,UAAU/E,GAAG2F,MAAMoW,GAC/CtO,EAAMhI,YAAad,KAAMgX,EAAQ3b,GAAG2E,KAAMe,KAAM8W,EAAU5W,OAAQF,EAAKE,aAM3FuS,EAAOrV,UAAUuV,qBAAuB,SAAUjP,GAC9ClD,KAAKkS,eAAiBhP,EAAKyR,UAE/B1C,EAAOrV,UAAUwV,oBAAsB,SAAUlP,GAG7ClD,KAAKvJ,OAAc,QAAIyM,EACvBlD,KAAKvJ,OAAO0d,OAAO,sBAAuBnU,KAAKvJ,OAAc,SAC7DuJ,KAAKvJ,OAA2B,wBAEpCwb,EAAOrV,UAAUmN,QAAU,WACvB/J,KAAKvJ,OAAOiB,KAAKmT,IAAI,kBAAmB7K,KAAKmS,sBAC7CnS,KAAKvJ,OAAOiB,KAAKmT,IAAI,sBAAuB7K,KAAKoS,sBAE9CH,KCpTPsE,GAAkC,WAClC,SAASA,EAAiB7e,GACtBsI,KAAKwW,aAAe,eACpBxW,KAAKvJ,OAASiB,EACdsI,KAAKyW,eACLzW,KAAK0W,WACL1W,KAAK2W,iBACL3W,KAAK4W,aAAe,EACpB5W,KAAK6W,cACL7W,KAAK8W,cAAe,EACpB9W,KAAKqK,mBACLrK,KAAK+W,eACL/W,KAAKjF,iBAAmBtD,oBAAkBuI,KAAKvJ,OAAOuG,iBA8jB1D,OAxjBAuZ,EAAiB3Z,UAAUyN,iBAAmB,WAC1CrK,KAAKvJ,OAAO6T,GAAG,oBAAqBtK,KAAKgX,uBAAwBhX,MACjEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,gBAAiBtK,KAAKiX,aAAcjX,MACxDA,KAAKvJ,OAAO6T,GAAG,eAAgBtK,KAAKkX,WAAYlX,MAChDA,KAAKvJ,OAAO6T,GAAG6M,EAAqBnX,KAAKoX,qBAAsBpX,MAC/DA,KAAKvJ,OAAO6T,GAAG,gBAAiBtK,KAAKqX,cAAerX,OAMxDuW,EAAiB3Z,UAAU+N,oBAAsB,WACzC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAIsM,EAAqBnX,KAAKoX,sBAC1CpX,KAAKvJ,OAAOoU,IAAI,oBAAqB7K,KAAKgX,wBAC1ChX,KAAKvJ,OAAOoU,IAAI,eAAgB7K,KAAKkX,YACrClX,KAAKvJ,OAAOoU,IAAI,gBAAiB7K,KAAKqX,eACtCrX,KAAKvJ,OAAOiB,KAAKmT,IAAI,gBAAiB7K,KAAKiX,gBAQ/CV,EAAiB3Z,UAAUmN,QAAU,WACjC/J,KAAK2K,uBAMT4L,EAAiB3Z,UAAU0a,SAAW,WAClC,OAAMtX,KAAKvJ,OAAOC,sBAAsBC,eAc5C4f,EAAiB3Z,UAAU2a,kBAAoB,SAAU9Y,GACrD,IAAI8I,EAAQvH,KAIZ,GAHAA,KAAKvJ,OAAO8G,SAAyC,IAA7BnF,OAAOC,KAAKoG,GAAMnH,QAAkB0I,KAAKvJ,OAAOC,sBAAsBC,iBAC1FqJ,KAAKvJ,OAAOC,WAChBsJ,KAAKvJ,OAAO6G,cACP9G,EAAawJ,KAAKvJ,UAAY8C,EAAUyG,KAAKvJ,SAAYgI,aAAgB9H,iBAAiB8H,aAAgBhC,OAAQ,CACnH,IAAIjD,EAAKwG,KAAKvJ,OAAOC,WACrB,GAAIsJ,KAAKvJ,OAAOuG,gBAAiB,CAG7B,GAFAgD,KAAKvJ,OAAO+gB,MAAQ/f,oBAAkBuI,KAAKvJ,OAAO+gB,OAC9C,IAAIC,QAAUzX,KAAKvJ,OAAO+gB,MAC1BxX,KAAKvJ,OAAOuG,gBAAiB,CAC7B,IAAI0a,EAAY1X,KAAKvJ,OAAO+gB,MAAMG,OAAOna,OAAO,SAAUoa,GAAS,MAAqB,cAAdA,EAAMhgB,MAC5EoI,KAAKvJ,OAAOuC,gBAAkB0e,EAAUpgB,SACxC0I,KAAKvJ,OAAO+gB,MAAMK,MAAM7X,KAAKvJ,OAAOuG,gBAAiB,QAAS,MAC9DgD,KAAKvJ,OAAO+gB,MAAMM,UAAU,YAAa9X,KAAKvJ,OAAOwG,YAG7D,IAAK+C,KAAKvJ,OAAOshB,gBAAiB,CAC9B,IAAIC,EAAMhY,KAAKvJ,OAAO+gB,MAAMS,QAC5BD,EAAIE,YACJF,EAAMA,EAAIvO,QAAQzJ,KAAKvJ,OAAOuG,mBAC1B9F,iBAAkB,EACtBsC,EAAG2e,aAAaH,GAAKI,KAAK,SAAU3a,GAChC8J,EAAMkP,YAAc4B,WAASC,SAAS7a,EAAE2X,OAAQ7N,EAAM9Q,OAAOuG,iBAAiB,GAIlE,IAHF1E,YAAU,sBAAuBiP,EAAM9Q,QAAQ+G,OAAO,SAAUC,GACtE,MAAoC,OAA7BA,EAAE8a,YAAYC,aACtBlhB,SAECmhB,WAAS,+BAA+B,EAAMlR,EAAM9Q,QAC/CgB,oBAAkB8P,EAAMmR,mBACzBD,WAAS,UAAU,EAAOlR,EAAMmR,iBAChCra,WAAS,oBAAqBkJ,EAAM9Q,QAAQkiB,mBAAmBpR,EAAMmR,iBACrEnR,EAAMmR,gBAAkB,MAE5BnR,EAAM9Q,OAAOiB,KAAKkhB,wBAM7Bna,aAAgBhC,OACrBuD,KAAK6Y,gBAAgBpa,IAG7B8X,EAAiB3Z,UAAUic,gBAAkB,SAAUpa,GAGnD,GAFAuB,KAAK2W,iBACL3W,KAAK0W,WACA1W,KAAKvJ,OAAOwG,UAKb,IAAK,IADD5E,EAAOD,OAAOC,KAAKoG,GACdrH,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAAK,CAClC,IAAI0hB,EAAWra,EAAKrH,GACpB4I,KAAK2W,cAAcpe,KAAK4D,YAAW2c,IAC9BrhB,oBAAkBqhB,EAAS9Y,KAAKvJ,OAAOwG,aACxC+C,KAAK0W,QAAQne,KAAKugB,EAAS9Y,KAAKvJ,OAAOwG,iBAR/C+C,KAAK2W,cAAgBlY,EAYzB,GAAIuB,KAAKjF,gBAAiB,CAIjB,IAHDge,KACAC,EAAc,IAAIriB,cAAYqJ,KAAK2W,eAAesC,cAAa,IAAIxB,SAClEyB,MAAMlZ,KAAKvJ,OAAOuG,kBACvB,IAAS5F,EAAI,EAAGA,EAAI4hB,EAAY1hB,OAAQF,IAAK,CACzC,IAAI+hB,EAAYH,EAAY5hB,GACxB6C,EAAQ+F,KAAK0W,QAAQlY,QAAQ2a,EAAUvhB,KAC3C,IAAKH,oBAAkB0hB,EAAUvhB,MACzBqC,GAAS,EADjB,CAEQ,IAAI+P,EAAamP,EAAe,MAChCnZ,KAAK2W,cAAc1c,GAAO+F,KAAKvJ,OAAO0G,cAAgB6M,OAI9D+O,EAASxgB,KAAK2J,MAAM6W,EAAUI,EAAUC,OAE5CpZ,KAAK2W,cAAgB3W,KAAKqZ,oBAAoBN,GAElD,GAAK3gB,OAAOC,KAAK2H,KAAK2W,eAAerf,OAMjC0I,KAAKsZ,cAActZ,KAAK2W,mBANiB,CACzC,IACI4C,IAAkBvZ,KAAKvJ,OAAOC,sBAAsBC,gBAAgBqJ,KAAKvJ,OAAc,QAC3FuJ,KAAKvJ,OAAO8G,SAAWgc,EAAiBvZ,KAAKvJ,OAAiB,cAKlEuJ,KAAK4W,aAAe,GAYxBL,EAAiB3Z,UAAUyc,oBAAsB,SAAUN,GAEvD,IADA,IAAI3D,KACGpV,KAAK2W,cAAcrf,OAAS,GAAKyhB,EAASzhB,OAAS,GAAG,CACzD,IAAI2C,EAAQ8e,EAASva,QAAQwB,KAAK2W,cAAc,KACjC,IAAX1c,EACA+F,KAAK2W,cAAc6C,SAGnBpE,EAAO7c,KAAKyH,KAAK2W,cAAc6C,SAC/BT,EAAS7b,OAAOjD,EAAO,IAG/B,OAAOmb,GASXmB,EAAiB3Z,UAAUoa,uBAAyB,SAAU9T,GAC1D,IAAIjL,EAAUiL,EAAKkS,OACnB,GAAKpV,KAAKvJ,OAAOshB,iBAAoB/X,KAAKyW,YAAYnf,QAChD0I,KAAKvJ,OAAOgjB,kBAKd,GAAKzZ,KAAKvJ,OAAOgjB,kBAoBRhiB,oBAAkBQ,IACnB+H,KAAKuX,kBAAkBtf,QApB3B,IAAK,IAAI6W,EAAM,EAAGA,EAAM7W,EAAQX,OAAQwX,IAChC5X,EAAgB8I,KAAKvJ,SAAWwB,EAAQ6W,GAAK1V,iBAAmB4G,KAAKvJ,OAAOuC,gBAC5Ef,EAAQ6W,GAAK5V,UAAW,GAExBzB,oBAAkBQ,EAAQ6W,GAAK7U,SAC/BhC,EAAQ6W,GAAK3U,SAAWgC,YAAWlE,EAAQ6W,IAC3C7W,EAAQ6W,GAAK/V,SAAW2gB,SAAO1Z,KAAKvJ,OAAO0a,QAAQ8D,GAAK,UACxDwD,WAAS,sBAAwBxgB,EAAQ6W,GAAK/V,SAAUd,EAAQ6W,GAAM9O,KAAKvJ,QAC3EwB,EAAQ6W,GAAK5U,MAAQ,EACrBjC,EAAQ6W,GAAK7U,MAAQ0f,KAAKC,KAAqB,IAAhBD,KAAKE,WAC/B5hB,EAAQ6W,GAAK9O,KAAKvJ,OAAOshB,mBACyC,IAAnE/X,KAAKyW,YAAYjY,QAAQvG,EAAQ6W,GAAK9O,KAAKvJ,OAAOwG,eAClDhF,EAAQ6W,GAAK1V,iBAAkB,GAEnCnB,EAAQ6W,GAAK3B,cAAgB,gBAnBzCnN,KAAK0Y,gBAAkBxV,EACvBuV,WAAS,UAAU,EAAMvV,GA4B7BA,EAAKkS,OAASpV,KAAKvJ,OAAOgjB,kBAAoBzZ,KAAKvJ,OAAO8G,SAAWtF,EACrE+H,KAAKvJ,OAAO0d,OAAO,gBAAiBjR,IAaxCqT,EAAiB3Z,UAAUwa,qBAAuB,SAAU0C,EAAYC,GACpE,IAAIC,EAAWha,KAAKvJ,OAAOoI,UAC3B,GAAImB,KAAKvJ,OAAO8d,YAAa,CACzB,IAAItM,EAAOjI,KAAKvJ,OAAOwjB,kBAAkBhS,KACzC+R,KAAcvR,MAAM3L,KAAKmL,GAE7B,IAAIiS,EACJ,GAAIJ,EAAW7R,KAAK3Q,OAAS,EAAG,CACvByiB,IACDD,EAAWrhB,OAAOS,UAAW,GAEjC,IAAK,IAAI9B,EAAI,EAAGA,EAAI0iB,EAAW7R,KAAK3Q,OAAQF,IAAK,CAE7C,GADA0iB,EAAW7R,KAAK7Q,GAAGmD,MAAMG,QAAU,YAC/BsF,KAAKvJ,OAAOgjB,kBAAmB,CAC/B,IAAIU,EAAYL,EAAW7R,KAAK7Q,GAAGga,uBAAuB,sBAAsB,GAChF8I,EAAcla,KAAKvJ,OAAO8d,YAAcvU,KAAKvJ,OAAOiB,KAAKwE,wBAAwB4d,EAAW7R,KAAK7Q,GAAGyS,UAChG7J,KAAKvJ,OAAOiB,KAAKiZ,oBAAoBmJ,EAAW7R,KAAK7Q,GAAGiV,aAAa,aAAa5N,MACjFhH,oBAAkB0iB,IAAcD,EAAYhhB,WAC7CgY,YAAUiJ,GAAY,oBACtB5M,eAAa4M,GAAY,uBAE7B,IAAIC,MACJA,EAAYJ,EAASxc,OAAO,SAAUmE,GAClC,OAAOA,EAAEsJ,cAAc,kBAAoBiP,EAAYjgB,MAAQ,SAAWigB,EAAYhgB,MAAQ,OAEpF5C,QAAU4iB,EAAYhhB,UAChC8G,KAAKoX,sBAAuB3e,OAAQyhB,EAAajS,KAAMmS,EAAWC,UAAWP,EAAWO,YAAa,GAG7G,IAAIC,EAAcR,EAAW7R,KAAK7Q,GAAG6T,cAAc,wBAC9CxT,oBAAkB6iB,IACnBta,KAAKvJ,OAAOiB,KAAK6iB,gBAAgB7G,OAAO4G,SAKhDta,KAAKwa,sBAAuB/hB,OAAQqhB,EAAWrhB,OAAQwP,KAAM6R,EAAW7R,KAAMoS,UAAWP,EAAWO,aAG5G9D,EAAiB3Z,UAAU4d,qBAAuB,SAAUV,GACxD,IAAIvS,EAAQvH,KACRkD,GAASvE,IAAKmb,EAAWO,UAAW5b,KAAMqb,EAAWrhB,QACrDe,EAAKwG,KAAKvJ,OAAOC,WACjBshB,EAAMhY,KAAKvJ,OAAOiB,KAAK+iB,gBAAgBC,gBACvCC,EAAc3C,EAAIE,QAAQ1a,OAAO,SAAUC,GAAK,MAAgB,WAATA,EAAEmd,IAA4B,YAATnd,EAAEmd,KAClF5C,EAAIE,QAAUyC,EACd3C,EAAI9gB,iBAAkB,EACtB8gB,EAAIH,MAAM7X,KAAKvJ,OAAOuG,gBAAiB,QAAS8c,EAAWrhB,OAAOuH,KAAKvJ,OAAOwG,YAC9E4d,cAAY7a,KAAKvJ,OAAO0a,SACxB3X,EAAG2e,aAAaH,GAAKI,KAAK,SAAU3a,GAChC,IAAIvF,EAAQqP,EAAM9Q,OAAOiB,KAAKojB,gBAAgBrS,QAC1CsS,EAAM7iB,EAAMsG,QAAQsb,EAAWrhB,SACtB,IAATsiB,GACAxT,EAAM9Q,OAAOiB,KAAKge,gBAAgBhG,QAAQ,SAAUzH,GAC5CA,EAAKxJ,KAAK1F,WAAa+gB,EAAWrhB,OAAOM,WACzCgiB,EAAM9S,EAAKhO,SAIvB,IAAI+gB,EAAY1iB,YAAU,mBAAoBmF,GAC1C2X,EAAS3X,EAAE2X,OACf0E,EAAWrhB,OAAOY,aAAe+b,EACjC,IAAK,IAAIzT,EAAI,EAAGA,EAAIyT,EAAO9d,OAAQqK,IAAK,CACpCyT,EAAOzT,GAAGxH,SAAWgC,YAAWiZ,EAAOzT,IACvCyT,EAAOzT,GAAGzH,MAAQ4f,EAAWrhB,OAAOyB,MAAQ,EAC5Ckb,EAAOzT,GAAG1H,MAAQ0f,KAAKC,KAAqB,IAAhBD,KAAKE,UACjC,IAAIvc,EAAanB,YAAW2d,EAAWrhB,eAChC6E,EAAWjE,aAClB+b,EAAOzT,GAAG9I,WAAayE,EACvB8X,EAAOzT,GAAGrD,eAAiBwb,EAAWrhB,OAAOM,SAC7Cqc,EAAOzT,GAAG5I,SAAW2gB,SAAOnS,EAAM9Q,OAAO0a,QAAQ8D,GAAK,UACtDG,EAAOzT,GAAGwL,cAAgB,UAC1BsL,WAAS,sBAAwBrD,EAAOzT,GAAG5I,SAAUqc,EAAOzT,GAAI4F,EAAM9Q,SAEjE2e,EAAOzT,GAAG4F,EAAM9Q,OAAOshB,mBAAsF,IAAlExQ,EAAMkP,YAAYjY,QAAQ4W,EAAOzT,GAAG4F,EAAM9Q,OAAOwG,aACxF+d,IAAcA,EAAUrZ,KAC7ByT,EAAOzT,GAAGvI,iBAAkB,EAC5Bgc,EAAOzT,GAAGzI,UAAW,GAEzBhB,EAAMgF,OAAO6d,EAAMpZ,EAAI,EAAG,EAAGyT,EAAOzT,IAMxC,GAJA8W,WAAS,SAAUvgB,EAAOuF,GAC1Bgb,WAAS,SAAU,sBAAuBhb,GAC1C8J,EAAM9Q,OAAO2S,QAAQ6R,EAAuBxd,GAC5Cmb,cAAYrR,EAAM9Q,OAAO0a,SACrB5J,EAAM9Q,OAAOiB,KAAKwjB,WAAW5jB,OAAS,IAAMiQ,EAAM9Q,OAAO2H,qBAAsB,CAC/E,IAAI+c,EAAY7iB,YAAU,QAASmF,GAKnC,GAHIhG,oBAAkB0jB,KAClBA,EAAY9c,WAAS,yBAA0BkJ,EAAM9Q,QAAQ2kB,eAAe,IAAI3D,WAE/EhgB,oBAAkB0jB,GAAY,CAC/B,IAAIE,EAAeF,EAAUjD,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,iBAATA,EAAEV,KACpEnd,EAAU,OAAI8J,EAAM9Q,OAAO8kB,cAAcC,sBAAsBH,EAAc5d,EAAU,QAAG,IAGlGA,EAAE8Q,MAAQhH,EAAM9Q,OAAOiB,KAAK4a,aAAamJ,kBACzC,IAAIC,KACAnU,EAAM9Q,OAAO2H,sBACbmJ,EAAMoU,oBAAoBD,GAE9B,IAAIE,GAAe3hB,MAAO8gB,EAAK/Q,UAAWoL,GACtC7N,EAAM9Q,OAAOolB,wBACbtU,EAAM9Q,OAAO0d,OAAO,yBAA0ByH,GAG9Cvd,WAAS,oBAAqBkJ,EAAM9Q,QAAQkiB,mBAAmBlb,EAAGie,GAEtEnU,EAAM9Q,OAAO2S,QAAQ0S,EAAiB5Y,MAG9CqT,EAAiB3Z,UAAU+e,oBAAsB,SAAUD,GACvDA,EAAY9b,YAAc,UAC1B6Y,WAAS,oBAAoB,EAAMiD,GACnC,IAAIK,EAAgB1d,WAAS,qBAAsB2B,KAAKvJ,QACpDulB,EAAc3d,WAAS,cAAe0d,GACtCE,EAAW5d,WAAS,WAAY0d,GAChCC,EAAYE,UAAYlc,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,cAAgBH,EAAYI,SAASC,OAC3Frc,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,YAAcF,EAASI,OAG7D9F,EAAiB3Z,UAAUqa,aAAe,WACtCjX,KAAK8W,cAAe,GAExBP,EAAiB3Z,UAAU0c,cAAgB,SAAU7a,EAAM6d,GAGvD,IAAK,IAFDC,KAEKnlB,EAAI,EAAGe,EADLC,OAAOC,KAAKoG,GACInH,OAAQF,EAAIe,EAAKf,IAAK,CAC7C,IAAIolB,EAAcrgB,YAAWsC,EAAKrH,IAClColB,EAAYriB,SAAWsE,EAAKrH,GAC5B,IAAI8C,EAAQ,EAyBZ,GAxBA8F,KAAK4W,cACAxe,OAAOwE,UAAUC,eAAeC,KAAK0f,EAAa,WACnDA,EAAYviB,MAAQ+F,KAAK4W,eAExBnf,oBAAkB+kB,EAAYxc,KAAKvJ,OAAO0G,gBAC1Cqf,EAAYxc,KAAKvJ,OAAOshB,kBAAoB7gB,EAAgB8I,KAAKvJ,WAClE+lB,EAAYpjB,iBAAkB,EAC1B4G,KAAKvJ,OAAO+b,oBAAsB/a,oBAAkBuI,KAAKvJ,OAAOsN,kBAC7DtM,oBAAkB+kB,EAAYxc,KAAKvJ,OAAO0G,eAC7Cqf,EAAYtjB,UAAW,EAGvBsjB,EAAYtjB,WAAYzB,oBAAkB+kB,EAAYxc,KAAKvJ,OAAOwC,sBAC5DujB,EAAYxc,KAAKvJ,OAAOwC,qBAGjCb,OAAOwE,UAAUC,eAAeC,KAAK0f,EAAa,WACnDA,EAAYviB,OAAQuiB,EAAYpjB,gBAAkB4G,KAAK4W,cAEvD5W,KAAKjF,iBAAmBtD,oBAAkB+kB,EAAYxc,KAAKvJ,OAAOuG,mBAClEgD,KAAKvJ,OAAO6G,WAAW/E,KAAKikB,GAEhCA,EAAYzjB,SAAW2gB,SAAO1Z,KAAKvJ,OAAO0a,QAAQ8D,GAAK,UACvDwD,WAAS,sBAAwB+D,EAAYzjB,SAAUyjB,EAAaxc,KAAKvJ,SACpEgB,oBAAkB6kB,GAAgB,CACnC,IAAIhf,EAAanB,YAAWmgB,UACrBhf,EAAWjE,oBACXiE,EAAW0C,KAAKvJ,OAAO0G,cAC1B6C,KAAKjF,wBACEuC,EAAWnD,SAAS6F,KAAKvJ,OAAO0G,cAE3Cqf,EAAY3jB,WAAayE,EACzBkf,EAAYle,eAAiBhB,EAAWvE,SACxCmB,EAAQoiB,EAAcpiB,MAAQ,EAYlC,GAVK9B,OAAOwE,UAAUC,eAAeC,KAAK0f,EAAa,WACnDA,EAAYtiB,MAAQA,GAExBsiB,EAAYrP,cAAgB,WACxB1V,oBAAkB+kB,EAAYxc,KAAKvJ,OAAOuG,mBAAqBwf,EAAY3jB,aAC3EmH,KAAKvJ,OAAO8G,SAAShF,KAAKikB,GAEzBxc,KAAKjF,iBAAyC,IAAtByhB,EAAYtiB,OACrC8F,KAAKvJ,OAAO6G,WAAW/E,KAAKikB,IAE3B/kB,oBAAkB+kB,EAAYxc,KAAKvJ,OAAO0G,eAAiBqf,EAAYxc,KAAKvJ,OAAO0G,cAAc7F,QAAS,CAC3G,IAAImB,EAASuH,KAAKsZ,cAAckD,EAAYxc,KAAKvJ,OAAO0G,cAAeqf,GACvEA,EAAYnjB,aAAeZ,EAE/B8jB,EAAahkB,KAAKikB,GAEtB,OAAOD,GASXhG,EAAiB3Z,UAAUya,cAAgB,SAAUnU,GACjD,IAIIuZ,EAJAC,EAAWpkB,YAAU,WAAY4K,GACjCyZ,EAAarkB,YAAU,aAAc4K,GACrC0Z,EAAatkB,YAAU,aAAc4K,GACrC2Z,EAAavkB,YAAU,aAAc4K,GAErC4Z,EAAaxkB,YAAU,aAAc4K,GACrCtD,EAActH,YAAU,cAAe4K,GACvC6Z,EAAazkB,YAAU,OAAQ4K,GAC/B7H,EAAS/C,YAAU,SAAU4K,GAC7B8Z,EAAgBF,EAChBG,EAAuBjd,KAAKvJ,OAAO6E,0BAA0B,GAC7D4hB,EAAY5kB,YAAU,OAAQ0kB,GAC5BvlB,oBAAkBulB,IAAqBvlB,oBAAkBulB,EAAc3hB,SAAsC,QAAzB2hB,EAAc3hB,QAC/F5D,oBAAkBulB,EAAcve,QAAUhH,oBAAkBulB,EAAcve,KAAKwe,MACpFD,EAAcve,KAAKwe,GAAwB/Z,EAAKkS,OAAO4H,EAAc/iB,OAAOgjB,GAC5EC,EAAU/iB,SAAS8iB,GAAwB/Z,EAAKkS,OAAO4H,EAAc/iB,OAAOgjB,MAE1ExlB,oBAAkBqlB,IAAe1kB,OAAOC,KAAKykB,GAAYxlB,QAA2B,SAAhBsI,KACtEA,EAAcA,GAA4Bkd,EAAWld,YACrDmd,EAAaA,GAA0BzkB,YAAU,OAAQwkB,GACzDzhB,EAASA,GAAkB/C,YAAU,SAAUwkB,GACT,UAAlC9c,KAAKvJ,OAAOmF,aAAaC,OACzBmE,KAAK5E,aAAe4E,KAAKvJ,OAAOiB,KAAKoE,WAAWC,mBAEhDiE,KAAKvJ,OAAO0mB,aACZnd,KAAKod,aAAaL,EAAY1hB,EAAQuE,IAU9C,IAKIyd,EACAC,EANAC,GANAd,EADAC,IAAajlB,oBAAkBklB,GACrBA,EAGAzlB,EAAgB8I,KAAKvJ,QAAU4H,WAAS,SAAU2B,KAAKvJ,OAAOiB,KAAKhB,YACvEsJ,KAAKvJ,OAAOiB,KAAKhB,sBAEMC,cAAc8lB,EAAQ/lB,WAAW8E,KAAOihB,EACrElO,EAAQrX,EAAgB8I,KAAKvJ,QAAU4H,WAAS,QAAS2B,KAAKvJ,OAAOC,YACnE6mB,EAAQjmB,OACV0gB,EAAM,IAAIP,QACV0D,EAAY7iB,YAAU,QAAS4K,GAOnC,GAJKzL,oBAAkB0jB,KACnBkC,EAAclC,EAAUjD,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,YAATA,EAAEV,KAC/D0C,EAAcnC,EAAUjD,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,aAATA,EAAEV,MAE9D5a,KAAKvJ,OAAOiB,KAAKI,gBAAkBkI,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC3E0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,IAAIN,OAAS,IAAQG,oBAAkB0jB,KACvEkC,EAAY/lB,QAAUgmB,EAAYhmB,SAAW0I,KAAKvJ,OAAO0mB,YAAc,CACpE1lB,oBAAkB0jB,KAClBA,EAAY,IAAI1D,QAChB0D,EAAY9c,WAAS,yBAA0B2B,KAAKvJ,QAAQ4mB,YAAYlC,GACxEA,EAAY9c,WAAS,yBAA0B2B,KAAKvJ,QAAQ6mB,YAAYnC,IAE5E,IAAIqC,EAAYrC,EAAUjD,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,YAATA,EAAEV,KAC7D6C,EAAYtC,EAAUjD,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,aAATA,EAAEV,KACjE5C,EAAIE,QAAUsF,EAAUlkB,OAAOmkB,GAC/B,IAAIC,EAAe,IAAI/mB,cAAY4mB,GAAStE,aAAajB,GAIzD,GAHAhY,KAAKvJ,OAAO0d,OAAO,oBAAsB1V,KAAMif,IAC/CH,EAAUvd,KAAK+W,YAAY3B,OAC3BpV,KAAK+W,YAAY3B,OAAS,KACtBpV,KAAKvJ,OAAOiB,KAAKwjB,WAAW5jB,OAAS,EAAG,CACxC,IAAIkgB,EAAQlf,YAAU,QAAS4K,GAI/B,GAHIzL,oBAAkB0jB,KAClBA,EAAY9c,WAAS,yBAA0B2B,KAAKvJ,QAAQ2kB,eAAe,IAAI3D,WAE9EhgB,oBAAkB+f,GAAQ,CAC3B,IAAI6D,EAAe7D,EAAMU,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,iBAATA,EAAEV,KAChE2C,EAAUvd,KAAKvJ,OAAO8kB,cAAcC,sBAAsBH,EAAckC,GAAS,KAI7F,GAAIvd,KAAKvJ,OAAOiB,KAAKwjB,WAAW5jB,QAA2D,IAAjD0I,KAAKvJ,OAAOiB,KAAK6G,aAAalH,QAAQC,QACtB,IAAnD0I,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,SAAiB0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,IAAIN,OAAQ,CACxG,IAAIqmB,EAAcrlB,YAAU,QAAS4K,GACjCzL,oBAAkBkmB,KAClBA,EAActf,WAAS,yBAA0B2B,KAAKvJ,QAAQ2kB,eAAe,IAAI3D,UAEjF4D,EAAesC,EAAYzF,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,iBAATA,EAAEV,KACtE2C,EAAUvd,KAAKvJ,OAAO8kB,cAAcC,sBAAsBH,EAAcrb,KAAKvJ,OAAO8G,UAAU,GAElG,GAAIyC,KAAKvJ,OAAOiB,KAAK6G,aAAalH,QAAQC,OAAS,GAAK0I,KAAK8W,aAAc,CACvE9W,KAAK8W,cAAe,EAIpB,IAAK,IAHDxZ,EAAa0C,KAAKvJ,OAAO6G,WAEzBsgB,GADApG,EAAQlf,YAAU,QAAS4K,GAClB,IAAIuU,SACRoG,EAAM7d,KAAKvJ,OAAOiB,KAAK6G,aAAalH,QAAQC,OAAS,EAAGumB,GAAO,EAAGA,IAAO,CAC9E,IACI3R,EAAMlM,KAAKvJ,OAAOiB,KAAK4H,aAAab,KAAqB,iBAAEuB,KAAKvJ,OAAOiB,KACvE6G,aAAalH,QAAQwmB,GAAK3J,OAC1B4J,EAAU5R,EAAI6R,cAAgBxkB,EAAUyG,KAAKvJ,QAC7CyV,EAAI6R,aAAaC,KAAK9R,GACtBlM,KAAKvJ,OAAOiB,KAAK6G,aAAalH,QAAQwmB,GAAKI,UAC/CL,EAAOM,OAAOle,KAAKvJ,OAAOiB,KAAK6G,aAAalH,QAAQwmB,GAAK3J,MAAO4J,GAEpE,IACIK,GAAa1iB,aADE,IAAI9E,cAAY2G,GAAY2b,aAAa2E,GACfF,aAAcH,EAASK,OAAQA,GAM5E,GALA5d,KAAKvJ,OAAO0d,OAAO,aAAcgK,GACjCZ,EAAUY,EAAS1iB,aACnBuE,KAAK+W,YAAY3B,OAAS,KAC1BpV,KAAK6W,WAAa0G,EAClBvd,KAAKvJ,OAAO0d,OAAO,kBACfnU,KAAKvJ,OAAOiB,KAAKwjB,WAAW5jB,OAAS,IAAMG,oBAAkB+f,GAAQ,CAGjE6D,EADU/iB,YAAU,QAAS4K,GACNgV,QAAQ1a,OAAO,SAAU8d,GAAK,MAAgB,iBAATA,EAAEV,KAClE2C,EAAUvd,KAAKvJ,OAAO8kB,cAAcC,sBAAsBH,EAAcrb,KAAK6W,YAHhE,IAMrBtI,EAAQrX,EAAgB8I,KAAKvJ,QAAU4H,WAAS,QAAS2B,KAAKvJ,OAAOC,YAC/D6mB,EAAQjmB,OACd,IAAI8mB,EAAOpe,KAAKqe,OAAOd,EAAShP,EAAOmO,EAAUG,EAAYD,EAAY1Z,GACzEqa,EAAUa,EAAKhJ,OACf7G,EAAQ6P,EAAK7P,MACbrL,EAAKkS,OAASmI,EACdra,EAAKqL,MAAQA,EACbvO,KAAKvJ,OAAO0d,OAAO,gBAAiBjR,IAExCqT,EAAiB3Z,UAAUyhB,OAAS,SAAUd,EAAShP,EAAOmO,EAAUG,EAAYD,EAAY1Z,GAC5F,IAAIlD,KAAKvJ,OAAO4b,aAAiBqK,GAA2B,gBAAfE,GACpCC,GAAwC,gBAA1B7c,KAAKvJ,OAAO6nB,WAM9B,IAAKte,KAAKvJ,OAAO2H,sBAAwB4B,KAAKvJ,OAAOolB,4BAA8Ba,GAA2B,gBAAfE,IAC3D,SAAlCve,WAAS,cAAe6E,GAAkB,CAC7C,IAAIqb,EAAUve,KAAKvJ,OAAOolB,wBAA0B3Y,EAAO7E,WAAS,aAAc6E,GAClFlD,KAAKvJ,OAAO0d,OAAOqK,GAAwBpJ,OAAQmI,EAAShP,MAAOA,EAAOuO,WAAYyB,IACtFhB,EAAUvd,KAAK+W,YAAY3B,OAC3B7G,EAAQvO,KAAK+W,YAAYxI,YAVzBvO,KAAKvJ,OAAO0d,OAAOqK,GAAwBpJ,OAAQmI,EAAShP,MAAOA,IACnEgP,EAAUvd,KAAK+W,YAAY3B,OAC3B7G,EAAQrX,EAAgB8I,KAAKvJ,QAAU4H,WAAS,QAAS2B,KAAKvJ,OAAOC,YAC/DsJ,KAAK+W,YAAYxI,MAS3B,IACIkQ,EAA0B,0BAC9B,KAAoB,IAAf5B,GAAwB3Z,EAAgB,cAAMzL,oBAAkByL,EAAKub,KACnEvb,EAAKub,MAAyD,aAA1Bze,KAAKvJ,OAAO6nB,UAA0B,CAE7E,IAAK,IADDI,KACKtnB,EAAI,EAAGA,EAAImmB,EAAQjmB,OAAQF,IAAK,CAClBoB,EAAgBwH,KAAKvJ,OAAQ8mB,EAAQnmB,GAAI4I,KAAKvJ,OAAO6G,aAEpEohB,EAAcnmB,KAAKglB,EAAQnmB,IAInCmX,GADAgP,EAAUmB,GACMpnB,OAGpB,OADc8d,OAAQmI,EAAShP,MAAOA,IAG1CgI,EAAiB3Z,UAAUsa,WAAa,SAAUyH,GAC9C3e,KAAK+W,YAAc4H,GAEvBpI,EAAiB3Z,UAAUwgB,aAAe,SAAUL,EAAY1hB,EAAQuE,GAC/C,WAAhBA,GAA4C,SAAhBA,GAC7BI,KAAKvJ,OAAO0d,OAAOyK,IAAqB5kB,MAAO+iB,EAAY1hB,OAAQA,GAAUuE,IAE7D,cAAhBA,GAAiE,UAAlCI,KAAKvJ,OAAOmF,aAAaC,MACxDmE,KAAKvJ,OAAO0d,OAAO0K,QAGpBtI,MC/kBX,SAAWuI,GACPA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAmB,MAAI,IAAM,QACzCA,EAAYA,EAAuB,UAAI,IAAM,YAC7CA,EAAYA,EAAwB,WAAI,IAAM,aAdlD,CAeGA,gBAAgBA,mBAOnB,SAAWC,GACPA,EAAiBA,EAA0B,QAAI,GAAK,UACpDA,EAAiBA,EAA6B,WAAI,GAAK,aACvDA,EAAiBA,EAAgC,cAAI,GAAK,gBAC1DA,EAAiBA,EAAiC,eAAI,GAAK,iBAC3DA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAA4B,UAAI,GAAK,YACtDA,EAAiBA,EAA8B,YAAI,GAAK,cACxDA,EAAiBA,EAA4B,UAAI,IAAM,YACvDA,EAAiBA,EAA4B,UAAI,IAAM,YACvDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAA2B,SAAI,IAAM,WACtDA,EAAiBA,EAAyB,OAAI,IAAM,SACpDA,EAAiBA,EAA4B,UAAI,IAAM,YACvDA,EAAiBA,EAA6B,WAAI,IAAM,aAlB5D,CAmBGA,qBAAqBA,wBC/CxB,IAAIne,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5Dqd,GAA8B,SAAU/c,GAExC,SAAS+c,IACL,OAAkB,OAAX/c,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KA0B/D,OA5BAY,GAAUoe,EAAc/c,GAIxBZ,IACIc,WAAS,KACV6c,EAAapiB,UAAW,gBAAY,GACvCyE,IACIc,WAAS,IACV6c,EAAapiB,UAAW,iBAAa,GACxCyE,IACIc,WAAS,IACV6c,EAAapiB,UAAW,mBAAe,GAC1CyE,IACIc,cACD6c,EAAapiB,UAAW,yBAAqB,GAChDyE,IACIc,YAAS,IACV6c,EAAapiB,UAAW,yBAAqB,GAChDyE,IACIc,YAAS,IACV6c,EAAapiB,UAAW,iBAAa,GACxCyE,IACIc,WAAS,OACV6c,EAAapiB,UAAW,gBAAY,GACvCyE,IACIc,WAAS,QACV6c,EAAapiB,UAAW,oBAAgB,GACpCoiB,GACT5c,iBCrDExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAQ5Dsd,GAAiC,SAAUhd,GAE3C,SAASgd,IACL,IAAI1X,EAAmB,OAAXtF,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAGhE,OAFAuH,EAAM2X,KAAO,IAAIC,uBACjB5X,EAAMkN,cACClN,EAiFX,OAtFA3G,GAAUqe,EAAiBhd,GAe3Bgd,EAAgBriB,UAAUwiB,aAAe,SAAUC,GAC3Crf,KAAKsf,SAAWtf,KAAKsf,OAAOC,UAAYvf,KAAKsf,OAAOA,UACpDtf,KAAKwf,SAAWxf,KAAKyf,kBAAkBzf,KAAKsf,UAQpDL,EAAgBriB,UAAU6iB,kBAAoB,SAAUH,GACpD,OAAIA,EAAOnc,KACAnD,KAAKkf,KAAKQ,cAAcJ,GAGxBtf,KAAKkf,KAAKS,gBAAgBL,IAOzCL,EAAgBriB,UAAUgjB,aAAe,WACrC,OAAO5f,KAAKwf,UAOhBP,EAAgBriB,UAAUijB,YAAc,SAAUC,QAC/B,IAAXA,IAAqBA,WACGtK,IAAxBxV,KAAK+f,iBACL/f,KAAKyU,WAAWuL,eAAaC,WAAUA,WAASC,WAActF,GAAIuF,UAAQngB,KAAK+f,eAAgBD,GAC3FM,SAAU,oBAQtBnB,EAAgBriB,UAAUyjB,YAAc,SAAUld,GAC9C,OAAOnD,KAAKyU,WAAWuL,eAAaC,WAAU9c,KAOlD8b,EAAgBriB,UAAU0jB,oBAAsB,SAAUC,GACtDvgB,KAAKS,cAAc8f,GAAM,IAE7Blf,IACIc,cACD8c,EAAgBriB,UAAW,YAAQ,GACtCyE,IACIc,cACD8c,EAAgBriB,UAAW,sBAAkB,GAChDyE,IACIc,cACD8c,EAAgBriB,UAAW,aAAS,GACvCyE,IACIc,cACD8c,EAAgBriB,UAAW,cAAU,GACxCyE,IACIc,cACD8c,EAAgBriB,UAAW,kBAAc,GAC5CyE,IACIc,cACD8c,EAAgBriB,UAAW,uBAAmB,GAC1CqiB,GACT7c,iBAEEoe,GAA8B,SAAUve,GAExC,SAASue,IACL,OAAkB,OAAXve,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAQ/D,OAVAY,GAAU4f,EAAcve,GAIxBZ,IACIiB,gBAAe2c,KAChBuB,EAAa5jB,UAAW,eAAW,GACtCyE,IACIc,YAAS,IACVqe,EAAa5jB,UAAW,wBAAoB,GACxC4jB,GACTpe,iBC/HExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5D8e,GAA8B,SAAUxe,GAExC,SAASwe,IACL,OAAkB,OAAXxe,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAmC/D,OArCAY,GAAU6f,EAAcxe,GAIxBZ,IACIc,YAAS,IACVse,EAAa7jB,UAAW,mBAAe,GAC1CyE,IACIc,YAAS,IACVse,EAAa7jB,UAAW,oBAAgB,GAC3CyE,IACIc,YAAS,IACVse,EAAa7jB,UAAW,qBAAiB,GAC5CyE,IACIc,WAAS,SACVse,EAAa7jB,UAAW,YAAQ,GACnCyE,IACIc,WAAS,QACVse,EAAa7jB,UAAW,sBAAkB,GAC7CyE,IACIc,YAAS,IACVse,EAAa7jB,UAAW,2BAAuB,GAClDyE,IACIc,YAAS,IACVse,EAAa7jB,UAAW,yBAAqB,GAChDyE,IACIc,YAAS,IACVse,EAAa7jB,UAAW,+BAA2B,GACtDyE,IACIc,WAAS,KACVse,EAAa7jB,UAAW,gBAAY,GACvCyE,IACIc,gBACDse,EAAa7jB,UAAW,cAAU,GACrCyE,IACIc,YAAS,IACVse,EAAa7jB,UAAW,wBAAoB,GACxC6jB,GACTre,iBC9DExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5D+e,GAAgC,SAAUze,GAE1C,SAASye,IACL,OAAkB,OAAXze,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAQ/D,OAVAY,GAAU8f,EAAgBze,GAI1BZ,IACIc,cACDue,EAAe9jB,UAAW,aAAS,GACtCyE,IACIc,cACDue,EAAe9jB,UAAW,iBAAa,GACnC8jB,GACTte,iBAKEue,GAA8B,SAAU1e,GAExC,SAAS0e,IACL,OAAkB,OAAX1e,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAQ/D,OAVAY,GAAU+f,EAAc1e,GAIxBZ,IACIiB,gBAAeoe,KAChBC,EAAa/jB,UAAW,eAAW,GACtCyE,IACIc,YAAS,IACVwe,EAAa/jB,UAAW,mBAAe,GACnC+jB,GACTve,iBCpDExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5Dif,GAAwC,SAAU3e,GAElD,SAAS2e,IACL,OAAkB,OAAX3e,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAW/D,OAbAY,GAAUggB,EAAwB3e,GAIlCZ,IACIc,YAAS,IACVye,EAAuBhkB,UAAW,mBAAe,GACpDyE,IACIc,WAAS,IACVye,EAAuBhkB,UAAW,iBAAa,GAClDyE,IACIc,WAAS,IACVye,EAAuBhkB,UAAW,qBAAiB,GAC/CgkB,GACTxe,iBCtCExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GA2C5Dkf,GAA0B,SAAU5e,GAEpC,SAAS4e,EAAS9gB,EAASoR,GACvB,IAAI5J,EAAQtF,EAAOnF,KAAKkD,KAAMD,EAASoR,IAAYnR,KACnDuH,EAAMwP,eACNxP,EAAMuZ,sBACNvZ,EAAMwZ,4BACNxZ,EAAMyZ,eAAiB,iBACvBzZ,EAAM0Z,eAAiB,iBACvB1Z,EAAMiP,aAAe,eACrBjP,EAAM2Z,oBAAsB,sBAC5B3Z,EAAM4Z,mBACN5Z,EAAM6Z,eAAgB,EACtB7Z,EAAM8Z,sBAAwB,SAAUC,EAAKC,GACzC,GAAID,EAAK,CAIL,IAAK,IAHDjpB,EAAOD,OAAOC,KAAKipB,GACnBE,GAAU,EACVC,GAAe,WAAY,eAAgB,WAAY,WAAY,aAAc,iBAAkB,SAC9FrqB,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IAC7B,GAAIkqB,EAAIjpB,EAAKjB,MAAQmqB,EAAQlpB,EAAKjB,MAAyC,IAAlCqqB,EAAYjjB,QAAQnG,EAAKjB,IAAY,CAE1E,KADakqB,EAAIjpB,EAAKjB,cAAesqB,MAAQH,EAAQlpB,EAAKjB,cAAesqB,OACzDJ,EAAIjpB,EAAKjB,IAAIuqB,YAAcJ,EAAQlpB,EAAKjB,IAAIuqB,UAAY,CACpEH,GAAU,EACV,OAIZ,OAAOA,EAGP,OAAO,GAGfI,EAAW/e,OAAOgf,IAClBpJ,WAAS,mBAAoBlR,EAAMua,yBAA0Bva,GAM7D,OAJK9P,oBAAkB8P,EAAMwa,gBAAsB,SAC/Cnf,OAAKC,OAAOF,UAEhB4E,EAAM7P,KAAO,IAAIkL,OACV2E,EAvCX3G,GAAUigB,EAAU5e,GAyCpB2f,EAAaf,EAWbA,EAASjkB,UAAUolB,YAAc,SAAUC,EAAuBC,EAAkBC,EAAUC,GAE1F,OAAOpiB,KAAKqiB,kBAAkBC,IAAIL,EAAuBC,EAAkBC,EAAUC,GAAQ,IAYjGvB,EAASjkB,UAAU2lB,UAAY,SAAUN,EAAuBC,EAAkBC,EAAUC,GAExF,OAAOpiB,KAAKqiB,kBAAkBC,IAAIL,EAAuBC,EAAkBC,EAAUC,GAAQ,IAWjGvB,EAASjkB,UAAU4lB,UAAY,SAAUC,EAAqBP,EAAkBQ,EAAQN,GACpF,OAAOpiB,KAAK2iB,gBAAgBL,IAAIG,EAAqBP,EAAkBQ,EAAQN,IAQnFvB,EAASjkB,UAAUmG,cAAgB,WAC/B,MAAO,YAQX8d,EAASjkB,UAAUgmB,UAAY,WAC3B5iB,KAAK6iB,iBACL7iB,KAAK8iB,iBACL9iB,KAAK+iB,eACDC,MAAO,QACPC,MAAO,QACPC,MAAO,QACPC,OAAQ,UACRC,UAAW,aACXC,YAAa,eACbC,UAAW,SACXC,WAAY,WAEhBvjB,KAAKwjB,KAAO,IAAIC,OAAK,WAAYzjB,KAAK+iB,cAAe/iB,KAAK0jB,QACtD1jB,KAAKjF,iBAAmBtD,oBAAkBuI,KAAK7C,gBAC/C6C,KAAK7C,aAAe,aAW5B0jB,EAASjkB,UAAU+mB,aAAe,SAAUzoB,EAAY+iB,EAAW2F,GAC3D5jB,KAAK6jB,YACL7jB,KAAK6jB,WAAWC,WAAW5oB,EAAY+iB,EAAW2F,IAQ1D/C,EAASjkB,UAAUmnB,aAAe,WAC1B/jB,KAAK6jB,YACL7jB,KAAK6jB,WAAWE,gBAUxBlD,EAASjkB,UAAUonB,iBAAmB,SAAU9P,GACxClU,KAAK6jB,YACL7jB,KAAK6jB,WAAWG,iBAAiB9P,IAWzC2M,EAASjkB,UAAUqnB,OAAS,SAAUC,GAClClkB,KAAKtI,KAAKusB,OAAOC,IAarBrD,EAASjkB,UAAUunB,eAAiB,SAAUC,GAC1CpkB,KAAKqkB,aAAaF,eAAeC,GACjCpkB,KAAKskB,qBASTzD,EAASjkB,UAAU2nB,eAAiB,SAAUC,EAAWC,GACrDzkB,KAAKtI,KAAK6sB,eAAeC,EAAWC,IAExC5D,EAASjkB,UAAUimB,eAAiB,WAEhC,IAAIa,EAASD,OAAKC,OACdgB,KACJjM,WAASzY,KAAK0jB,UAAYgB,GAC1B,IAAIC,EACJA,KACAA,EAAarsB,YAAU0H,KAAK0jB,OAAQA,GACpC,IAAIkB,EACJA,KACAA,EAAiBtsB,YAAU0H,KAAK+C,gBAAiB4hB,GACjDlM,WAAS,OAAQmM,EAAgBtsB,YAAU0H,KAAK0jB,OAAQgB,IACxDjB,OAAKoB,KAAKH,IASd7D,EAASjkB,UAAUkV,MAAQ,WACvB9R,KAAK8kB,YAAYhT,SAErB+O,EAASjkB,UAAUmoB,yBAA2B,SAAUtnB,GACpD,GAAIuC,KAAKglB,cAAe,CACpB,IACIC,OAAe,EAEftmB,OAAM,EACNumB,OAAiB,EACrB,OAAQznB,EAAEpC,QACN,IAAK,gBACD2E,KAAKmlB,YACL,MACJ,IAAK,cACDnlB,KAAKolB,cACL,MACJ,IAAK,mBAIW,QADZzmB,EAFSlB,EAAE8D,OACK2J,QAAQ,cACXA,QAAQ,aACOsK,IAAR7W,GAChBqB,KAAKqlB,sBAAsB1mB,EAAIsM,cAAc,sBAEjD,MACJ,IAAK,qBAIW,QADZtM,EAFSlB,EAAE8D,OACK2J,QAAQ,cACXA,QAAQ,aACOsK,IAAR7W,GAChBqB,KAAKqlB,sBAAsB1mB,EAAIsM,cAAc,wBAEjD,MACJ,IAAK,YACD,IAAKjL,KAAK5B,qBAGN,GAFA6mB,EAAexnB,EAAE8D,OAAO+jB,cAED,QADvBJ,EAAiBllB,KAAKulB,mBAAmBN,IACZ,CACzB,IAAIpb,EAAWqb,EAAerb,SAC9B7J,KAAKwlB,UAAU3b,GACf,IAAIgM,EAAYpY,EAAE8D,OAAOsU,UACrB4P,EAAQP,EAAenQ,SAASc,GACpC3E,YAAUuU,GAAQ,aAClBvU,YAAUuU,GAAQ,gBAGlBzlB,KAAK0lB,iBAGb,MACJ,IAAK,UACD,IAAK1lB,KAAK5B,qBAGN,GAFA6mB,EAAexnB,EAAE8D,OAAO+jB,cAED,QADvBJ,EAAiBllB,KAAK2lB,uBAAuBV,IAChB,CACzB,IAAIW,EAASV,EAAerb,SAC5B7J,KAAKwlB,UAAUI,GACf,IAAIC,EAASpoB,EAAE8D,OAAOsU,UAClB5N,EAAOid,EAAenQ,SAAS8Q,GACnC3U,YAAUjJ,GAAO,aACjBiJ,YAAUjJ,GAAO,gBAGjBjI,KAAK0lB,oBAO7B7E,EAASjkB,UAAU2oB,mBAAqB,SAAUO,GAC9C,IAAIpa,EAAaoa,EAAkBza,mBAKnC,OAJmB,OAAfK,IAA0E,IAAlDA,EAAWe,UAAUjO,QAAQ,iBACxB,SAA7BkN,EAAWnR,MAAMG,UACjBgR,EAAa1L,KAAKulB,mBAAmB7Z,IAElCA,GAGXmV,EAASjkB,UAAU+oB,uBAAyB,SAAUG,GAClD,IAAIpa,EAAaoa,EAAkBC,uBAKnC,OAJmB,OAAfra,IAA0E,IAAlDA,EAAWe,UAAUjO,QAAQ,iBACxB,SAA7BkN,EAAWnR,MAAMG,UACjBgR,EAAa1L,KAAK2lB,uBAAuBja,IAEtCA,GAEXmV,EAASjkB,UAAUkmB,eAAiB,WAChC9iB,KAAK+iB,iBACL/iB,KAAKzC,YACLyC,KAAK1C,cACL0C,KAAKgmB,eACLhmB,KAAKimB,aAAc,EACnBjmB,KAAKkmB,eAAgB,EACrBlmB,KAAKmmB,YACDC,cAAe,iBACfC,YAAa,eACbC,iBAAkB,qBAClBC,mBAAoB,uBACpBC,UAAW,YACXC,QAAS,WAEbzmB,KAAKmd,cAAiBnd,KAAKtJ,sBAAsBC,gBAAgBqJ,KAAKtJ,WAAWA,WAAWgwB,UACnFjvB,oBAAkBuI,KAAKtJ,WAAW+C,QAAWuG,KAAKtJ,WAAWE,mBAAmB+vB,oBACzF3mB,KAAKjF,iBAAmBtD,oBAAkBuI,KAAKhD,kBAQnD6jB,EAASjkB,UAAUgqB,WAAa,WAC5BC,eAAaha,IAAI7M,KAAKtI,KAAKyZ,QAAS,QAASnR,KAAK8mB,kBAAmB9mB,MACrE6mB,eAAaha,IAAI7M,KAAKmR,QAAS,WAAYnR,KAAK8mB,kBAAmB9mB,MACnEA,KAAK+mB,eAAiB,IAAIC,iBAAehnB,KAAKmR,SAC1C8V,UAAWjnB,KAAK+kB,yBAAyB/G,KAAKhe,MAC9CmmB,WAAYnmB,KAAKmmB,WACjBe,UAAW,YAEXlnB,KAAKglB,gBACLhlB,KAAKmR,QAAQgW,UAAsC,IAA3BnnB,KAAKmR,QAAQgW,SAAkB,EAAInnB,KAAKmR,QAAQgW,WAShFtG,EAASjkB,UAAUwqB,gBAAkB,WACjC,IAAIC,KAIJ,OAFArnB,KAAKiR,aAAe,IAAIpB,GAAO7P,MAC/BA,KAAKtI,KAAqB,iBAAEsI,KAAKsnB,eAAetnB,KAAK3I,UACjD2I,KAAK4K,YACEyc,GAEXA,EAAQ9uB,MACJgvB,OAAQ,SAAUrkB,MAAOlD,KAAMA,KAAKjI,kBAEnCN,oBAAkBuI,KAAKwnB,UACxBH,EAAQ9uB,MACJgvB,OAAQ,UACRrkB,MAAOlD,QAGXA,KAAKynB,kBACLJ,EAAQ9uB,MACJgvB,OAAQ,cACRrkB,MAAOlD,QAGXA,KAAKqS,aACLgV,EAAQ9uB,MACJgvB,OAAQ,QACRrkB,MAAOlD,KAAMA,KAAKsS,gBAGtBtS,KAAKI,iBACLinB,EAAQ9uB,MACJgvB,OAAQ,UACRrkB,MAAOlD,QAGXA,KAAKM,cACL+mB,EAAQ9uB,MACJgvB,OAAQ,OACRrkB,MAAOlD,QAGXA,KAAKkb,WAAW5jB,OAAS,GACzB+vB,EAAQ9uB,MACJgvB,OAAQ,UAAWrkB,MAAOlD,QAGlCqnB,EAAQ9uB,MACJgvB,OAAQ,SAAUrkB,MAAOlD,QAEzBA,KAAK0nB,kBACLL,EAAQ9uB,MACJgvB,OAAQ,cAAerkB,MAAOlD,SAGlCA,KAAKiT,eAAiBjT,KAAKhB,YAAcgB,KAAKf,oBAC9Ce,KAAKtI,KAAK4Y,6BAA+BtQ,KAAKtI,KAAK6Y,8BAAgCvQ,KAAKiR,eACxFoW,EAAQ9uB,MACJgvB,OAAQ,SAAUrkB,MAAOlD,QAG7BA,KAAK2nB,gBACLN,EAAQ9uB,MACJgvB,OAAQ,YAAarkB,MAAOlD,QAGhCA,KAAK4nB,gBACLP,EAAQ9uB,MACJgvB,OAAQ,YAAarkB,MAAOlD,QAGhCA,KAAKK,gBACLgnB,EAAQ9uB,MACJgvB,OAAQ,aAAcrkB,MAAOlD,QAGjCA,KAAK6nB,mBACLR,EAAQ9uB,MACJgvB,OAAQ,gBAAiBrkB,MAAOlD,QAGxCA,KAAK8nB,sBAAsBT,GACpBA,IAEXxG,EAASjkB,UAAUkrB,sBAAwB,SAAUT,GACjD,IAAIU,EAAkB/nB,KAAK+hB,gBAAgBvkB,OAAO,SAAUC,GACxD,MAAuC,mBAAhCA,EAAEb,UAAUmG,mBAEnB/C,KAAKX,qBAAuB0oB,EAAgBzwB,UACtCG,oBAAkBuI,KAAKwnB,WAAaxnB,KAAKwnB,QAAkB,SAAE,YAC/DxnB,KAAKwnB,QAAkB,SAAE,aACzBxnB,KAAKgoB,iBAAkB,GAE3BX,EAAQ9uB,MACJgvB,OAAQ,iBACRrkB,MAAOlD,UAGXA,KAAKpE,aAAaqsB,aAAejoB,KAAKpE,aAAassB,eAAiBloB,KAAKpE,aAAaqE,eACtFonB,EAAQ9uB,MACJgvB,OAAQ,OACRrkB,MAAOlD,QAGXA,KAAKmoB,gBAAgBnoB,KAAK3I,UAC1BgwB,EAAQ9uB,MACJgvB,OAAQ,gBACRrkB,MAAOlD,QAGXA,KAAKooB,gBACLf,EAAQ9uB,MACJgvB,OAAQ,YACRrkB,MAAOlD,QAGXA,KAAK5B,sBACLipB,EAAQ9uB,MACJgvB,OAAQ,gBACRrkB,MAAOlD,QAGXA,KAAK6b,yBACLwL,EAAQ9uB,MACJgvB,OAAQ,iBACRrkB,MAAOlD,QAGfqnB,EAAQ9uB,MACJgvB,OAAQ,SACRrkB,MAAOlD,KAAKtI,SAGpBmpB,EAASjkB,UAAUurB,gBAAkB,SAAU9wB,GAC3C,IAAIkQ,EAAQvH,KACZ,OAAO3I,EAAQgxB,KAAK,SAAUnc,GAC1B,OAAIA,EAAI7U,QACGkQ,EAAM4gB,gBAAgBjc,EAAI7U,YAE3B6U,EAAIoc,WAAYpc,EAAIqc,qBAStC1H,EAASjkB,UAAU4rB,aAAe,WAC1BxoB,KAAKtI,MAAQsI,KAAKtI,KAAKyZ,SACvB0V,eAAa4B,OAAOzoB,KAAKtI,KAAKyZ,QAAS,QAASnR,KAAK8mB,oBAY7DjG,EAASjkB,UAAUoG,IAAM,SAAUC,EAAOC,GAClClD,KAAK0oB,cACL1oB,KAAK0oB,aAAaxkB,QAAQjB,EAAOC,EAAMlD,OAS/C6gB,EAASjkB,UAAU+rB,OAAS,WACxB,IAAIphB,EAAQvH,KACRA,KAAKmV,UACLnV,KAAKtI,KAAKyd,SAAU,EACpBnV,KAAKtI,KAAKwd,YAEVlV,KAAK4oB,QACL5oB,KAAKtI,KAAKkxB,OAAQ,GAEtBC,iBAAgBtnB,OAAQvB,KAAKmR,SAAWnR,KAAKwM,eAC7CxM,KAAKgD,KAAK,2BACVhD,KAAKV,aAAe,IAAI2S,GAAOjS,MAC/BA,KAAK8oB,WAAa,IAAIvS,GAAiBvW,MACvCA,KAAK8kB,YAAc,IAAIzT,GAAMrR,MAC7BA,KAAKoJ,QfrkBK,QeskBVpJ,KAAK+oB,sBACL/oB,KAAKhH,eAAgB,EAChBvB,oBAAkBuI,KAAKtJ,aACxBsJ,KAAKgpB,gBAAgBhpB,KAAKtJ,YAE9BsJ,KAAKipB,WACDjpB,KAAKmR,QAAQ5I,UAAUC,SAAS,eAAiBxI,KAAKkpB,gBAAgBC,WACtEnpB,KAAKtI,KAAKwxB,gBAAgBC,UAAY,gBAE1CnpB,KAAKopB,cACL,IAAIC,EAAgB7c,gBAAc,OAASyI,GAAIjV,KAAKmR,QAAQ8D,GAAK,iBACjE/D,YAAUlR,KAAKmR,SAAU,cACpB1Z,oBAAkBuI,KAAKspB,SAAoC,iBAAjBtpB,KAAW,SAAgD,IAA9BA,KAAKspB,OAAO9qB,QAAQ,OAC5FwB,KAAKmR,QAAQ5W,MAAM+uB,OAAStpB,KAAKspB,QAEhC7xB,oBAAkBuI,KAAKqN,QAAkC,iBAAhBrN,KAAU,QAA+C,IAA7BA,KAAKqN,MAAM7O,QAAQ,OACzFwB,KAAKmR,QAAQ5W,MAAM8S,MAAQrN,KAAKqN,OAEpCrN,KAAKmR,QAAQtD,YAAYwb,GACzB,IAAIE,EAAsBvpB,KAAKtI,KAAK0vB,gBACpCpnB,KAAKtI,KAAK0vB,gBAAkB,WACxB,IAAIC,KACJA,EAAUkC,EAAoBrnB,MAAMlC,MACpC,IAAK,IAAI5I,EAAI,EAAGA,EAAIiwB,EAAQ/vB,OAAQF,IACN,kBAAtBiwB,EAAQjwB,GAAGmwB,SACXF,EAAQjwB,GAAGmwB,OAAS,qBAG5B,OAAOF,GAGXrnB,KAAKtI,KAAS,KAAIsI,KAAS,KAAIA,KAAS,KAAIA,KAC5CA,KAAKtI,KAAK8xB,SAASH,GACfrpB,KAAKgoB,iBACLhoB,KAAKypB,sBAETzpB,KAAK4mB,aACL5mB,KAAK0pB,iBACL,IACIC,EAAoB3pB,KAAKtI,KAAoB,gBAEjDsI,KAAKtI,KAAoB,gBAAI,SAAUwL,EAAMjJ,GACzC0vB,EAAkBznB,MAAMqF,EAAM7P,MAExB6P,EAAM4N,SAAW1d,oBAAkB8P,EAAa,UAClDA,EAAMgO,cAAcrS,EAAMjJ,KAItC4mB,EAASjkB,UAAU6sB,oBAAsB,WACrC,IAAIG,EAAiB5pB,KAAK6pB,cAAcC,aACpCC,EAAW/pB,KAAKmR,QAAQ8D,GAAK,sBAC7B+U,EAAYhqB,KAAKmR,QAAQ8D,GAAK,uBAC9BgV,EAAgBL,EAAe3e,cAAc,IAAM8e,GAAUzE,cAC7D4E,EAAiBN,EAAe3e,cAAc,IAAM+e,GAAW1E,cACnE2E,EAAc1hB,UAAUsE,IAAI,YAC5Bqd,EAAe3hB,UAAUsE,IAAI,aAEjCgU,EAASjkB,UAAUutB,gBAAkB,WAC5B1yB,oBAAkBuI,KAAKtI,KAAKgJ,kBAC7BV,KAAKtI,KAAKgJ,gBAAgBqJ,UAE9B/J,KAAKU,gBAAkBV,KAAKtI,KAAKgJ,gBAAkB,IAAI4G,GAActH,OAEzE6gB,EAASjkB,UAAUosB,gBAAkB,SAAUvqB,GAC3C,IAAI8I,EAAQvH,KAIZ,GAHI9I,EAAgB8I,QAChBvB,EAAOJ,WAAS,SAAUI,IAE1BA,aAAgBhC,OAASgC,EAAKnH,OAAS,GAAKc,OAAOwE,UAAUC,eAAeC,KAAK2B,EAAK,GAAI,SAC1FuB,KAAKzC,SAAWkB,EAChBuB,KAAKzC,SAASC,OAAO,SAAUC,GAC3Bgb,WAAS,sBAAwBhb,EAAE1E,SAAU0E,EAAG8J,GAChC,IAAZ9J,EAAEvD,OACFqN,EAAMjK,WAAW/E,KAAKkF,UAK9B,GAAIvG,EAAgB8I,MAAO,CACvB,IAAIoqB,EAAW/rB,WAAS,SAAU2B,KAAKtJ,YACvCsJ,KAAK8oB,WAAWvR,kBAAkB6S,QAGlCpqB,KAAK8oB,WAAWvR,kBAAkB9Y,IAa9CoiB,EAASjkB,UAAUytB,mBAAqB,WACpCrqB,KAAKsqB,mBACLtqB,KAAKtI,KAAK6yB,UAAYvqB,KAAKuqB,UAC3BvqB,KAAKtI,KAAKstB,cAAgBhlB,KAAKglB,cAC/BhlB,KAAKtI,KAAKL,QAAU2I,KAAKsnB,eAAetnB,KAAK3I,SAC7C2I,KAAKtI,KAAKgwB,iBAAmB1nB,KAAK0nB,iBAClC1nB,KAAKtI,KAAKkwB,eAAiB5nB,KAAK4nB,eAChC5nB,KAAKtI,KAAK8f,MAAQxX,KAAKwX,MACvBxX,KAAKtI,KAAK8yB,gBAAkBxqB,KAAKwqB,gBACjCxqB,KAAKtI,KAAK2a,YAAcrS,KAAKqS,YAC7BrS,KAAKtI,KAAK4a,aAAemY,sBAAoBzqB,KAAKsS,cAClDtS,KAAKtI,KAAKgzB,cAAgB1qB,KAAK0qB,cAC/B1qB,KAAKtI,KAAK2I,eAAiBL,KAAKK,eAChCL,KAAKtI,KAAK4I,aAAeN,KAAKM,aAC9BN,KAAKtI,KAAKI,eAAiBkI,KAAKlI,eAChCkI,KAAKtI,KAAK0G,qBAAuB4B,KAAK5B,qBACtC4B,KAAKtI,KAAKwb,2BAA6BlT,KAAKkT,2BAC5ClT,KAAKtI,KAAKmkB,wBAA0B7b,KAAK6b,wBACzC7b,KAAKtI,KAAKizB,uBAAyB3qB,KAAK2qB,uBACxC3qB,KAAKtI,KAAK2V,MAAQrN,KAAKqN,MACvBrN,KAAKtI,KAAK4xB,OAAStpB,KAAKspB,OACxBtpB,KAAKtI,KAAKkzB,aAAe5qB,KAAK4qB,aAC9B5qB,KAAKtI,KAAK0I,gBAAkBJ,KAAKI,gBACjCJ,KAAKtI,KAAK0V,cAAgBpN,KAAKoN,cAC/BpN,KAAKtI,KAAK6I,cAAgBP,KAAKO,cAC/BP,KAAKtI,KAAKmzB,YAAc7qB,KAAK6qB,YAC7B7qB,KAAKtI,KAAKozB,eAAiB9qB,KAAK8qB,eAChC9qB,KAAKtI,KAAKqzB,iBAAmB/qB,KAAK+qB,iBAClC/qB,KAAKtI,KAAKiG,oBAAsBqC,KAAKrC,oBACrCqC,KAAKtI,KAAK2H,oBAAsBW,KAAKX,oBACrCW,KAAKtI,KAAKwxB,gBAAkBuB,sBAAoBzqB,KAAKkpB,iBACrDlpB,KAAKtI,KAAKszB,UAAYhrB,KAAKgrB,UAC3BhrB,KAAKtI,KAAKuzB,UAAYjrB,KAAKirB,UAC3BjrB,KAAKtI,KAAK0wB,eAAiBpoB,KAAKooB,eAChCpoB,KAAKtI,KAAK8vB,QAAUiD,sBAAoBzqB,KAAKkrB,kBAC7ClrB,KAAKtI,KAAKyzB,gBAAkBnrB,KAAKmrB,gBACjCnrB,KAAKtI,KAAKmwB,kBAAoB7nB,KAAK6nB,kBACnC7nB,KAAKtI,KAAKK,eAAiB0yB,sBAAoBzqB,KAAKjI,gBACpDiI,KAAKtI,KAAKwQ,kBAAoBuiB,sBAAoBzqB,KAAKkI,mBACvDlI,KAAKtI,KAAK6G,aAAeksB,sBAAoBzqB,KAAKzB,cAClDyB,KAAKtI,KAAKC,eAAiB8yB,sBAAoBzqB,KAAKrI,gBACpDqI,KAAKtI,KAAKwjB,WAAauP,sBAAoBzqB,KAAKkb,YAChDlb,KAAKtI,KAAK0zB,iBAAmBX,sBAAoBzqB,KAAKorB,kBACtDprB,KAAKtI,KAAK4mB,UAAYmM,sBAAoBzqB,KAAKse,WAC/Cte,KAAKtI,KAAKgsB,OAAS+G,sBAAoBzqB,KAAK0jB,QAC5C1jB,KAAKtI,KAAK2zB,iBAAmBrrB,KAAKqrB,iBAClCrrB,KAAKtI,KAAK+vB,iBAAmBgD,sBAAoBzqB,KAAKsrB,kBACtDtrB,KAAKtI,KAAK6zB,gBAAkBd,sBAAoBzqB,KAAKurB,iBACrDvrB,KAAKtI,KAAKkE,aAAeoE,KAAKwrB,sBAC9BxrB,KAAKtI,KAAK6c,YAAckW,sBAAoBzqB,KAAKuU,aACjDvU,KAAKtI,KAAKiwB,eAAiB8C,sBAAoBzqB,KAAK2nB,gBACpD3nB,KAAKtI,KAAKsH,WAAagB,KAAKhB,WAC5BgB,KAAKtI,KAAKub,cAAgBjT,KAAKiT,cAC/BjT,KAAKtI,KAAK+zB,SAAWhB,sBAAoBzqB,KAAKyrB,UAC9C,IAAIC,EAAmB,yBACvB1rB,KAAKtI,KAAKg0B,GAAoB1rB,KAAK0rB,GAEnC1rB,KAAKtI,KAAkB,eAAI,GAE/BmpB,EAASjkB,UAAU+uB,cAAgB,SAAUzoB,GACzClD,KAAKoJ,QAAQ9Q,YAAU,OAAQ4K,GAAOA,IAE1C2d,EAASjkB,UAAUgvB,eAAiB,WAChC,IAAIrkB,EAAQvH,KACZA,KAAKtI,KAAKm0B,aAAe,SAAU3oB,GAC1BzL,oBAAkByL,EAAK3B,WAAY2B,EAAK3B,OAAOgH,UAAUC,SAAS,qBAChEtF,EAAK3B,OAAOgH,UAAUC,SAAS,uBAAyBtF,EAAK3B,OAAOgH,UAAUC,SAAS,kBAI9FjB,EAAM6B,Qf7tBQ,ee6tBqBlG,GAH/BA,EAAKiG,QAAS,GAKtBnJ,KAAKtI,KAAKoN,YAAc,SAAU5B,GAC9B,GAAIqE,EAAMnJ,sBAAwB8E,EAAK4oB,yBACnCvkB,EAAM7P,KAAKojB,gBAAgBxjB,SAAWiQ,EAAM7P,KAAKq0B,gBAAgBC,mBAAmB10B,OAEpF,IAAK,IAAIF,EAAI,EAAGA,EAAImQ,EAAM1I,UAAUvH,OAAQF,IACpCmQ,EAAM1I,UAAUzH,GAAGga,uBAAuB,6BAA6B9Z,QACvEiQ,EAAM7P,KAAKq0B,gBAAkC,mBAAExkB,EAAM1I,UAAUzH,GAAImQ,EAAMrL,wBAAwB9E,GAAG6C,OAIhHsN,EAAM8jB,iBAAmB9jB,EAAM7P,KAAK2zB,iBACpC9jB,EAAM4M,OAAO8X,EAAoB/oB,GACjCqE,EAAM6B,QAAQ6iB,EAAoB/oB,IAEtClD,KAAKtI,KAAKsN,cAAgB,SAAU9B,GAChCqE,EAAM8jB,iBAAmB9jB,EAAM7P,KAAK2zB,iBAC/B5zB,oBAAkByL,EAAKzE,OACxB8I,EAAM4M,OAAO+X,EAAsBhpB,GAEvCqE,EAAM6B,QAAQ8iB,EAAsBhpB,IAExClD,KAAKtI,KAAKy0B,WAAa,SAAUjpB,GAC7BqE,EAAM+c,oBACN/c,EAAM6B,QfxuBM,aewuBqBlG,IAErClD,KAAKtI,KAAK00B,mBAAqB,SAAUlpB,GACrCqE,EAAM4M,OAAO,gBAAiBjR,GAC9BA,EAAOqE,EAAMwP,aAEjB/W,KAAKtI,KAAK20B,iBAAmB,SAAUnpB,GACnCqE,EAAM4M,OAAO,cAAejR,GAC5BA,EAAOqE,EAAMwP,aAEjB/W,KAAKtI,KAAK40B,eAAiB,SAAUppB,GACjCqE,EAAM6B,QAAQ0C,EAAuB5I,IAEzClD,KAAKtI,KAAK60B,kBAAoBvsB,KAAK2rB,cAAc3N,KAAKhe,MACtDA,KAAKtI,KAAK80B,oBAAsBxsB,KAAK2rB,cAAc3N,KAAKhe,MACxDA,KAAKtI,KAAK+0B,yBAA2BzsB,KAAK2rB,cAAc3N,KAAKhe,MAC7DA,KAAKtI,KAAKg1B,uBAAyB1sB,KAAK2rB,cAAc3N,KAAKhe,MAC3DA,KAAKtI,KAAKi1B,kBAAoB3sB,KAAK2rB,cAAc3N,KAAKhe,MACtDA,KAAKtI,KAAKoO,kBAAoB9F,KAAK2rB,cAAc3N,KAAKhe,MACtDA,KAAKtI,KAAKk1B,eAAiB5sB,KAAK2rB,cAAc3N,KAAKhe,MACnDA,KAAKtI,KAAKm1B,eAAiB7sB,KAAK2rB,cAAc3N,KAAKhe,MACnDA,KAAKtI,KAAKo1B,gBAAkB9sB,KAAK2rB,cAAc3N,KAAKhe,MACpDA,KAAKtI,KAAKq1B,eAAiB/sB,KAAK2rB,cAAc3N,KAAKhe,MACnDA,KAAKtI,KAAKs1B,gBAAkBhtB,KAAK2rB,cAAc3N,KAAKhe,MACpDA,KAAKtI,KAAKu1B,aAAejtB,KAAK2rB,cAAc3N,KAAKhe,MACjDA,KAAKtI,KAAKw1B,eAAiBltB,KAAK2rB,cAAc3N,KAAKhe,MACnDA,KAAKtI,KAAKy1B,YAAcntB,KAAK2rB,cAAc3N,KAAKhe,MAChDA,KAAKtI,KAAK01B,SAAWptB,KAAK2rB,cAAc3N,KAAKhe,MAC7CA,KAAKtI,KAAK21B,WAAartB,KAAK2rB,cAAc3N,KAAKhe,MAC/CA,KAAKtI,KAAK41B,gBAAkBttB,KAAK2rB,cAAc3N,KAAKhe,MACpDA,KAAKtI,KAAK61B,WAAavtB,KAAK2rB,cAAc3N,KAAKhe,MAC/CA,KAAKtI,KAAK81B,YAAcxtB,KAAK2rB,cAAc3N,KAAKhe,MAChDA,KAAKtI,KAAK+1B,WAAaztB,KAAK2rB,cAAc3N,KAAKhe,MAC/CA,KAAKtI,KAAKg2B,YAAc,SAAUxqB,GAG9B,IAFA,IAAI+E,EAAOV,EAAM1I,UAEVoJ,EAAK/E,EAAa,UAAGqF,UAAUC,SAAS,iBAC3CtF,EAAa,WAEjBqE,EAAM6B,QfvvBO,ceuvBqBlG,IAEtClD,KAAKtI,KAAKmtB,KAAO,WAEb,GADAtd,EAAM7P,KAAK4S,GAAG,cAAe/C,EAAM4iB,gBAAiB5iB,IAC/C9P,oBAAkB8P,EAAMmhB,cAAe,CAExCnhB,EAAMmhB,aAAenhB,EAAM7P,KAAiB,aAAI,IAAIi2B,EAAWpmB,EAAM7P,QAG7EsI,KAAKtI,KAAKk2B,cAAgB5tB,KAAK2rB,cAAc3N,KAAKhe,MAClDA,KAAKtI,KAAKm2B,cAAgB7tB,KAAK2rB,cAAc3N,KAAKhe,MAClDA,KAAK8tB,6BACL9tB,KAAK+tB,qBACL/tB,KAAKguB,2BACLhuB,KAAKiuB,yBACLjuB,KAAKkuB,qBACLluB,KAAKmuB,sBAETtN,EAASjkB,UAAUwxB,cAAgB,SAAUC,EAAYC,GACrD,IAAK,IAAIx0B,EAAI,EAAGA,EAAIu0B,EAAW5uB,MAAMnI,OAAQwC,IACrCw0B,EACApd,YAAUmd,EAAW5uB,MAAM3F,IAAK,iBAGhCyT,eAAa8gB,EAAW5uB,MAAM3F,IAAK,kBAI/C+mB,EAASjkB,UAAU2xB,cAAgB,WAC/B,MAAoB,SAAhBvuB,KAAKspB,SAA8D,IAAzCtpB,KAAKspB,OAAOvhB,WAAWvJ,QAAQ,MAOjEqiB,EAASjkB,UAAUkxB,2BAA6B,WAC5C,IAAIvmB,EAAQvH,KACZA,KAAKtI,KAAK82B,UAAY,SAAUtrB,GAK5B,GAJAqE,EAAMknB,oBACNlnB,EAAM+c,oBACN/c,EAAMmnB,aAAannB,EAAM1I,WACzB0I,EAAM4M,OAAO,eAAgBjR,GACzB1M,EAAa+Q,KAAWhO,EAAUgO,KAAWA,EAAMwQ,gBAAiB,CACpE,IAAI4W,EAAMr2B,YAAU,sBAAuBiP,GAAO/J,OAAO,SAAUC,GAC/D,MAAoC,OAA7BA,EAAE8a,YAAYC,aACtBlhB,OACHmhB,WAAS,gCAAiCkW,EAAM,GAAIpnB,GAExD,GAAIA,EAAMgnB,iBAAmBhnB,EAAMvO,cAG/B,IAAK,IAFDiP,EAAOV,EAAM0S,kBAAkBhS,KAC/B2mB,KAAenmB,MAAM3L,KAAKmL,GACrB7Q,EAAIw3B,EAAUt3B,OAAS,EAAGF,EAAI,EAAGA,IACtC,IAAKiD,EAASu0B,EAAUx3B,IAAK,CACrBw3B,EAAUx3B,GAAGiU,oBACb9D,EAAM6mB,cAAcQ,EAAUx3B,IAAI,GAEtC,MAKZ,GAAImQ,EAAMnJ,sBAAwBmJ,EAAMW,kBAAkB2mB,mBAAmD,WAA9BtnB,EAAMwP,YAAkB,QAAgD,aAA9BxP,EAAMwP,YAAkB,QAAmB,CAGhK,GADAxP,EAAM7P,KAAKq0B,gBAAuC,0BACR,WAAtCxkB,EAAM7P,KAAKwQ,kBAAkB/E,KAAmB,CAChD,IACIlJ,EAAQsN,EAAMrL,wBAAwBsC,QAAQ+I,EAAM7P,KAAKq0B,gBAAsB,MACnFxkB,EAAM7P,KAAKq0B,gBAAkC,mBAAExkB,EAAM1I,UAAU5E,GAAQA,IAG/EsN,EAAM6B,Qfh3BK,Yeg3BqBlG,GAChCqE,EAAMvO,eAAgB,GAG1B,IAAImL,EAAWnE,KACfA,KAAKtI,KAAKiN,gBAAkB,SAAUzB,GAClC,IACItD,EAActH,YAAU,SAAU4K,GACtC,IAAM1M,EAAa2N,KAAc5K,EAAU4K,IAAcjN,EAAgB8I,QAA0B,SAAhBJ,EAC/EuE,EAASgQ,OAAO,oBAAqBjR,GACrCA,EAAQiB,EAAoB,iBAE3B,GAAiC,IAA7BA,EAAS5G,SAASjG,QAAgBiC,EAAU4K,IAAaA,EAASzN,sBAAsBC,cAAa,CAC1G,IAAI6C,EAAK2K,EAASzN,WAClByN,EAAS2kB,WAAWvR,kBAAkB/d,EAAG9C,WAAW8E,MACpD0H,EAAKkS,OAASjR,EAASzM,KAAKhB,WAAqB,WAAE8E,KAAO2I,EAAS5G,SAiBvE,GAfK/G,EAAa2N,IAAcjN,EAAgB8I,OAAUvI,oBAAkB0M,EAASzN,cAC7EsJ,KAAK6c,YACLpE,WAAS,cAAc,EAAMvV,GAEjCiB,EAASgQ,OAAO,gBAAiBjR,IAGrC/G,SAAO+G,EAAMiB,EAAS4S,aAClB5S,EAASxG,sBACTuF,EAAKkS,OAASlS,EAAKkS,OAAO3M,SAE1BtE,EAASnL,gBACTgH,KAAK+b,cAAcsF,sBAAwBld,EAASkd,wBAGnDrhB,KAAK6c,WAAY,CAClB,IAAIiS,EAAoB,IAAIC,WAI5B,OAHA5qB,EAASiF,QAAQyI,EAAwB3O,EAAM,SAAU8rB,GACrDF,EAAkBG,QAAQD,KAEvBF,IAGf9uB,KAAKtI,KAAKsL,IAAM,SAAUG,EAAMD,GACxBqE,EAAMmhB,cACNnhB,EAAMmhB,aAAa1lB,IAAIG,EAAMD,KAIzC2d,EAASjkB,UAAUuxB,mBAAqB,WACpC,IAAI5mB,EAAQvH,KACZA,KAAKtI,KAAKuN,aAAe,SAAU/B,GAC/B,KAAKA,EAAKE,KAAK6R,KAAO1N,EAAM7P,KAAKyZ,QAAQ8D,GAAK,iBAA6C,IAA3B1N,EAAMmgB,kBACjExkB,EAAKE,KAAK6R,KAAO1N,EAAM7P,KAAKyZ,QAAQ8D,GAAK,eAAyC,IAAzB1N,EAAMqgB,gBAC/D1kB,EAAKE,KAAK6R,KAAO1N,EAAM7P,KAAKyZ,QAAQ8D,GAAK,eAA2C,IAA3B1N,EAAMmgB,kBAFpE,CAKA,IAAIwH,EAAkB,IAAIH,WAO1B,OANAxnB,EAAM6B,QAAQ+lB,EAAqBjsB,EAAM,SAAUksB,GAC1CA,EAAYjmB,QACb5B,EAAM4M,OAAOgb,EAAqBjsB,GAEtCgsB,EAAgBD,QAAQG,KAErBF,IAEXlvB,KAAKtI,KAAK23B,cAAgB,SAAUnsB,GAChC,IAAIgsB,EAAkB,IAAIH,WAI1B,OAHAxnB,EAAM6B,QAAQ9Q,YAAU,OAAQ4K,GAAOA,EAAM,SAAUosB,GACnDJ,EAAgBD,QAAQK,KAErBJ,GAEXlvB,KAAKtI,KAAKkO,UAAY,SAAU1C,GAC5B,GAAKzL,oBAAkByL,EAAKvE,OAAQuE,EAAKvE,IAAI4J,UAAUC,SAAS,gBAAhE,CAIA,IAAI0mB,EAAkB,IAAIH,WAI1B,OAHAxnB,EAAM6B,QAAQmmB,GAAkBrsB,EAAM,SAAUssB,GAC5CN,EAAgBD,QAAQO,KAErBN,EAPHhsB,EAAKiG,QAAS,IAU1B0X,EAASjkB,UAAUqxB,uBAAyB,WACxC,IAAI1mB,EAAQvH,KACZA,KAAKtI,KAAKqM,gBAAkB,SAAUb,GAC9BqE,EAAMkoB,iBACNloB,EAAMkoB,iBAAkB,EACxBloB,EAAM7P,KAAKhB,YAAe0e,OAAQ7N,EAAMhK,SAAUgR,MAAOlQ,WAAS,QAASkJ,EAAM7P,KAAKhB,cAGtF6Q,EAAM6B,QAAQsmB,EAAwBxsB,IAG9ClD,KAAKtI,KAAKqO,SAAW,SAAU7C,GAC3B,GAAIqE,EAAM7P,KAAKi4B,oBAAqB,CAChC,IAAIC,EAAeroB,EAAM7P,KAAKm4B,kBAAkBC,YAAY3e,QAAQC,uBAAuB,cAAc,IACpG3Z,oBAAkBm4B,IAAiBA,EAAa3a,KAAO1N,EAAM4J,QAAQ8D,GAAK,6BAC3E/R,EAAKiG,QAAS,GAGtB,IAAI+lB,EAAkB,IAAIH,WAO1B,OANAxnB,EAAM6B,QAAQ2mB,GAAiB7sB,EAAM,SAAU8sB,GACtCA,EAAa7mB,QACd5B,EAAM4M,OAAO4b,GAAiBC,GAElCd,EAAgBD,QAAQe,KAErBd,GAEXlvB,KAAKtI,KAAKsO,UAAY,SAAU9C,GAC5BqE,EAAM6B,QAAQ6mB,GAAkB/sB,GAChCqE,EAAM4M,OAAO8b,GAAkB/sB,IAEnClD,KAAKtI,KAAKuO,SAAW,SAAU/C,GAC3B,IACIgtB,EAAU,IAAInB,WAGlB,OAFA7rB,EAAS,QAAIgtB,EACb3oB,EAAM4M,OAAOgc,GAAiBjtB,GACvBgtB,GAEXlwB,KAAKtI,KAAK0O,SAAW,SAAUlD,GAC3BqE,EAAM6B,QAAQgnB,GAAiBltB,GAC/BqE,EAAM4M,OAAOic,GAAiBltB,IAElClD,KAAKtI,KAAK6O,gBAAkB,SAAUrD,GAClCqE,EAAM6B,QAAQinB,GAAwBntB,GACtCqE,EAAM4M,OAAOkc,GAAwBntB,IAEzClD,KAAKtI,KAAK4O,eAAiB,SAAUpD,GACjCqE,EAAM6B,QAAQknB,GAAuBptB,GACrCqE,EAAM4M,OAAOmc,GAAuBptB,IAExClD,KAAKtI,KAAKwO,YAAc,SAAUhD,GAC9BqE,EAAM6B,QAAQmnB,GAAoBrtB,GAClCqE,EAAM4M,OAAOoc,GAAoBrtB,IAErClD,KAAKtI,KAAK2O,kBAAoB,SAAUnD,GACpCqE,EAAM6B,QAAQonB,GAA0BttB,GACxCqE,EAAM4M,OAAOqc,GAA0BttB,IAE3ClD,KAAKtI,KAAKyO,YAAc,SAAUjD,GACE,SAA5BqE,EAAM3L,aAAaC,MACnB0L,EAAM6B,QAAQqnB,GAAoBvtB,GAEtCqE,EAAM4M,OAAOsc,GAAoBvtB,KAGzC2d,EAASjkB,UAAU6xB,kBAAoB,WACnCzuB,KAAK0wB,yBAET7P,EAASjkB,UAAU0tB,iBAAmB,WAClC,IAAI5zB,EAAa,aAIjB,GAAIsJ,KAAKtJ,YAAcQ,EAAgB8I,MAAO,CAC1C,IAAIvB,EAAOuB,KAAKzC,SACZozB,EAAYtyB,WAAS,QAAS2B,KAAKtJ,YACvCsJ,KAAKtI,KAAKhB,YAAe0e,OAAQ3W,EAAM8P,MAAOoiB,QAG9C3wB,KAAKtI,KAAKhB,WAAesJ,KAAKtJ,sBAAsBC,cAChC,IAAIA,cAAYqJ,KAAKtJ,WAAWA,WAAYsJ,KAAKtJ,WAAWk6B,aAAc5wB,KAAKtJ,WAAWE,SAA1GoJ,KAAKzC,SAEb,GAAIyC,KAAKtJ,sBAAsBC,gBAAgBqJ,KAAKtJ,WAAWA,WAAWgwB,SAAW1mB,KAAKtJ,WAAW+C,OAAQ,CACzGuG,KAAKtI,KAAKhB,WAAWA,GAAY8E,KAAO9B,EAAYsG,KAAKtJ,WAAWA,GAAY8E,MAChFwE,KAAKtI,KAAKhB,WAAgB,MAAIsJ,KAAKtJ,WAAW+C,MAE9C,IAAIgZ,EAAUzS,KACTvI,oBAAkBuI,KAAKtI,KAAKhB,WAAgB,QAC7CsJ,KAAKtI,KAAKhB,WAAgB,MAAE0hB,KAAK,SAAU3a,GACvC,IAAIjE,EAAKiZ,EAAQ/a,KAAKhB,WACtB8C,EAAG9C,GAAYgwB,SAAU,EACzBltB,EAAkB,iBAAI,EACtBA,EAAG9C,GAAY8E,KAAOiC,EAAE2X,OACxB5b,EAAU,QAAI,IAAIq3B,kBAKlChQ,EAASjkB,UAAUoxB,yBAA2B,WAC1C,IAAIzmB,EAAQvH,KACZA,KAAKtI,KAAKkN,YAAc,SAAU1B,GACL,YAArBA,EAAKtD,aAA6BsD,EAAK3B,QAAU2B,EAAK3B,OAAO+jB,eAC7DpiB,EAAK3B,OAAO+jB,cAAc/c,UAAUC,SAAS,yBAC7CtF,EAAKiG,QAAS,GAmBlB,GAhBoB,YADF7Q,YAAU,cAAe4K,IAEvCqE,EAAM4M,OAAO,qBAEjB5M,EAAM4M,OAAO,eAAiBvZ,WAAYsI,IACrC1M,EAAa+Q,IAAW9P,oBAAkB8P,EAAM6G,eAAkBlX,EAAgBqQ,IAClC,IAA7CA,EAAM7P,KAAKK,eAAeV,QAAQC,QAAyD,IAAzCiQ,EAAM7P,KAAKC,eAAeC,IAAIN,SACpFiQ,EAAM4M,OAAO,gBAAkB5W,SAAUgK,EAAM7P,KAAKhB,aACpD6Q,EAAM7P,KAAK+I,eAAgB/J,WAAY6Q,EAAMwP,YAAY3B,SAAU,GAC/D3d,oBAAkB8P,EAAM7P,KAAwB,kBAAEhB,cAClD6Q,EAAM7P,KAAK4H,aAAab,KAAKqyB,YAAcvpB,EAAM7P,KAAKhB,sBAAsBC,cACxE4Q,EAAM7P,KAAKhB,WACVe,oBAAkB8P,EAAM7P,KAAKhB,YAAc,IAAIC,cAAgB,IAAIA,cAAY4Q,EAAM7P,KAAKhB,YAC/F6Q,EAAM7P,KAAK4H,aAAab,KAAKsyB,wBAAyB,EACtDxpB,EAAM7P,KAAK8f,MAAQjQ,EAAM7P,KAAK8f,iBAAiBC,QAAQlQ,EAAM7P,KAAK8f,MAAQ,IAAIC,UAGjE,cAAjBlQ,EAAMlM,QAA2C,eAAjBkM,EAAMlM,OAAyB,CAC/D,IAAI21B,EAAoB,IAAIjC,WAO5B,OANAxnB,EAAM6B,QAAQ6nB,EAAoB/tB,EAAM,SAAU4Z,GACzCA,EAAW3T,QACZ5B,EAAM4M,OAAOob,GAAkBzS,GAEnCkU,EAAkB/B,QAAQnS,KAEvBkU,IAGfhxB,KAAKtI,KAAKmN,eAAiB,SAAU3B,GAkBjC,GAjBAqE,EAAM4M,OAAO,iBAAkBjR,GAC/BqE,EAAM+c,oBACN/c,EAAM2pB,sBACmB,YAArBhuB,EAAKtD,aACL2H,EAAM4M,OAAO,qBAEjB5M,EAAM4M,OAAO,kBAAoBvZ,WAAYsI,IACpB,QAArBA,EAAKtD,aAAgE,QAAtC2H,EAAM3L,aAAaQ,gBAAkE,WAAtCmL,EAAM3L,aAAaQ,gBACjGmL,EAAM4M,OAAOgd,GAAiBjuB,GAET,cAArBA,EAAKtD,aACL2H,EAAM4M,OAAO0K,GAAkB3b,GAEnCqE,EAAM4M,OAAO,oBAAqBjR,GACT,SAArBA,EAAKtD,aAA0B2H,EAAM2T,WAAW/c,IAAI,SAAUizB,GAAM,OAA+B,IAAxBA,EAAGC,mBAA8B/5B,QAC5GiQ,EAAM7P,KAAK45B,UAEM,cAAjB/pB,EAAMlM,QAA2C,eAAjBkM,EAAMlM,OAAyB,CAC/DkM,EAAMlM,OAA0B,cAAjBkM,EAAMlM,OAAyB,WAAa,YAC3D,IAAIk2B,GAAkBhqB,EAAMiqB,iBACxB1U,GACAre,KAAM8yB,EACNE,UAAWlqB,EAAMkqB,UACjBC,aAAcnqB,EAAMmqB,aACpBvQ,gBAAiB5Z,EAAM4Z,gBACvBvhB,YAAa2H,EAAMlM,OACnBsD,IAAK4I,EAAMoqB,cAEfpqB,EAAM6B,QAAQ6R,EAAuB6B,GACfvV,EAAMrL,wBAAwBsB,OAAO,SAAUC,GACjE,OAAOA,EAAE1E,WAAaw4B,EAAe,GAAGx4B,WAEvBzB,QACjBiQ,EAAMkiB,sBAEVliB,EAAMlM,OAAS,GACfkM,EAAMiqB,gBAAkBjqB,EAAMoqB,aAAepqB,EAAM4Z,wBAGnD5Z,EAAM6B,QAAQ6R,EAAuB/X,KAIjD2d,EAASjkB,UAAUmxB,mBAAqB,WACpC,IAAIxmB,EAAQvH,KAERmE,EAAWnE,KACfA,KAAKtI,KAAKoO,kBAAoB,SAAU5C,GACpCqE,EAAM6B,QAAQwoB,GAA0B1uB,GACxCqE,EAAM4M,OAAOyd,GAA0B1uB,IAE3ClD,KAAKtI,KAAKsP,gBAAkB,SAAU9D,GAClCqE,EAAM4M,OAAO,kBAAmBjR,GAChCqE,EAAM6B,QAAQyoB,GAAwB3uB,IAE1ClD,KAAKtI,KAAK+M,aAAe,SAAUvB,GAC3BzL,oBAAkBuI,KAAK6c,YACvBpE,WAAS,cAAc,EAAOvV,GAG9BuV,WAAS,aAAczY,KAAK6c,WAAY3Z,GAE5CiB,EAAS7E,aAAaO,YAAYqD,IAEtClD,KAAKtI,KAAKgN,cAAgB,SAAUxB,GAC5BzL,oBAAkBuI,KAAK6c,YACvBpE,WAAS,cAAc,EAAOvV,GAG9BuV,WAAS,aAAczY,KAAK6c,WAAY3Z,GAE5CiB,EAAS7E,aAAaC,WAAW2D,IAErClD,KAAKtI,KAAKgO,iBAAmB,SAAUxC,GACnCqE,EAAM4M,OAAO2d,GAAyB5uB,GACtCqE,EAAM6B,QAAQ0oB,GAAyB5uB,IAE3ClD,KAAKtI,KAAK+N,gBAAkB,SAAUvC,GAClCqE,EAAM4M,OAAO4d,EAAwB7uB,GACrCqE,EAAM6B,QAAQ2oB,EAAwB7uB,IAE1ClD,KAAKtI,KAAKgN,cAAgB,SAAUxB,GAChCqE,EAAMjI,aAAaC,WAAW2D,KAGtC2d,EAASjkB,UAAUsxB,mBAAqB,WACpC,IAAI3mB,EAAQvH,KACZA,KAAKtI,KAAKuP,mBAAqB,SAAU/D,GACrCqE,EAAM6B,QAAQ4oB,GAA2B9uB,IAE7ClD,KAAKtI,KAAKu6B,aAAe,SAAU/uB,GAC/BqE,EAAM6B,QfnjCQ,eemjCqBlG,IAEvClD,KAAKtI,KAAKw6B,QAAU,SAAUhvB,GACtBqE,EAAM7P,KAAKy6B,OACXjvB,EAAKiG,QAAS,GAGlB5B,EAAM4M,OAAOie,GAAmBlvB,GAChCqE,EAAM6B,QfjkCG,UeikCqBlG,KAElClD,KAAKtI,KAAK26B,QAAU,SAAUnvB,GACtBqE,EAAM7P,KAAKy6B,OACXjvB,EAAKiG,QAAS,GAGlB5B,EAAM4M,OAAOme,GAAmBpvB,GAChCA,EAAKiG,QAAS,KAStB0X,EAASjkB,UAAUqsB,SAAW,WAC1BjpB,KAAKqqB,qBACLrqB,KAAK4rB,iBACLnT,WAAS,qBAAsBzY,KAAKuyB,mBAAoBvyB,KAAKtI,MAE7D+gB,WAAS,mBAAoBzY,KAAQ,iBAAGA,KAAKtI,OAQjDmpB,EAASjkB,UAAUmsB,oBAAsB,WACrC,IAAK/oB,KAAK3I,QAAQC,SAAY0I,KAAK8oB,WAAWxR,YAAclf,OAAOC,KAAK2H,KAAKtJ,YAAYY,OAAS,CAC9F0I,KAAK3I,WAOL,IAAK,IAHDoB,EAASuH,KAAKtJ,WAAW,GAEzB2B,EAAOD,OAAOC,KAAKI,GACdrB,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,KACuC,KAA/D4I,KAAK7C,aAAc6C,KAAKhD,iBAAiBwB,QAAQnG,EAAKjB,KACvD4I,KAAK3I,QAAQkB,KAAKF,EAAKjB,MAKvCypB,EAASjkB,UAAU4uB,oBAAsB,WACrC,IAAItrB,KAaJ,OAXAA,EAAK+nB,YAAcjoB,KAAKpE,aAAaqsB,YACrC/nB,EAAKD,aAAeD,KAAKpE,aAAaqE,aACtCC,EAAKgoB,cAAgBloB,KAAKpE,aAAassB,cACvChoB,EAAK9D,eAAsD,WAArC4D,KAAKpE,aAAaQ,eAA8B,SAAW,MACjF8D,EAAK6Q,oBAAsB/Q,KAAKpE,aAAamV,oBAC7C7Q,EAAKsyB,kBAAoBxyB,KAAKpE,aAAa42B,kBAC3CtyB,EAAKyU,SAAW3U,KAAKpE,aAAa+Y,SAClCzU,EAAKuyB,wBAA0BzyB,KAAKpE,aAAa62B,wBACjDvyB,EAAKwyB,iBAAmB1yB,KAAKpE,aAAa82B,iBAC1CxyB,EAAS,KAAIF,KAAKpE,aAAiB,KACnCsE,EAAKyyB,OAAS3yB,KAAKpE,aAAa+2B,OACxB3yB,KAAKpE,aAAaC,MACtB,IAAK,SAGL,IAAK,QACDqE,EAAKrE,KAAOmE,KAAKpE,aAAaC,KAC9B,MACJ,IAAK,MACDqE,EAAKrE,KAAO,SACZ,MACJ,IAAK,OACDqE,EAAKrE,KAAO,SACZqE,EAAKsyB,mBAAoB,EAGjC,OAAOtyB,GAQX2gB,EAASjkB,UAAU0uB,eAAiB,WAChC,GAAItrB,KAAKynB,iBAAkB,CAEvB,IAAK,IADDrO,KACKhiB,EAAI,EAAGA,EAAI4I,KAAKynB,iBAAiBnwB,OAAQF,IAC9C,OAAQ4I,KAAKynB,iBAAiBrwB,IAC1B,IAAK,SACL,KAAK2nB,mBAAiBoE,OAClB/J,EAAM7gB,MAAOq6B,KAAM5yB,KAAKwjB,KAAKqP,YAAY,UACrCtxB,OAAQ,aAAc0T,GAAIjV,KAAKmR,QAAQ8D,GAAK,4BAC5CmE,QAAUwZ,KAAM5yB,KAAKwjB,KAAKqP,YAAY,SAAU5d,GAAI,UAAa2d,KAAM5yB,KAAKwjB,KAAKqP,YAAY,SAAU5d,GAAI,UAAa2d,KAAM5yB,KAAKwjB,KAAKqP,YAAY,SAAU5d,GAAI,YACtK,MACJ,IAAK,SACL,KAAK8J,mBAAiBuE,UAClBlK,EAAM7gB,MAAOq6B,KAAM5yB,KAAKwjB,KAAKqP,YAAY,aACrCtxB,OAAQ,aAAcuxB,QAAS,mBAAoB7d,GAAIjV,KAAKmR,QAAQ8D,GAAK,8BAC7E,MACJ,IAAK,UACL,KAAK8J,mBAAiBwE,WAClBnK,EAAM7gB,MAAOq6B,KAAM5yB,KAAKwjB,KAAKqP,YAAY,cACrCtxB,OAAQ,aAAcuxB,QAAS,oBAAqB7d,GAAIjV,KAAKmR,QAAQ8D,GAAK,+BAC9E,MACJ,QACImE,EAAM7gB,KAAKyH,KAAKynB,iBAAiBrwB,IAG7C,OAAOgiB,EAGP,OAAO,MASfyH,EAASjkB,UAAUsuB,eAAiB,WAChC,GAAIlrB,KAAKwnB,QAAS,CACdxnB,KAAKwjB,KAAO,IAAIC,OAAK,WAAYzjB,KAAK+iB,cAAe/iB,KAAK0jB,QAG1D,IAAK,IAFDtK,KACA2Z,OAAc,EACT37B,EAAI,EAAGA,EAAI4I,KAAKwnB,QAAQlwB,OAAQF,IACrC,OAAQ4I,KAAKwnB,QAAQpwB,IACjB,IAAK,SACL,KAAK0nB,cAAYkU,OACb5Z,EAAM7gB,KAAK,UACX,MACJ,IAAK,QACL,KAAKumB,cAAYzN,MACb+H,EAAM7gB,KAAK,SACX,MACJ,IAAK,YACL,KAAKumB,cAAYsE,UACb2P,EAAc/yB,KAAKwjB,KAAKqP,YAAY,aACpCzZ,EAAM7gB,MAAOq6B,KAAMG,EAAaA,YAAaA,EACzCE,WAAY,WAAYhe,GAAIjV,KAAKmR,QAAQ8D,GAAK,2BAClD,MACJ,IAAK,cACL,KAAK6J,cAAYuE,YACb0P,EAAc/yB,KAAKwjB,KAAKqP,YAAY,eACpCzZ,EAAM7gB,MAAOq6B,KAAMG,EACfA,YAAaA,EAAaE,WAAY,aAAche,GAAIjV,KAAKmR,QAAQ8D,GAAK,6BAE9E,MACJ,IAAK,SACL,KAAK6J,cAAYwE,UACbyP,EAAc/yB,KAAKwjB,KAAKqP,YAAY,aACpCzZ,EAAM7gB,MACFq6B,KAAMG,EAAaA,YAAaA,EAChCE,WAAY,WAAYhe,GAAIjV,KAAKmR,QAAQ8D,GAAK,wBAElD,MACJ,IAAK,UACL,KAAK6J,cAAYyE,WACbwP,EAAc/yB,KAAKwjB,KAAKqP,YAAY,cACpCzZ,EAAM7gB,MACFq6B,KAAMG,EAAaA,YAAaA,EAChCE,WAAY,YAAahe,GAAIjV,KAAKmR,QAAQ8D,GAAK,yBAEnD,MACJ,QACImE,EAAM7gB,KAAKyH,KAAKwnB,QAAQpwB,IAGpC,OAAOgiB,EAGP,OAAO,MAGfyH,EAASjkB,UAAU0qB,eAAiB,SAAUjwB,EAAS67B,EAAoBj5B,QAC5C,IAAvBi5B,IAAiCA,GAAqB,QAC5C,IAAVj5B,IAAoBA,EAAQ,GAChC,IAAIyF,EAASrI,EAET67B,IACAlzB,KAAKgmB,gBAET,IAAImN,EACAC,EACJn5B,EAAkB,IAAVA,GAAe,EAAIA,EAE3B,IAAK,IADDo5B,KACKj8B,EAAI,EAAGA,EAAIsI,EAAOpI,OAAQF,IAAK,CACpC6C,GAAgB,EAChB,IAAIua,EAAaxU,KAAKtI,KAAKqb,eAAerT,EAAOtI,GAAGuJ,KAGpD,GAFAyyB,EAAa5e,MACb2e,KAC+B,iBAApBnzB,KAAK3I,QAAQD,GACpBg8B,EAAWlf,MAAQif,EAAejf,MAAQlU,KAAK3I,QAAQD,QAGvD,IAAK,IAAIk8B,EAAK,EAAGC,EAAKn7B,OAAOC,KAAKqH,EAAOtI,IAAKk8B,EAAKC,EAAGj8B,OAAQg8B,IAAM,CAChE,IAAI/S,EAAOgT,EAAGD,GACVr5B,IAAU+F,KAAKZ,iBAA4B,aAATmhB,EAClC4S,EAAe5S,GAAQ7gB,EAAOtI,GAAGmpB,GAEnB,YAATA,GAAuB9oB,oBAAkBiI,EAAOtI,GAAGmpB,IAInDvgB,KAAKhH,gBAAkBvB,oBAAkB+c,IAAexU,KAAKwzB,mBAA8B,SAATjT,EACvF6S,EAAW7S,GAAQ4S,EAAe5S,GAAQ/L,EAAW+L,MAEtB,iBAATA,IACtB6S,EAAW7S,GAAQ4S,EAAe5S,GAAQ7gB,EAAOtI,GAAGmpB,KAPpD6S,EAAW7S,GAAQvgB,KAAKsnB,eAAe5nB,EAAOtI,GAAGmpB,IAAO,EAAOtmB,GAC/Dk5B,EAAe5S,GAAQ7gB,EAAOtI,GAAGmpB,IAUxC4S,EAA4B,SAC7BnzB,KAAKgmB,YAAYztB,KAAK,IAAIuH,EAAOqzB,IAErCE,EAAqB96B,KAAK66B,IACrB37B,oBAAkBuI,KAAKgmB,YAAYhmB,KAAKZ,mBAAqBY,KAAKuqB,WAC/D6I,EAAWlf,QAAUlU,KAAKgmB,YAAYhmB,KAAKZ,iBAAiB8U,QACxDzc,oBAAkBuI,KAAKyzB,uBACvBzzB,KAAKyzB,oBAAsBzzB,KAAKgmB,YAAYhmB,KAAKZ,iBAAiBs0B,UAClE1zB,KAAK2zB,gBAAkB3zB,KAAKgmB,YAAYhmB,KAAKZ,iBAAiB8U,OAElEkf,EAAWM,UAAY,SAInC,OAAOL,GASXxS,EAASjkB,UAAUg3B,kBAAoB,SAAUC,GAG7C,IAAK,IADDC,GAAiB,EACZR,EAAK,EAAGS,EAFA37B,OAAOC,KAAKw7B,GAEeP,EAAKS,EAAaz8B,OAAQg8B,IAAM,CACxE,IAAI/S,EAAOwT,EAAaT,GACxB,OAAQ/S,GACJ,IAAK,UACDvgB,KAAKtI,KAAKL,QAAU2I,KAAKsnB,eAAetnB,KAAK3I,SAC7C,MACJ,IAAK,kBACD2I,KAAKtI,KAAKs8B,iBACV,MACJ,IAAK,cACDh0B,KAAKtI,KAAK2a,YAAcrS,KAAKqS,YAC7B,MACJ,IAAK,eACDrS,KAAKtI,KAAK4a,aAAemY,sBAAoBzqB,KAAKsS,cAClDwhB,GAAiB,EACjB,MACJ,IAAK,uBACD9zB,KAAKtI,KAAK0G,qBAAuB4B,KAAK5B,qBACtC,MACJ,IAAK,6BACD4B,KAAKtI,KAAKwb,2BAA6BlT,KAAKkT,2BAC5C,MACJ,IAAK,UACDlT,KAAKtI,KAAK8vB,QAAUxnB,KAAKkrB,iBACzB,MACJ,IAAK,iBACDlrB,KAAKtI,KAAK0wB,eAAiBpoB,KAAKooB,eAChC,MACJ,IAAK,oBACDpoB,KAAKtI,KAAKwQ,kBAAoBuiB,sBAAoBzqB,KAAKkI,mBACvD,MACJ,IAAK,eACDlI,KAAKtI,KAAK4I,aAAeN,KAAKM,aAC9B,MACJ,IAAK,oBACDN,KAAKtI,KAAKu8B,kBAAoBj0B,KAAKi0B,kBACnC,MACJ,IAAK,eACDj0B,KAAKtI,KAAK6G,aAAeksB,sBAAoBzqB,KAAKzB,cAClD,MACJ,IAAK,iBACDyB,KAAKtI,KAAKC,eAAiB8yB,sBAAoBzqB,KAAKrI,gBACpD,MACJ,IAAK,iBACDqI,KAAKtI,KAAKI,eAAiBkI,KAAKlI,eAChC,MACJ,IAAK,iBACIkI,KAAKhH,gBACNgH,KAAKtI,KAAKK,eAAiB0yB,sBAAoBzqB,KAAKjI,iBAExD,MACJ,IAAK,iBACDiI,KAAKtI,KAAK2I,eAAiBL,KAAKK,eAChC,MACJ,IAAK,sBACDL,KAAKtI,KAAK2H,oBAAsBW,KAAKX,oBACrC,MACJ,IAAK,aACDW,KAAKtI,KAAKwjB,WAAauP,sBAAoBzqB,KAAKkb,YAChD,MACJ,IAAK,0BACDlb,KAAKtI,KAAKmkB,wBAA0B7b,KAAK6b,wBACzC,MACJ,IAAK,aAID,GAHA7b,KAAKmd,cAAiBnd,KAAKtJ,sBAAsBC,iBAAkBc,oBAAkBuI,KAAKtJ,WAAW+C,QAC9FuG,KAAKtJ,WAAWE,mBAAmB+vB,oBAC1C3mB,KAAKgpB,gBAAgBhpB,KAAKtJ,YACtBsJ,KAAKmd,YAAa,CAClB,GAAIjmB,EAAgB8I,MAAO,CACvB,IAAIuO,EAAQlQ,WAAS,QAAS2B,KAAKtJ,YACnCsJ,KAAKtI,KAAKhB,YAAe0e,OAAQpV,KAAKzC,SAAUgR,MAAOA,OAEtD,CACD,IAAI9P,EAAOuB,KAAKtJ,WAChBsJ,KAAKtI,KAAKhB,WAAe+H,aAAgB9H,cACrB,IAAIA,cAAY8H,EAAK/H,WAAY+H,EAAKmyB,aAAcnyB,EAAK7H,SAAzEoJ,KAAKzC,SAETyC,KAAK5B,uBACL4B,KAAKtI,KAAKqkB,cAAcmY,qBAAsB,QAIlDl0B,KAAKsqB,mBACDtqB,KAAK5B,uBACL4B,KAAKtI,KAAKqkB,cAAcpR,sBACxB3K,KAAKtI,KAAKqkB,cAAcoY,cAAc,MACtCn0B,KAAKtI,KAAKqkB,cAAcqY,eAGhC,MACJ,IAAK,QACDp0B,KAAKtI,KAAK8f,MAAQxX,KAAKwX,MACvB,MACJ,IAAK,oBACGqc,EAAQtT,GACRvgB,KAAKolB,cAGLplB,KAAKmlB,YAET,MACJ,IAAK,qBACDnlB,KAAKtI,KAAK45B,UACV,MACJ,IAAK,YACDtxB,KAAKtI,KAAKuzB,UAAYjrB,KAAKirB,UAC3B,MACJ,IAAK,cACDjrB,KAAKtI,KAAK6c,YAAckW,sBAAoBzqB,KAAKuU,aACjD,MACJ,IAAK,aACDvU,KAAKtI,KAAKsH,WAAagB,KAAKhB,WAC5B,MACJ,IAAK,gBACDgB,KAAKtI,KAAKub,cAAgBjT,KAAKiT,cAC/B,MACJ,IAAK,YACDjT,KAAKtI,KAAKszB,UAAYhrB,KAAKgrB,UAC3B,MACJ,IAAK,SACIvzB,oBAAkBuI,KAAKspB,SAAoC,iBAAjBtpB,KAAW,SAAgD,IAA9BA,KAAKspB,OAAO9qB,QAAQ,OAC5FwB,KAAKmR,QAAQ5W,MAAM+uB,OAAStpB,KAAKspB,QAErCtpB,KAAKtI,KAAK4xB,OAAStpB,KAAKspB,OACxB,MACJ,IAAK,QACI7xB,oBAAkBuI,KAAKqN,QAAkC,iBAAhBrN,KAAU,QAA+C,IAA7BA,KAAKqN,MAAM7O,QAAQ,OACzFwB,KAAKmR,QAAQ5W,MAAM8S,MAAQrN,KAAKqN,OAEpCrN,KAAKtI,KAAK2V,MAAQrN,KAAKqN,MACvB,MACJ,IAAK,SACDrN,KAAKtI,KAAKgsB,OAAS1jB,KAAK0jB,OACxB1jB,KAAK6iB,iBACL7iB,KAAKtI,KAAK8vB,QAAUxnB,KAAKkrB,iBACzBlrB,KAAKtI,KAAK+vB,iBAAmBznB,KAAKsrB,iBAClC,MACJ,IAAK,mBACDtrB,KAAKtI,KAAK2zB,iBAAmBrrB,KAAKqrB,iBAClC,MACJ,IAAK,eACDrrB,KAAKtI,KAAKkzB,aAAe5qB,KAAK4qB,aAC9B,MACJ,IAAK,cACD5qB,KAAKtI,KAAKmzB,YAAc7qB,KAAK6qB,YAC7B,MACJ,IAAK,iBACD7qB,KAAKtI,KAAKozB,eAAiB9qB,KAAK8qB,eAChC,MACJ,IAAK,mBACD9qB,KAAKtI,KAAKqzB,iBAAmB/qB,KAAK+qB,iBAClC,MACJ,IAAK,sBACD/qB,KAAKtI,KAAKiG,oBAAsBqC,KAAKrC,oBACrC,MACJ,IAAK,mBACDqC,KAAKtI,KAAKgwB,iBAAmB1nB,KAAK0nB,iBAClC,MACJ,IAAK,iBACD1nB,KAAKtI,KAAKkwB,eAAiB5nB,KAAK4nB,eAChC,MACJ,IAAK,YACInwB,oBAAkBuI,KAAK2zB,kBACxB3zB,KAAKq0B,4BAETr0B,KAAKtI,KAAK6yB,UAAYvqB,KAAKuqB,UAC3B,MACJ,IAAK,kBACDvqB,KAAKtI,KAAK0I,gBAAkBJ,KAAKI,gBACjC,MACJ,IAAK,gBACDJ,KAAKtI,KAAK6I,cAAgBP,KAAKO,cAC/B,MACJ,IAAK,mBACDP,KAAKtI,KAAK0zB,iBAAmBX,sBAAoBzqB,KAAKorB,kBACtD,MACJ,IAAK,gBACDprB,KAAKtI,KAAK0V,cAAgBqd,sBAAoBzqB,KAAKoN,eACnDpN,KAAKtI,KAAK45B,UACV,MACJ,IAAK,mBACDtxB,KAAKtI,KAAK+vB,iBAAmBznB,KAAKsrB,iBAClC,MACJ,IAAK,oBACDtrB,KAAKtI,KAAKmwB,kBAAoB7nB,KAAK6nB,kBACnC,MACJ,IAAK,iBACD7nB,KAAKtI,KAAKiwB,eAAiB8C,sBAAoBzqB,KAAK2nB,gBACpD,MACJ,IAAK,kBACD3nB,KAAKtI,KAAK6zB,gBAAkBd,sBAAoBzqB,KAAKurB,iBACrD,MACJ,IAAK,eACGvrB,KAAKtI,KAAKy6B,QAA0C,WAAhCnyB,KAAKtI,KAAKkE,aAAaC,MAAqBg4B,EAAQtT,GAAM1kB,OACtD,SAAvBg4B,EAAQtT,GAAM1kB,MAA0C,QAAvBg4B,EAAQtT,GAAM1kB,OAChDmE,KAAKtI,KAAK48B,YAEdt0B,KAAKtI,KAAKkE,aAAeoE,KAAKwrB,sBAGlCsI,GACA9zB,KAAKtI,KAAK45B,YAItBzQ,EAASjkB,UAAUy3B,0BAA4B,WAC1Br0B,KAAKtI,KAAK68B,iBAAiBv0B,KAAK2zB,iBACtCD,UAAY1zB,KAAKuqB,UAAY,QAAUvqB,KAAKyzB,oBACvDzzB,KAAKtI,KAAKs8B,kBAQdnT,EAASjkB,UAAUmN,QAAU,WACzB,IAAIyqB,EAAkBx0B,KAAKmR,QAC3B,GAAKqjB,EAAL,CAGA,IAAIC,KAAmBD,EAAgBvpB,cAAc,mBACjDupB,EAAgBvpB,cAAc,mBAC9BwpB,GACAz0B,KAAKwoB,eAETxoB,KAAK00B,iBACDD,GACAxyB,EAAOrF,UAAUmN,QAAQjN,KAAKkD,MAE9BA,KAAKtI,MACLsI,KAAKtI,KAAKqS,UAEV/J,KAAK8oB,YACL9oB,KAAK8oB,WAAW/e,UAMpB,IAAK,IAJDsd,GAAW,aAAc,aAAc,eAAgB,eAAgB,cAAe,kBACtF,oBAAqB,kBAAmB,gBAAiB,gBAAiB,gBAAiB,eAC3F,cAAe,iBAAkB,mBAAoB,oBAAqB,aAAc,sBACxF,kBAAmB,YAAa,uBAAwB,gBACnDjwB,EAAI,EAAGA,EAAIiwB,EAAQ/vB,OAAQF,IAC5B4I,KAAKqnB,EAAQjwB,MACb4I,KAAKqnB,EAAQjwB,IAAM,MAG3B4I,KAAKmR,QAAQxD,UAAY,GACzB3N,KAAKtI,KAAO,OAShBmpB,EAASjkB,UAAU+3B,SAAW,WACtBl9B,oBAAkBuI,KAAKtI,SAGtBD,oBAAkBuI,KAAKkpB,gBAAgBC,WACxC1xB,oBAAkBm9B,SAASC,eAAe70B,KAAKtI,KAAKwxB,gBAAgBC,aACpEyL,SAASC,eAAe70B,KAAKkpB,gBAAgBC,UAAUlU,GAAKjV,KAAKtI,KAAKwxB,gBAAgBC,SACtFnpB,KAAKkpB,gBAAgBC,SAAWnpB,KAAKtI,KAAKwxB,gBAAgBC,UAE9DlnB,EAAOrF,UAAU+3B,SAAS73B,KAAKkD,MAC/BA,KAAKtI,KAAKi9B,aAQd9T,EAASjkB,UAAUk4B,eAAiB,WAWhC,IAAK,IAVDC,GAAa,eAAgB,eAC7B,iBAAkB,UAAW,iBAAkB,mBAAoB,mBACnEC,GACA1iB,cAAe,WAAY,YAAa,eAAgB,oBAAqB,oBAAqB,aAClGva,gBAAiB,OAAQ,OAAQ,sBAAuB,qBAAsB,eAAgB,iBAC9FJ,gBAAiB,SAAU,WAAY,cACvC4G,gBAAkBlH,WAAag0B,qBAI1Bj0B,EAAI,EAAGA,EAAI29B,EAAUz9B,OAAQF,IAElC,IAAK,IADD69B,EAAgBj1B,KAAK+0B,EAAU39B,IAC1BsF,EAAI,EAAGw4B,EAAMF,EAAgBD,EAAU39B,KAAOK,oBAAkBy9B,IAAQx4B,EAAIw4B,EAAI59B,OAASoF,IAAK,QAE5Fu4B,EADMC,EAAIx4B,IAKzB,OADAsD,KAAKm1B,gBATiB,SAAU,OAAQ,oBAAqB,iBAAkB,WAC3E,kBAAmB,WAAY,cAQCn1B,KAAK3I,SAClC2I,KAAKo1B,aAAaL,IAE7BlU,EAASjkB,UAAUu4B,eAAiB,SAAUE,EAAgBh+B,GAC1D,IAAK,IAAID,EAAI,EAAGA,EAAIC,EAAQC,OAAQF,IAC5BC,EAAQD,GAAGC,SACX2I,KAAKs1B,eAAeD,EAAgBh+B,EAAQD,IAC5C4I,KAAKm1B,eAAeE,EAAgBh+B,EAAQD,GAAGC,UAG/C2I,KAAKs1B,eAAeD,EAAgBh+B,EAAQD,KAIxDypB,EAASjkB,UAAU04B,eAAiB,SAAUD,EAAgB31B,GAC1D,IAAK,IAAItI,EAAI,EAAGA,EAAIi+B,EAAe/9B,OAAQF,WAChCsI,EAAO21B,EAAej+B,IAC7BsI,EAAOlC,WAGfqjB,EAASjkB,UAAUkqB,kBAAoB,SAAUrpB,GAC7C,GAAKhG,oBAAkBgG,EAAE83B,SAAzB,CAGA,IAAIh0B,EAAS9D,EAAE8D,QACVA,EAAOgH,UAAUC,SAAS,sBAC3BjH,EAAOgH,UAAUC,SAAS,uBAA4BxI,KAAKw1B,gBAAmBx1B,KAAKtI,KAAKy6B,QACxFnyB,KAAKqlB,sBAAsB9jB,GAE/BvB,KAAKw1B,gBAAiB,EACtBx1B,KAAKmU,OAAO,qBAAuB5S,OAAQA,MAO/Csf,EAASjkB,UAAUiC,QAAU,WACzB,OAAOmB,KAAKtI,KAAKmH,WAOrBgiB,EAASjkB,UAAU64B,SAAW,WAC1B,OAAOz1B,KAAKtI,KAAK+9B,YAWrB5U,EAASjkB,UAAU84B,UAAY,SAAUj3B,EAAMxE,EAAO07B,GAClD,GAAI31B,KAAKlE,WAAY,CAEjBkE,KAAKlE,WAA6B,oBAAI,EACtCkE,KAAKlE,WAAW45B,UAAUj3B,EAAMxE,EAAO07B,KAQ/C9U,EAASjkB,UAAU03B,UAAY,WACvBt0B,KAAKtI,KAAKoE,YACVkE,KAAKtI,KAAKoE,WAAWw4B,aAQ7BzT,EAASjkB,UAAUg5B,SAAW,WACtB51B,KAAKtI,KAAKoE,YACVkE,KAAKtI,KAAKoE,WAAW85B,YAW7B/U,EAASjkB,UAAUi5B,WAAa,SAAUhsB,EAAUqK,EAAOla,GACnDgG,KAAKtI,KAAKoE,YACVkE,KAAKtI,KAAKoE,WAAW+5B,WAAWhsB,EAAUqK,EAAOla,IAUzD6mB,EAASjkB,UAAUk5B,UAAY,SAAU77B,EAAOwE,GAC5C,GAAIuB,KAAKtI,KAAKoE,WACV,GAAKrE,oBAAkBwC,GAMnB+F,KAAKtI,KAAKoE,WAAWg6B,UAAU77B,EAAOwE,OANX,CAC3B,IAAI2rB,EAAWpqB,KAAKtI,KAAKwE,wBAAwBjC,GACjDkC,SAAOiuB,EAAU3rB,GACjBuB,KAAKtI,KAAKoE,WAAWg6B,UAAU77B,EAAOmwB,KAelDvJ,EAASjkB,UAAUm5B,aAAe,SAAUC,EAAWv3B,GAC/CuB,KAAKtI,KAAKoE,YACVkE,KAAKtI,KAAKoE,WAAWi6B,aAAaC,EAAWv3B,IASrDoiB,EAASjkB,UAAUoU,UAAY,SAAUrS,GACjCqB,KAAKtI,KAAKoE,YACVkE,KAAKtI,KAAKoE,WAAWkV,UAAUrS,IAUvCkiB,EAASjkB,UAAUq5B,SAAW,SAAUpsB,EAAUqK,GAC1ClU,KAAKlE,YACLkE,KAAKlE,WAAWm6B,SAASpsB,EAAUqK,IAU3C2M,EAASjkB,UAAUs5B,mBAAqB,SAAU9c,EAAO+c,GACjDn2B,KAAKtI,KAAKmyB,eACV7pB,KAAKtI,KAAKmyB,cAAcuM,YAAYhd,EAAO+c,IAQnDtV,EAASjkB,UAAUy5B,QAAU,WACrBr2B,KAAKtI,KAAKoE,YACVkE,KAAKtI,KAAKoE,WAAWu6B,WAU7BxV,EAASjkB,UAAU05B,kBAAoB,SAAUC,EAAGC,GAC5Cx2B,KAAKy2B,qBACLz2B,KAAKy2B,oBAAoBH,kBAAkBC,EAAGC,IAStD3V,EAASjkB,UAAU85B,UAAY,SAAUvnB,GACjCnP,KAAKtI,KAAKoE,YACVkE,KAAKtI,KAAKoE,WAAW46B,UAAUvnB,IAQvC0R,EAASjkB,UAAUtB,wBAA0B,WACzC,OAAO0E,KAAKtI,KAAK4D,2BAWrBulB,EAASjkB,UAAU+5B,aAAe,SAAU/+B,EAAKsc,EAAOla,GACpDgG,KAAKtI,KAAKi/B,aAAa/+B,EAAKsc,EAAOla,GACnC,IAAI6P,EAAW7J,KAAKtI,KAAKoH,wBAAwBlH,GAC7Ca,EAASuH,KAAK9D,wBAAwB2N,GACrCpS,oBAAkBgB,IACnBmC,GAAaZ,MAAOvB,EAAQ4C,OAAQ,QAAU2E,KAAMA,KAAKjF,gBAAiBtC,EAAOwB,MAAO+F,KAAKtI,KAAK2zB,iBAAkBnX,IAW5H2M,EAASjkB,UAAU8B,WAAa,SAAU9G,EAAKgU,GAC3C,IAAI1N,EAAiB8B,KAAK9D,wBACtB06B,EAAa52B,KAAKtI,KAAK4D,0BAA0B,GACjDpB,EAAQ,EACRzB,KACJyF,EAAemqB,KAAK,SAAUruB,GAC1B,OAAIA,EAAM48B,KAAgBh/B,IACtBa,EAASuB,GACF,KAMfE,EAAQzB,EAAOyB,MACf0R,EAAQ1R,MAAQA,EAChB0R,EAAQ3R,MAAQxB,EAAOwB,MACvB2R,EAAQvS,aAAeZ,EAAOY,aAC9BuS,EAAQzR,SAAW1B,EAAO0B,SAC1ByR,EAAQ7S,SAAWN,EAAOM,SAC1B6S,EAAQ/S,WAAaJ,EAAOI,WAC5B+S,EAAQuB,cAAgB1U,EAAO0U,cAC/BvB,EAAQxS,gBAAkBX,EAAOW,gBACjCwS,EAAQtN,eAAiB7F,EAAO6F,eAChCsN,EAAQ1S,SAAWT,EAAOS,SAC1B8G,KAAKtI,KAAKgH,WAAW9G,EAAKgU,GAC1B,IAAIirB,EAAiB72B,KAAK82B,oBAC1B,GAAID,EAAev/B,OAAS,GAAKM,IAASi/B,EAAeA,EAAev/B,OAAS,GAAIs/B,GAAa,CAC9F,IACIG,EADQ/2B,KAAKia,kBACG+c,aAChBC,EAAej3B,KAAKk3B,aAAaD,aACrCj3B,KAAKouB,cAAcpuB,KAAKnB,UAAUX,EAAeM,QAAQ/F,IAAUs+B,GAAWE,KAStFpW,EAASjkB,UAAUu6B,SAAW,SAAUC,GAChCp3B,KAAKtI,KAAK2/B,aACVr3B,KAAKtI,KAAK2/B,YAAYF,SAASC,IASvCvW,EAASjkB,UAAU06B,sBAAwB,SAAU7zB,GAC7CzD,KAAKq3B,aACLr3B,KAAKtI,KAAK2/B,YAAYC,sBAAsB7zB,IAUpDod,EAASjkB,UAAUwZ,iBAAmB,SAAUvM,EAAUoC,GACtD,OAAOjM,KAAKtI,KAAK0e,iBAAiBvM,EAAUoC,IAQhD4U,EAASjkB,UAAU23B,iBAAmB,SAAUrgB,GAC5C,OAAOqjB,uBAAqBv3B,KAAKgmB,YAAa,SAAU5iB,GACpD,GAAIA,EAAK8Q,QAAUA,EACf,OAAO9Q,IAGZ,IAQPyd,EAASjkB,UAAUmW,eAAiB,SAAUpS,GAC1C,IAAI62B,EAAUx3B,KAAKhH,cAAgBgH,KAAKtI,KAAKL,QAAU2I,KAAK3I,QAK5D,OAHI2I,KAAKtI,KAAKL,QAAQC,SAAW0I,KAAKgmB,YAAY1uB,SAC9CkgC,EAAUx3B,KAAKtI,KAAgB,aAE5B6/B,uBAAqBC,EAAS,SAAUp0B,GAC3C,GAAIA,EAAKzC,MAAQA,EACb,OAAOyC,IAGZ,IAOPyd,EAASjkB,UAAU66B,oBAAsB,WACrC,OAAOz3B,KAAKtI,KAAK+/B,uBAOrB5W,EAASjkB,UAAU86B,iBAAmB,WAClC,OAAO13B,KAAKtI,KAAKggC,oBAOrB7W,EAASjkB,UAAU+6B,sBAAwB,WACvC,OAAO33B,KAAKtI,KAAKigC,yBASrB9W,EAASjkB,UAAUg7B,YAAc,SAAUv/B,EAAMw/B,GAC7C73B,KAAKtI,KAAKkgC,YAAYv/B,EAAMw/B,GAC5B73B,KAAKskB,qBASTzD,EAASjkB,UAAUk7B,YAAc,SAAUz/B,EAAM0/B,GAC7C/3B,KAAKtI,KAAKogC,YAAYz/B,EAAM0/B,GAC5B/3B,KAAKskB,qBAQTzD,EAASjkB,UAAUo7B,uBAAyB,SAAU9jB,GAClD,OAAOlU,KAAKtI,KAAKsgC,uBAAuB9jB,IAQ5C2M,EAASjkB,UAAUq7B,uBAAyB,SAAUh+B,GAClD,OAAO+F,KAAKtI,KAAKugC,uBAAuBh+B,IAQ5C4mB,EAASjkB,UAAUs7B,qBAAuB,SAAUv3B,GAChD,OAAOX,KAAKtI,KAAKwgC,qBAAqBv3B,IAQ1CkgB,EAASjkB,UAAUu7B,sBAAwB,SAAUjkB,GACjD,OAAOlU,KAAKtI,KAAKygC,sBAAsBjkB,IAE3C2M,EAASjkB,UAAUw7B,wBAA0B,SAAUz3B,GACnD,IACI1G,EAAQs9B,uBAAqBv3B,KAAKtI,KAAgB,YAAG,SAAU0L,EAAMnJ,GACrE,GAAImJ,EAAKzC,MAAQA,EACb,OAAO1G,IAGZ,GACH,OAAQxC,oBAAkBwC,IAAkB,EAATA,GAQvC4mB,EAASjkB,UAAUuW,oBAAsB,SAAUxS,GAC/C,OAAOX,KAAKtI,KAAKyb,oBAAoBxS,IAQzCkgB,EAASjkB,UAAU+C,WAAa,SAAU04B,GAEtC,OADAr4B,KAAKskB,kBAAkBtkB,KAAKtI,KAAKiI,WAAW04B,IACrCr4B,KAAKgmB,aAEhBnF,EAASjkB,UAAU0nB,kBAAoB,SAAU5kB,GAC7C,IAAI0e,EACAlK,EACAokB,EAAc7gC,oBAAkBiI,GAAUM,KAAKtI,KAAKiI,aAAeD,GACzC,IAA1BM,KAAKZ,iBAA0BY,KAAKgmB,YAAYhmB,KAAKZ,mBACpD3H,oBAAkBuI,KAAKgmB,YAAYhmB,KAAKZ,iBAAiBuV,YAC1DyJ,EAAOpe,KAAKgmB,YAAYhmB,KAAKZ,iBAAiBuV,SAC9CT,EAAQlU,KAAKgmB,YAAYhmB,KAAKZ,iBAAiB8U,OAEnD,IAAIkf,EACJ,IAAKpzB,KAAKkT,4BAA+BlT,KAAKkT,4BAA8BlT,KAAKgmB,YAAY1uB,SAAWghC,EAAYhhC,OAAS,CACzH0I,KAAKgmB,eACL,IAAK,IAAI5uB,EAAI,EAAGA,EAAIkhC,EAAYhhC,OAAQF,IAAK,CACzCg8B,KACA,IAAK,IAAIE,EAAK,EAAGC,EAAKn7B,OAAOC,KAAKigC,EAAYlhC,IAAKk8B,EAAKC,EAAGj8B,OAAQg8B,IAAM,CACrE,IAAI/S,EAAOgT,EAAGD,GACdF,EAAW7S,GAAQ+X,EAAYlhC,GAAGmpB,GAEtCvgB,KAAKgmB,YAAYztB,KAAK,IAAIuH,EAAOszB,IAC7Blf,IAAUlU,KAAKgmB,YAAY5uB,GAAG8c,OAAsC,aAA7BlU,KAAKgmB,YAAY5uB,GAAG+L,MAAyB1L,oBAAkB2mB,IAAkB,KAATA,IAC/Gpe,KAAKgmB,YAAY5uB,GAAGud,SAAWyJ,IAa3C,OARApe,KAAU,WAAK,WACXA,KAAKtI,KAAKL,QAAQC,SAAW0I,KAAKgmB,YAAY1uB,SAC9C0I,KAAKohB,eAAgB,GAEpBphB,KAAKohB,eACNphB,KAAKS,eAAgBpJ,QAAS2I,KAAKgmB,cAAe,GAEtDhmB,KAAU,eAAIwV,EACPxV,KAAKgmB,aAOhBnF,EAASjkB,UAAUs6B,WAAa,WAC5B,OAAOl3B,KAAKtI,KAAKw/B,cAErBrW,EAASjkB,UAAUklB,yBAA2B,WAE1C9hB,KAAKtI,KAAa,qBAAEwK,MAAMlC,OAE9B6gB,EAASjkB,UAAU27B,aAAe,SAAUC,EAAcnhC,GAEtD2I,KAAKtI,KAAa,aAAEwK,MAAMlC,MAAOw4B,EAAcnhC,KAEnDwpB,EAASjkB,UAAUs0B,oBAAsB,WACrClxB,KAAKS,eAAgB1I,eAAgBO,YAAU,aAAc0H,KAAKtI,KAAKK,kBAAmB,GAC1FiI,KAAKS,eAAgB6R,aAAcha,YAAU,aAAc0H,KAAKtI,KAAK4a,gBAAiB,GACtFtS,KAAKS,eAAgB9I,eAAgBW,YAAU,aAAc0H,KAAKtI,KAAKC,kBAAmB,GAC1FqI,KAAKS,eAAgBlC,aAAcjG,YAAU,aAAc0H,KAAKtI,KAAK6G,gBAAiB,IAO1FsiB,EAASjkB,UAAUqd,gBAAkB,WACjC,OAAOja,KAAKtI,KAAKuiB,mBAOrB4G,EAASjkB,UAAU67B,YAAc,WAG7B,IAAK,IAFDC,KACAzwB,EAAOjI,KAAKtI,KAAK+gC,cACZrhC,EAAI,EAAGe,EAAM8P,EAAK3Q,OAAQF,EAAIe,EAAKf,IACnC6Q,EAAK7Q,GAAGmR,UAAUC,SAAS,iBAC5BkwB,EAAMngC,KAAK0P,EAAK7Q,IAGxB,OAAOshC,GAQX7X,EAASjkB,UAAUV,sBAAwB,WACvC,OAAO8D,KAAKtI,KAAKojB,iBAOrB+F,EAASjkB,UAAUb,gBAAkB,WACjC,OAAOiE,KAAKtI,KAAKoE,WAAWC,mBAOhC8kB,EAASjkB,UAAUwP,iBAAmB,WAClC,OAAOpM,KAAKtI,KAAK0U,oBAOrByU,EAASjkB,UAAU+7B,eAAiB,WAChC,OAAO34B,KAAKtI,KAAKihC,kBAQrB9X,EAASjkB,UAAUgC,cAAgB,SAAU3E,GACzC,OAAO+F,KAAKtI,KAAKkH,cAAc3E,IAQnC4mB,EAASjkB,UAAUg8B,WAAa,SAAUr3B,GACtC,OAAOvB,KAAKtI,KAAKkhC,WAAWr3B,IAQhCsf,EAASjkB,UAAUi8B,oBAAsB,SAAU3kB,GAC/C,OAAOlU,KAAKtI,KAAKmhC,oBAAoB3kB,IAOzC2M,EAASjkB,UAAUqM,kBAAoB,WAEnC,IAAK,IADD6vB,KACKxF,EAAK,EAAGC,EAAKvzB,KAAKgmB,YAAasN,EAAKC,EAAGj8B,OAAQg8B,IAAM,CAC1D,IAAIpnB,EAAMqnB,EAAGD,GACTpnB,EAAI6sB,SACJD,EAAKvgC,KAAK2T,GAGlB,OAAO4sB,GAOXjY,EAASjkB,UAAUie,YAAc,WAC7BA,cAAY7a,KAAKmR,UAOrB0P,EAASjkB,UAAUgc,YAAc,WAC7BA,cAAY5Y,KAAKmR,UAOrB0P,EAASjkB,UAAU00B,QAAU,WACzBtxB,KAAK8gB,sBACL9gB,KAAKgpB,gBAAgBhpB,KAAKtJ,YACrBQ,EAAgB8I,QACXA,KAAKtJ,sBAAsBC,cAI7BqJ,KAAKtI,KAAK+I,eACN/J,WAAY,IAAIC,cAAYqJ,KAAKtJ,WAAWA,WAAYsJ,KAAKtJ,WAAWk6B,aAAc5wB,KAAKtJ,WAAWE,WACvG,GALHoJ,KAAKtI,KAAKhB,WAAasJ,KAAKzC,UAQpCyC,KAAKtI,KAAK45B,WAQdzQ,EAASjkB,UAAUiP,kBAAoB,WACnC,OAAO7L,KAAK+rB,gBAAgBpc,qBAQhCkR,EAASjkB,UAAUk6B,kBAAoB,WACnC,IAAID,KACA56B,EAAqB+D,KAAK9D,wBAC9B,GAAK8D,KAAKqS,YASNwkB,EAAiB56B,OARjB,IAAK,IAAI7E,EAAI,EAAGA,EAAI6E,EAAmB3E,OAAQF,IAC3Cy/B,EAAet+B,KAAK0D,EAAmB7E,IAClC6E,EAAmB7E,GAAG8B,WACvB9B,GAAK+B,EAAoB8C,EAAmB7E,IAAIE,QAO5D,OAAOu/B,GAOXhW,EAASjkB,UAAUgT,qBAAuB,WACtC,OAAO5P,KAAK+rB,gBAAgBnc,wBAQhCiR,EAASjkB,UAAUuO,iBAAmB,SAAU6tB,GAC5Ch5B,KAAK+rB,gBAAgB5gB,iBAAiB6tB,IAQ1CnY,EAASjkB,UAAUo3B,eAAiB,SAAUiF,GACtCxhC,oBAAkBwhC,IAAcA,GAChCj5B,KAAKtI,KAAKL,QAAU2I,KAAKsnB,eAAetnB,KAAK3I,SAC7C2I,KAAKtI,KAAKs8B,kBAGVh0B,KAAKtI,KAAK+I,eAAgBpJ,QAAS2I,KAAKsnB,eAAetnB,KAAK3I,WAAY,IAQhFwpB,EAASjkB,UAAUs8B,cAAgB,WAC/Bl5B,KAAKtI,KAAKwhC,iBASdrY,EAASjkB,UAAUyoB,sBAAwB,SAAU9jB,GACjD,GAA+B,UAA3BvB,KAAKpE,aAAaC,KAAkB,CAGpC,GAAImE,KAAKjE,kBAAkBiE,KAAKghB,gBAAgB1pB,QAC5C0I,KAAKjE,kBAAkBiE,KAAKihB,gBAAgB3pB,QAAU0I,KAAKjE,kBAAkBiE,KAAKwW,cAAclf,OAAQ,CACxG,IAAI6hC,EAAYn5B,KAAKtI,KAAKoE,WAAc,UAGxC,OAFAkE,KAAKtI,KAAKoE,WAAqB,WAAE,aAAcq9B,QAC/Cn5B,KAAKo5B,cAAgB73B,IAI7B,GAAIvB,KAAKuU,YAAa,CAClB,IAAI8kB,EAAU93B,EAAO2J,QAAQ,kBAAkBoa,cAC3C7sB,EAASuH,KAAK9D,wBAAwBm9B,EAAQxvB,UAC9CtI,EAAOgH,UAAUC,SAAS,oBAC1BxI,KAAKs5B,YAAYD,EAAS5gC,GAG1BuH,KAAKu5B,UAAUF,EAAS5gC,OAG3B,CAEGA,GADA4gC,EAAUr5B,KAAKtI,KAAKkhC,WAAWr3B,IACdqK,QACjB5L,KAAKrC,sBACLlF,EAASuH,KAAK9D,wBAAwBm9B,EAAQxvB,WAE9CtI,EAAOgH,UAAUC,SAAS,oBAC1BxI,KAAKs5B,YAAYD,EAAQ16B,IAAKlG,GAG9BuH,KAAKu5B,UAAUF,EAAQ16B,IAAKlG,KAaxCooB,EAASjkB,UAAU28B,UAAY,SAAU56B,EAAKlG,EAAQb,EAAKsC,GACvD,IAAIqN,EAAQvH,KACZvH,EAASuH,KAAKw5B,yBAAyB76B,EAAKlG,IACvChB,oBAAkBkH,IAAQA,EAAIc,MAAM,GAAG8I,UAAUC,SAAS,kBAC3DxI,KAAKouB,cAAczvB,GAAK,GAE5B,IAAIuE,GAASzE,KAAMhG,EAAQkG,IAAKA,EAAKwK,QAAQ,GAC7CnJ,KAAKoJ,Qfv5EU,Yeu5EgBlG,EAAM,SAAUu2B,GAC3C,IAAKA,EAActwB,OAAQ,CACvB5B,EAAMmyB,eAAe,SAAU/6B,EAAKlG,GAChCghC,EAActU,WACd5d,EAAMoyB,0BAA0BlhC,EAAQ,SAAUb,EAAKsC,GAG3D,KAAM1D,EAAa+Q,IAAWhO,EAAUgO,OAAarQ,EAAgBqQ,KAAW9P,oBAAkBgB,EAAe,WAAK,CAClH,IAAImhC,GAAiBn7B,KAAMhG,EAAQkG,IAAKA,GACxC4I,EAAMsyB,4BACDpiC,oBAAkB8P,EAAMtO,qBACzBsO,EAAMuyB,yBAAyBF,EAAan7B,MAAM,GAEtD8I,EAAM6B,QAAQ0S,EAAiB8d,QAK/C/Y,EAASjkB,UAAU+8B,0BAA4B,SAAUlhC,EAAQ4C,EAAQzD,EAAKsC,GAC1E,IAAMzC,oBAAkBG,IAAQa,EAAOuH,KAAK1E,0BAA0B,MAAQ1D,KACxEH,oBAAkByC,IAAUA,IAAUzB,EAAOyB,OADnD,CAIA,IAAIjC,EAAUkB,EAAoBV,GAAQ+E,OAAO,SAAUC,GACvD,OAAOA,EAAErE,kBAEbnB,EAAQoE,QAAQ5D,GAChB,IAAK,IAAIrB,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC4I,KAAK05B,eAAer+B,EAAQ,KAAMpD,EAAQb,MAGlDypB,EAASjkB,UAAUi9B,0BAA4B,WAC3C,IAAIxpB,EAAUrQ,KAAKtI,KAAK4Y,4BAA8B,GAAKtQ,KAAKtI,KAAK6Y,6BAA+B,GAChGvQ,KAAKtI,KAAKuH,mBAAqB,GAAKoR,IACpCrQ,KAAKtI,KAAKqkB,cAAcge,uBAGhClZ,EAASjkB,UAAU48B,yBAA2B,SAAU76B,EAAKlG,GAezD,OAdIuH,KAAKqS,aAAkD,QAAnCrS,KAAKsS,aAAaC,cAA0BvS,KAAKimB,aAAexuB,oBAAkBgB,KACrGjC,EAAawJ,MACdvH,EAASuH,KAAKzC,SAASC,OAAO,SAAUC,GACpC,OAAOA,EAAErE,kBAGR3B,oBAAkBgB,KAEnBA,EADAuH,KAAK2nB,eACI3nB,KAAKtI,KAAKwE,wBAAwByC,EAAI0N,aAAa,kBAGnDrM,KAAKtI,KAAKwE,wBAAwByC,EAAIkL,WAGhDpR,GAUXooB,EAASjkB,UAAU08B,YAAc,SAAU36B,EAAKlG,EAAQb,GACpD,IAAI2P,EAAQvH,KAERkD,GAASzE,KADbhG,EAASuH,KAAKw5B,yBAAyB76B,EAAKlG,GACjBkG,IAAKA,EAAKwK,QAAQ,GAC7CnJ,KAAKoJ,Qfr9EW,aeq9EgBlG,EAAM,SAAU82B,GAC5C,IAAKA,EAAe7wB,OAAQ,CACpB6wB,EAAe5U,aACf7d,EAAMoyB,0BAA0BlhC,EAAQ,WAAYb,GAExD2P,EAAMmyB,eAAe,WAAY/6B,EAAKlG,GACtC,IAAImhC,GAAiBn7B,KAAMhG,EAAQkG,IAAKA,GACxC,IAAKnI,EAAa+Q,KACdA,EAAMsyB,4BACDpiC,oBAAkB8P,EAAMtO,qBACzBsO,EAAMuyB,yBAAyBF,EAAan7B,MAAM,GAEtD8I,EAAM6B,QAAQ6wB,EAAkBL,GAC5BryB,EAAMsU,yBAAyB,CACZtU,EAAM7P,KAAKw/B,aAAagD,kBAAkBlD,aAC7CzvB,EAAM7P,KAAKw/B,aAAagD,kBAAkBC,UACzB5yB,EAAM7P,KAAK0iC,iBAAkB7yB,EAAM+hB,QAChE/hB,EAAM7P,KAAKw/B,aAAagD,kBAAkBG,SAAS,EAAG9yB,EAAM7P,KAAK0iC,qBAOzFvZ,EAASjkB,UAAUk9B,yBAA2B,SAAUrhC,EAAQ6hC,GAC5D,IAAIC,EAAe9hC,EACnB,GAAI8hC,EAAajjC,OACb,IAAK,IAAIF,EAAI,EAAGA,EAAImjC,EAAajjC,OAAQF,IACrCmjC,EAAanjC,GAAG4I,KAAK/G,oBAAsBqhC,EAC3C1/B,GAAaZ,MAAOugC,EAAanjC,GAAIiE,OAAQ,QAAU2E,KAAMA,KAAKjF,gBAAiBw/B,EAAanjC,GAAG6C,MAAO+F,KAAKtI,KAAK2zB,iBAAkBrrB,KAAK/G,yBAI/IR,EAAOuH,KAAK/G,oBAAsBqhC,EAClC1/B,GAAaZ,MAAOvB,EAAQ4C,OAAQ,QAAU2E,KAAMA,KAAKjF,gBAAiBtC,EAAOwB,MAAO+F,KAAKtI,KAAK2zB,iBAAkBrrB,KAAK/G,qBASjI4nB,EAASjkB,UAAU49B,cAAgB,SAAUtgC,GACzC,IAAM8F,KAAKqS,aAAkD,QAAnCrS,KAAKsS,aAAaC,cAA2BvS,KAAK5B,wBAA0B5H,EAAawJ,MAAO,CACtH,IAAI8O,EAAM9O,KAAKtI,KAAKhB,WAAW8G,OAAO,SAAUC,GAI5C,OAHIA,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IACjCuD,EAAEvE,UAAW,GAEVuE,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IAE5C8F,KAAKy6B,aAAa3rB,EAAK,KAAM5U,GAAO,OAEnC,CACG4U,EAAM9O,KAAK06B,iBAAiBxgC,GAAhC,IACIzB,EAASH,YAAU,UAAWwW,GAClC9O,KAAKy6B,aAAahiC,EAAQ,KAAMyB,KASxC2mB,EAASjkB,UAAU+9B,YAAc,SAAU/iC,GACvCoI,KAAK46B,0BAA0BhjC,EAAK,WAExCipB,EAASjkB,UAAU69B,aAAe,SAAUhiC,EAAQb,EAAKsC,EAAO2gC,QAC3C,IAAbA,IAAuBA,GAAW,GA6BtC,IAAK,IA5BDl+B,EAAU,SAAUvF,GACpB,IAAKK,oBAAkBgB,EAAOrB,GAAGyB,YAAa,CAC1C,IAAIiiC,EAAcriC,EAAOrB,GAAGyB,WAAWE,SACnCF,EAAakiC,EAAOx9B,SAASC,OAAO,SAAUC,GAC9C,OAAOA,EAAE1E,WAAa+hC,IAEtBtkC,EAAaukC,KACbliC,EAAakiC,EAAO7+B,wBAAwBsB,OAAO,SAAUC,GACzD,OAAOA,EAAE1E,WAAa+hC,MAGC,IAA3BjiC,EAAW,GAAGK,UACdT,EAAOF,KAAKM,EAAW,IACvBA,EAAW,GAAGK,UAAW,GAGpBV,EAAgBuiC,EAAQliC,EAAW,GAAIkiC,EAAOz9B,aAC3CzE,EAAW,GAAGK,eAAyCsc,IAA7B3c,EAAW,GAAGA,YACxCJ,EAAOF,KAAKM,EAAW,IAKlCgiC,GACDE,EAAOxB,UAAU,KAAM9gC,EAAOrB,GAAIQ,EAAKsC,IAG3C6gC,EAAS/6B,KACJ5I,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAC/BuF,EAAQvF,GAERyjC,GACA76B,KAAKu5B,UAAU,KAAM9gC,EAAQb,EAAKsC,IAG1C2mB,EAASjkB,UAAU89B,iBAAmB,SAAUxgC,GAC5C,IAAI+N,EAAOjI,KAAKnB,UAAUrB,OAAO,SAAUC,GACvC,OAAkD,IAA1CA,EAAEgP,UAAUjO,QAAQ,QAAUtE,KAC9BuD,EAAEwN,cAAc,wBAA0BxN,EAAEwN,cAAc,wBAMtE,OADYhT,QAHE+H,KAAK9D,wBAAwBsB,OAAO,SAAUC,GACxD,OAAOA,EAAEvD,QAAUA,GAASuD,EAAErE,kBAEJ6O,KAAMA,IASxC4Y,EAASjkB,UAAUo+B,gBAAkB,SAAU9gC,GAC3C,IAAM8F,KAAKqS,aAAkD,QAAnCrS,KAAKsS,aAAaC,cAA2BvS,KAAK5B,wBAA0B5H,EAAawJ,MAAO,CACtH,IAAIvH,EAASuH,KAAKtI,KAAKhB,WAAW8G,OAAO,SAAUC,GAI/C,OAHIA,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IACjCuD,EAAEvE,UAAW,GAEVuE,EAAErE,iBAAmBqE,EAAEvD,QAAUA,IAE5C8F,KAAKi7B,eAAexiC,EAAQ,MAAM,OAEjC,CACD,IAAIqW,EAAM9O,KAAK06B,iBAAiBxgC,GAC5BjC,EAAUK,YAAU,UAAWwW,GACnC9O,KAAKi7B,eAAehjC,KAS5B4oB,EAASjkB,UAAUs+B,cAAgB,SAAUtjC,GACzCoI,KAAK46B,0BAA0BhjC,EAAK,aAExCipB,EAASjkB,UAAUg+B,0BAA4B,SAAUhjC,EAAKyD,GAC1D,IAAI8/B,EAAkBn7B,KAAK1E,0BAA0B,GACjD5E,EAAaF,EAAawJ,MAAQA,KAAK9D,wBAA0B8D,KAAKtI,KAAKhB,WAC/E,IAAKe,oBAAkB0jC,GAAkB,CACrC,IAAIrsB,EAAMpY,EAAW8G,OAAO,SAAUC,GAClC,OAAOA,EAAE09B,GAAiBpzB,aAAenQ,EAAImQ,aAElC,WAAX1M,EACA2E,KAAKy6B,aAAa3rB,EAAKlX,EAAK,MAG5BoI,KAAKi7B,eAAensB,EAAKlX,KAIrCipB,EAASjkB,UAAUq+B,eAAiB,SAAUxiC,EAAQb,EAAKijC,GAEvD,QADiB,IAAbA,IAAuBA,GAAW,GAClCA,EACA76B,KAAKs5B,YAAY,KAAM7gC,QAGvB,IAAK,IAAIrB,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAC/B4I,KAAKs5B,YAAY,KAAM7gC,EAAOrB,GAAIQ,GAG1C,IAAKoI,KAAKtI,KAAKqkB,cAAcmY,qBAAuBl0B,KAAK5B,sBAAwB4B,KAAKnB,WAC/EmB,KAAK1C,WAAWhG,SAAW0I,KAAKnB,UAAUvH,OAAQ,CAErD0I,KAAKtI,KAAKqkB,cAAcqf,YAAc,EACtCp7B,KAAKtI,KAAKqkB,cAAsB,UAAK,IAQ7C8E,EAASjkB,UAAUuoB,UAAY,WAC3BnlB,KAAKq7B,kBAAkB,WAO3Bxa,EAASjkB,UAAUwoB,YAAc,WAC7BplB,KAAKq7B,kBAAkB,aAE3Bxa,EAASjkB,UAAUy+B,kBAAoB,SAAUhgC,GAC7C,IAAI4M,EAAOjI,KAAKnB,UAAUrB,OAAO,SAAUC,GACvC,OAAOA,EAAEwN,cAAc,eAA4B,WAAX5P,EAAsB,WAAa,aAO/E,IALK4M,EAAK3Q,QAAU0I,KAAKnB,UAAUvH,QAC/B2Q,EAAK1P,KAAKyH,KAAKnB,UAAU,IAE7BmB,KAAKimB,aAAc,EACnBjmB,KAAKkmB,eAAgB,GACflmB,KAAKqS,aAAkD,QAAnCrS,KAAKsS,aAAaC,cAA2BvS,KAAK5B,sBAAwB4B,KAAK6b,2BAA6BrlB,EAAawJ,OAM/I,GALAA,KAAKzC,SAASC,OAAO,SAAUC,GACvBA,EAAErE,kBACFqE,EAAEvE,SAAsB,aAAXmC,KAGjB4M,EAAK3Q,OACU,aAAX+D,EACA2E,KAAKs5B,YAAYrxB,EAAK,IAGtBjI,KAAKu5B,UAAUtxB,EAAK,SAGvB,GAAIjI,KAAKqS,YAAa,CACvB,IAAIipB,EAAsBt7B,KAAKwS,kBAC/BxS,KAAKS,eAAgB+R,mBAAmB,IAAQ,GAChDxS,KAAKtI,KAAK2/B,YAAYF,SAAS,GAC/Bn3B,KAAKS,eAAgB+R,kBAAmB8oB,IAAuB,SAInE,IAAK,IAAIlkC,EAAI,EAAGA,EAAI6Q,EAAK3Q,OAAQF,IACd,aAAXiE,EACA2E,KAAKs5B,YAAYrxB,EAAK7Q,IAGtB4I,KAAKu5B,UAAUtxB,EAAK7Q,IAIhC4I,KAAKimB,aAAc,EACnBjmB,KAAKkmB,eAAgB,GAEzBrF,EAASjkB,UAAU88B,eAAiB,SAAUr+B,EAAQsD,EAAKlG,EAAQshB,GAC/D,IAIII,EAJAsf,GAAkB96B,IAAKA,EAAKF,KAAMhG,EAAQuR,aAAepK,YAAavE,GACtEhC,EAAe2G,KAAK9D,wBAAwBsB,OAAO,SAAUC,GAC7D,OAAOA,EAAEa,iBAAmB7F,EAAOM,YAGlCvC,EAAawJ,OAAoB,WAAX3E,GAAuB2E,KAAKjF,iBAAmB7D,EAAgB8I,QAAU3G,EAAa/B,QAC7G0I,KAAKu7B,oBAAoB9B,GAE7B,IAAIzf,EAAWha,KAAKnB,UACpB,GAAImB,KAAKuU,YAAa,CAClB,IAAItM,EAAOjI,KAAKia,kBAAkBhS,KAClC+R,KAAcvR,MAAM3L,KAAKmL,GAa7B,GAVIxQ,oBAAkBkH,GAElBA,EAAMqb,EADKha,KAAK9D,wBAAwBsC,QAAQ/F,KAIpCkG,EAAI0N,aAAa,iBAE5B5U,oBAAkBkH,IACnBA,EAAIuO,aAAa,gBAA4B,WAAX7R,EAAsB,OAAS,WAE/D2E,KAAKqS,aAAkD,QAAnCrS,KAAKsS,aAAaC,cAA2BvS,KAAK5B,sBAAwB4B,KAAK6b,0BAA6BrlB,EAAawJ,OAC3I9I,EAAgB8I,MAGnB,CACD,IAAIw7B,OAAgB,EACpB,GAAe,WAAXngC,EAAqB,CAarB,GAZAmgC,EAAgB,YACXzhB,IACDthB,EAAOS,UAAW,EAClB8G,KAAK8gB,mBAAmBroB,EAAOM,UAAUG,SAAWT,EAAOS,UAE1DzB,oBAAkBkH,KACnBwb,EAAYxb,EAAIyS,uBAAuB,sBAAsB,IAE7D2I,IAAYtiB,oBAAkBgB,EAAOuH,KAAK/G,sBAC1CR,EAAOuH,KAAK/G,qBAAuBxB,oBAAkB0iB,KACrDA,EAAYxb,EAAIyS,uBAAuB,oBAAoB,IAE3D3Z,oBAAkB0iB,GAClB,OAECA,EAAU5R,UAAUC,SAAS,qBAC9B0I,YAAUiJ,GAAY,oBAE1B5M,eAAa4M,GAAY,0BAExB,CAaD,GAZAqhB,EAAgB,OACXzhB,IAAW7iB,EAAgB8I,QAC5BvH,EAAOS,UAAW,EAClB8G,KAAK8gB,mBAAmBroB,EAAOM,UAAUG,SAAWT,EAAOS,UAE1DzB,oBAAkBkH,KACnBwb,EAAYxb,EAAIyS,uBAAuB,oBAAoB,IAE3D2I,IAAYtiB,oBAAkBgB,EAAOuH,KAAK/G,uBACzCR,EAAOuH,KAAK/G,qBAAuBxB,oBAAkB0iB,KACtDA,EAAYxb,EAAIyS,uBAAuB,sBAAsB,IAE7D3Z,oBAAkB0iB,GAClB,OAECA,EAAU5R,UAAUC,SAAS,uBAC9B0I,YAAUiJ,GAAY,sBAE1B5M,eAAa4M,GAAY,oBAE7B,IAAI1J,EAAauJ,EAASxc,OAAO,SAAUmE,GACvC,OAAOA,EAAE4G,UAAUC,SAAS,uBAAyB/P,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAUlG,GARI1D,EAAawJ,QAAUzG,EAAUyG,MACjCA,KAAKqF,aAAahK,EAAQsD,EAAKlG,GAGzBvB,EAAgB8I,QAAS3G,EAAa/B,QAAsB,aAAX+D,GACnD2E,KAAKy7B,YAAYpgC,EAAQsD,EAAKlG,GAGlCuH,KAAKuuB,kBAAoB5vB,EAAIc,MAAM,GAAG8I,UAAUC,SAAS,iBAIzD,IAAK,IAHDomB,EAAY5uB,KAAKnB,UAGZzH,GAFL6Q,EAAOjI,KAAKia,kBAAkBhS,MAClC2mB,KAAenmB,MAAM3L,KAAKmL,IACH3Q,OAAS,GAAGF,GAAK,EAAGA,IACvC,IAAKiD,EAASu0B,EAAUx3B,IAAK,CACzB,IACI2/B,EADQ/2B,KAAKia,kBACG+c,aAChBC,EAAej3B,KAAKk3B,aAAaD,aACrCj3B,KAAKouB,cAAcQ,EAAUx3B,GAAI2/B,GAAWE,GAC5C,MAIZj3B,KAAKmU,OAAO,qBAAuB1D,WAAYA,EAAYpV,OAAQmgC,EAAe/iC,OAAQA,EAAQkG,IAAKA,IACvGqB,KAAK0uB,aAAa1U,QAxElBha,KAAKmU,OAAOunB,GAAmCrgC,OAAQA,EAAQsD,IAAKA,EAAKlG,OAAQA,KA2EzFooB,EAASjkB,UAAU2+B,oBAAsB,SAAU9B,GAC/C,IAAIlyB,EAAQvH,KACR27B,EAAO,IAAI5M,WAEf0K,EAA2B,cAAIkC,EAAK1M,QACpC,IAAIx2B,EAASghC,EAAch7B,KAC3BuB,KAAKoJ,QAAQsmB,EAAwB+J,GACrCkC,EAAKzL,QAAQ9X,KAAK,WACd,GAAIqhB,EAAczvB,UAAU1S,OAAQ,CAGhC,IAAK,IAFDklB,EAAejV,EAAc,SAC7BtN,EAAQ,EACH7C,EAAI,EAAGA,EAAIolB,EAAYllB,OAAQF,IACpC,GAAIolB,EAAYplB,GAAG+C,WAAa1B,EAAO0B,SAAU,CAC7CF,EAAQ7C,EACR,MAOH,IAJDwkC,EAASv9B,WAAS,SAAUkJ,EAAM7Q,YAClCsT,EAAYtQ,EAAY+/B,EAAczvB,WACtC6xB,EAAWpjC,EAAO8O,EAAMpK,eAAgB1E,EAAO8O,EAAMpK,cAAc7F,OAAS0S,EAAU1S,OACtFmB,EAAO8O,EAAMpK,cAAc7F,OAA4B0S,EAAU1S,OACrE,IAASF,EAAI,EAAGA,EAAIykC,EAAUzkC,IACtBqB,EAAO8O,EAAMpK,eACby+B,EAAOp+B,OAAO,SAAUC,EAAGrG,GACnBqG,EAAE8J,EAAMvK,mBAAqBvE,EAAO8O,EAAMtK,YAC1C2+B,EAAO1+B,OAAO9F,EAAG,KAIzB4S,EAAU5S,IACV4S,EAAU5S,GAAG8C,MAAQzB,EAAOyB,MAAQ,EACpC8P,EAAU5S,GAAG6C,MAAQ0f,KAAKC,KAAqB,IAAhBD,KAAKE,UACpC7P,EAAU5S,GAAGyB,WAAasD,YAAW1D,GACrCuR,EAAU5S,GAAG+C,SAAWgC,YAAW6N,EAAU5S,WACtC4S,EAAU5S,GAAGyB,WAAWQ,oBACxB2Q,EAAU5S,GAAG+C,SAAStB,WAC7BmR,EAAU5S,GAAGkH,eAAiB7F,EAAOM,SACrCiR,EAAU5S,GAAG2B,SAAW2gB,SAAOnS,EAAM4J,QAAQ8D,GAAK,UAClDwD,WAAS,sBAAwBzO,EAAU5S,GAAG2B,SAAUiR,EAAU5S,GAAImQ,KACjE9P,oBAAkBuS,EAAU5S,GAAGmQ,EAAMpK,gBACrC6M,EAAU5S,GAAGmQ,EAAMwQ,kBAAoB7gB,EAAgBqQ,MACxDyC,EAAU5S,GAAGgC,iBAAkB,GAEnCojB,EAAYtf,OAAOjD,EAAQ,EAAI7C,EAAGqB,EAAO8O,EAAMpK,eAAiB1E,EAAO8O,EAAMpK,cAAc/F,GAAK,EAAI,EAAG4S,EAAU5S,KAGjHolB,EAAYtf,OAAOjD,EAAQ,EAAI7C,EAAG,GAG1ColB,EAAYviB,GAAOsN,EAAMpK,cAAgB6M,EACzCwS,EAAYviB,GAAOZ,aAAe2Q,EAClCwS,EAAYviB,GAAOf,UAAW,EAC9Buf,WAAS,sBAAwB+D,EAAYviB,GAAOlB,SAAUyjB,EAAYviB,GAAQsN,GAClF,IAAK,IAAIzN,EAAI,EAAGA,EAAI2/B,EAAczvB,UAAU1S,OAAQwC,IAChD8hC,EAAOrjC,KAAKkhC,EAAczvB,UAAUlQ,IAG5CyN,EAAMkoB,iBAAkB,EACxBloB,EAAM7P,KAAK45B,UACX/pB,EAAMsyB,4BACNtyB,EAAM6B,QAAQ0S,EAAiB2d,MAGvC5Y,EAASjkB,UAAUyI,aAAe,SAAUhK,EAAQsD,EAAKlG,GACrD,IAAIuhB,EAAWha,KAAKnB,UACpB,GAAImB,KAAKuU,YAAa,CAClB,IAAIunB,EAAS97B,KAAKia,kBAAkBhS,KACpC+R,KAAcvR,MAAM3L,KAAKg/B,GAE7B,IAAI54B,GAASzE,KAAMhG,EAAQkG,IAAKA,GAC5BsJ,KAIJ,GAHAA,EAAO+R,EAASxc,OAAO,SAAUmE,GAC7B,OAAOA,EAAEsJ,cAAc,kBAAoBxS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAEzE,WAAXmB,EAAqB,CACrB2E,KAAKmU,OAAOgD,GAAuB1e,OAAQA,EAAQwP,KAAMA,EAAMoS,UAAW1b,IAC1E,IAAIo9B,GAAWp9B,IAAKA,EAAKF,KAAMhG,GAC3BwP,EAAK3Q,OAAS,IACd0I,KAAK65B,4BACL75B,KAAKoJ,QAAQ0S,EAAiBigB,SAIlC/7B,KAAKg8B,qBAAsBvjC,OAAQA,EAAQwP,KAAMA,IACjDjI,KAAK65B,4BACL75B,KAAKoJ,QAAQ6wB,EAAkB/2B,IAGvC2d,EAASjkB,UAAU6+B,YAAc,SAAUpgC,EAAQsD,EAAKlG,GACpD,IAAIwP,EACA5O,EAAe2G,KAAK9D,wBAAwBsB,OAAO,SAAUC,GAC7D,OAAOA,EAAEa,iBAAmB7F,EAAOM,WAEnCiH,KAAKuuB,iBAAmB5vB,EAAIc,MAAM,GAAG8I,UAAUC,SAAS,kBACxDxI,KAAKouB,cAAczvB,GAAK,GAE5B,IAAIwR,EACA8rB,EACAjiB,EAAWha,KAAKnB,UACpB,GAAImB,KAAKuU,YAAa,CAClB,IAAI2nB,EAASl8B,KAAKia,kBAAkBhS,KACpC+R,KAAcvR,MAAM3L,KAAKo/B,GAE7B,IAAIV,EAA4B,WAAXngC,EAAuB,YAAc,OACtD8/B,EAAkBn7B,KAAK1E,0BAA0B,GACrD,GAAI0E,KAAKrC,sBAAwBqC,KAAKqS,YAAa,CAC/CpK,KACA,IAAK,IAAI7Q,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IAAK,CAC1C,IAAIyS,EAAW7J,KAAKtI,KAAKoH,wBAAwBzF,EAAajC,GAAG+jC,IACjElzB,EAAK1P,KAAKyH,KAAKnB,UAAUgL,UAI7B5B,EAAO+R,EAASxc,OAAO,SAAUmE,GAC7B,OAAOA,EAAEsJ,cAAc,kBAAoBxS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,MAG5F,IAAImW,EAAUrQ,KAAKtI,KAAK4Y,4BAA8B,GAAKtQ,KAAKtI,KAAK6Y,6BAA+B,GAChGvQ,KAAKhB,YAAcgB,KAAKiT,eAAiBjT,KAAKf,oBAAsBoR,KACpEF,EAAcnQ,KAAKm8B,iBAAiB3+B,OAAO,SAAUmE,GACjD,OAAOA,EAAEsJ,cAAc,kBAAoBxS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,OAGxFmW,IACA4rB,EAAkBj8B,KAAKwQ,qBAAqBhT,OAAO,SAAUmE,GACzD,OAAOA,EAAEsJ,cAAc,kBAAoBxS,EAAOwB,MAAQ,SAAWxB,EAAOyB,MAAQ,OAG5F,IAAS9C,EAAI,EAAGA,EAAI6Q,EAAK3Q,OAAQF,IACxBK,oBAAkBwQ,EAAK7Q,MACxB6Q,EAAK7Q,GAAGmD,MAAMG,QAAU8gC,GAEvB/jC,oBAAkB0Y,KACnBA,EAAY/Y,GAAGmD,MAAMG,QAAU8gC,GAE9B/jC,oBAAkBwkC,KACnBA,EAAgB7kC,GAAGmD,MAAMG,QAAU8gC,GAEvCx7B,KAAKmU,OAAO,kBAAoBxV,IAAKsJ,EAAK7Q,MACpCK,oBAAkB4B,EAAajC,GAAGiC,eAAiBA,EAAajC,GAAGiC,aAAa/B,OAAS,IAAkB,WAAX+D,GAClG5D,oBAAkB4B,EAAajC,GAAG8B,WAAaG,EAAajC,GAAG8B,YAC/D8G,KAAK05B,eAAer+B,EAAQ4M,EAAK7Q,GAAIiC,EAAajC,IAAI,GAClD4I,KAAKiT,eAAiBjT,KAAKZ,kBAAoB3H,oBAAkB0Y,IACjEnQ,KAAK05B,eAAer+B,EAAQ8U,EAAY/Y,GAAIiC,EAAajC,IAAI,KAK7EypB,EAASjkB,UAAU8xB,aAAe,SAAUzmB,GACxC,GAAIjI,KAAK4qB,eAAiB5qB,KAAKuU,YAE3B,IAAK,IADD6nB,EAAkB,EACbhlC,EAAI,EAAG6Q,GAAQ7Q,EAAI6Q,EAAK3Q,OAAQF,IAAK,CAC1C,IAAIilC,EAAUp0B,EAAK7Q,GACW,SAA1BilC,EAAQ9hC,MAAMG,UACV2hC,EAAQ9zB,UAAUC,SAAS,aAC3B+E,eAAa8uB,GAAU,YAEvBD,EAAkB,GAAM,GAAMC,EAAQ9zB,UAAUC,SAAS,iBAAoB6zB,EAAQ9zB,UAAUC,SAAS,gBACxG0I,YAAUmrB,GAAU,YAEnBA,EAAQ9zB,UAAUC,SAAS,iBAAoB6zB,EAAQ9zB,UAAUC,SAAS,gBAC3E4zB,OAMpBvb,EAASjkB,UAAU8zB,sBAAwB,WACvC,GAAI1wB,KAAKuU,YAAa,CAClB,IAAItM,EAAOjI,KAAKia,kBAAkBhS,KAClCA,KAAUQ,MAAM3L,KAAKmL,GACrB,IAAK,IAAI7Q,EAAI,EAAGA,EAAI6Q,EAAK3Q,OAAQF,IAAK,CAClC,IAAIklC,EAAQt8B,KAAKtI,KAAKuiB,kBAAkBhS,KAAK7Q,GAAGqI,MAAMO,KAAKZ,iBACvDT,EAAMsJ,EAAK7Q,GAEXmlC,GAAQ99B,KADEuB,KAAKtI,KAAKge,gBAAgBte,GAAGqH,KAChBE,IAAKA,EAAKa,KAAM88B,EAAO58B,OAAQM,KAAKL,aAAaK,KAAKZ,kBACjFY,KAAKV,aAAaC,WAAWg9B,MAIzC1b,EAASjkB,UAAUo/B,oBAAsB,SAAUliB,EAAYC,GACtDA,IACDD,EAAWrhB,OAAOS,UAAW,GAEjC,IACIyF,EACAub,EAFAjS,EAAO6R,EAAW7R,KAGlBu0B,KACAC,KACApsB,EAAUrQ,KAAKsQ,4BAA8B,GAAKtQ,KAAKuQ,6BAA+B,EACtFF,IACAmsB,EAAcx8B,KAAKm8B,iBAAiB3+B,OAAO,SAAUmE,GACjD,OAAOA,EAAEsJ,cAAc,kBAAoB6O,EAAWrhB,OAAOwB,MAAQ,SAAW6f,EAAWrhB,OAAOyB,MAAQ,MAE9GuiC,EAAYz8B,KAAKwQ,qBAAqBhT,OAAO,SAAUmE,GACnD,OAAOA,EAAEsJ,cAAc,kBAAoB6O,EAAWrhB,OAAOwB,MAAQ,SAAW6f,EAAWrhB,OAAOyB,MAAQ,OAGlH,IAAK,IAAI9C,EAAI,EAAGA,EAAI6Q,EAAK3Q,OAAQF,IAAK,CAClC6Q,EAAK7Q,GAAGmD,MAAMG,QAAU,OACxBiE,EAAMsJ,EAAK7Q,GACX,IAAIslC,EAAez0B,EAAK7Q,GAAG6T,cAAc,sBAgBzC,GAfKxT,oBAAkBilC,IACnB18B,KAAKtI,KAAK6iB,gBAAgBoiB,SAASD,GAEnCrsB,IACAmsB,EAAYplC,GAAGmD,MAAMG,QAAU,OAC/B+hC,EAAUrlC,GAAGmD,MAAMG,QAAU,OACxBuN,EAAK7Q,GAAG6T,cAAc,+CACnBuxB,EAAYplC,GAAG6T,cAAc,6CAC7BtM,EAAM69B,EAAYplC,GAEbqlC,EAAUrlC,GAAG6T,cAAc,+CAChCtM,EAAM89B,EAAUrlC,MAIxBuH,EAAIsM,cAAc,6CAA8C,CAChE,IAAI2xB,EAAgBj+B,EAAIsM,cAAc,6CACtCiP,EAAcla,KAAKuU,YAAcvU,KAAKtI,KAAKwE,wBAAwB+L,EAAK7Q,GAAGyS,UACvE7J,KAAKtI,KAAKiZ,oBAAoB1I,EAAK7Q,GAAGiV,aAAa,aAAa5N,MAC/DhH,oBAAkBmlC,IAAkB1iB,EAAYhhB,WACjDqU,eAAaqvB,GAAgB,oBAC7B1rB,YAAU0rB,GAAgB,uBAI9B,IAAK,IAFD/rB,KACAgsB,EAAQ78B,KAAKnB,UACRiS,EAAM,EAAGA,EAAM+rB,EAAMvlC,OAAQwZ,IAC9B+rB,EAAM/rB,GAAK7F,cAAc,kBAAoBiP,EAAYjgB,MAAQ,SAAWigB,EAAYhgB,MAAQ,KAChG2W,EAAKtY,KAAKskC,EAAM/rB,IAGpBD,EAAKvZ,QAAU4iB,EAAYhhB,UAC3B8G,KAAKg8B,qBAAsBvjC,OAAQyhB,EAAajS,KAAM4I,IAAQ,MAa9EgQ,EAASjkB,UAAUkgC,yBAA2B,SAAU7kC,EAASgQ,EAAMhO,GACnE,IAAK,IAAI7C,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC4I,KAAKV,aAAaC,YACdd,KAAMxG,EAAQb,GAAIoI,KAAMyI,EAAK7Q,GAAGqI,MAAMxF,GACtCyF,OAAQM,KAAKtI,KAAKiI,aAAaK,KAAKZ,iBACpCQ,YAAa,mBAEM,cAAnBI,KAAa,QAAwC,eAAnBA,KAAa,QAC/CA,KAAKV,aAAaO,aACdpB,KAAMxG,EAAQb,GAAIuH,IAAKsJ,EAAK7Q,MAS5CypB,EAASjkB,UAAUwsB,YAAc,WAC7BppB,KAAKsK,GAAG,gBAAiBtK,KAAK+8B,kBAAmB/8B,MACjDA,KAAKtI,KAAK4S,GAAG,cAAetK,KAAKmqB,gBAAiBnqB,OAEtD6gB,EAASjkB,UAAUmgC,kBAAoB,SAAUC,GAC7Ch9B,KAAK+W,YAAcimB,GAMvBnc,EAASjkB,UAAU83B,eAAiB,WAC5B10B,KAAK4K,cAGT5K,KAAK6K,IAAI,gBAAiB7K,KAAK+8B,mBAC/B/8B,KAAKtI,KAAKmT,IAAI,cAAe7K,KAAKmqB,mBAiBtCtJ,EAASjkB,UAAUqgC,eAAiB,SAAUjH,EAAWkH,EAAgBC,EAAaC,EAAWC,EAAWC,EAAcC,EAAmBC,GACzIx9B,KAAKtI,KAAKulC,eAAejH,EAAWkH,EAAgBC,EAAaC,EAAWC,EAAWC,EAAcC,EAAmBC,IAO5H3c,EAASjkB,UAAU6gC,eAAiB,WAChCz9B,KAAKtI,KAAK+lC,kBAUd5c,EAASjkB,UAAU8gC,0BAA4B,SAAUxpB,EAAOypB,GAC5D39B,KAAKtI,KAAKgmC,0BAA0BxpB,EAAOypB,IAS/C9c,EAASjkB,UAAU4oB,UAAY,SAAUvrB,EAAO2jC,GAC5C59B,KAAKtI,KAAK8tB,UAAUvrB,EAAO2jC,IAQ/B/c,EAASjkB,UAAUihC,WAAa,SAAU/vB,GACtC9N,KAAKtI,KAAKmmC,WAAW/vB,IAOzB+S,EAASjkB,UAAU8oB,eAAiB,WAChC1lB,KAAKtI,KAAKguB,kBAQd7E,EAASjkB,UAAU+M,KAAO,SAAU/B,GAChC5H,KAAKU,gBAAgBiJ,KAAK/B,IAU9BiZ,EAASjkB,UAAUgN,MAAQ,SAAUnL,EAAMoL,EAAUC,GACjD9J,KAAKU,gBAAgBkJ,MAAMnL,EAAMoL,EAAUC,IAS/C+W,EAASjkB,UAAUkhC,WAAa,SAAUjoB,EAAW+nB,GACjD59B,KAAKtI,KAAKomC,WAAWjoB,EAAW+nB,IAOpC/c,EAASjkB,UAAUmhC,gBAAkB,WACjC,OAAO/9B,KAAKtI,KAAKqmC,mBASrBld,EAASjkB,UAAUohC,wBAA0B,SAAUn0B,EAAUoC,GAC7D,OAAOjM,KAAKtI,KAAKsmC,wBAAwBn0B,EAAUoC,IAOvD4U,EAASjkB,UAAUyS,mBAAqB,WACpC,OAAOrP,KAAKtI,KAAK2X,sBAQrBwR,EAASjkB,UAAUsC,qBAAuB,SAAUjF,GAChD,OAAO+F,KAAKtI,KAAKwH,qBAAqBjF,IAO1C4mB,EAASjkB,UAAUu/B,eAAiB,WAChC,OAAOn8B,KAAKtI,KAAKykC,kBAQrBtb,EAASjkB,UAAUqhC,yBAA2B,SAAUhkC,GACpD,OAAO+F,KAAKtI,KAAKumC,yBAAyBhkC,IAO9C4mB,EAASjkB,UAAU4T,mBAAqB,WACpC,OAAOxQ,KAAKtI,KAAK8Y,sBAOrBqQ,EAASjkB,UAAUshC,uBAAyB,WACxC,OAAOl+B,KAAKtI,KAAKwmC,0BASrBrd,EAASjkB,UAAUuhC,4BAA8B,SAAUt0B,EAAUoC,GACjE,OAAOjM,KAAKtI,KAAKymC,4BAA4Bt0B,EAAUoC,IAQ3D4U,EAASjkB,UAAUwhC,iCAAmC,SAAUnkC,GAC5D,OAAO+F,KAAKtI,KAAK0mC,iCAAiCnkC,IAQtD4mB,EAASjkB,UAAUyhC,kCAAoC,SAAUpkC,GAC7D,OAAO+F,KAAKtI,KAAK2mC,kCAAkCpkC,IAQvD4mB,EAASjkB,UAAU0hC,8BAAgC,SAAUrkC,GACzD,OAAO+F,KAAKtI,KAAK4mC,8BAA8BrkC,IAMnD4mB,EAASjkB,UAAU2hC,uBAAyB,WACxC,OAAOv+B,KAAKtI,KAAK6mC,0BAMrB1d,EAASjkB,UAAU0T,0BAA4B,WAC3C,OAAOtQ,KAAKtI,KAAK4Y,6BAMrBuQ,EAASjkB,UAAU2T,2BAA6B,WAC5C,OAAOvQ,KAAKtI,KAAK6Y,8BAMrBsQ,EAASjkB,UAAUmX,qBAAuB,WAEtC,OADA/T,KAAKskB,kBAAkBtkB,KAAKtI,KAAKqc,wBAC1B/T,KAAKgmB,aAMhBnF,EAASjkB,UAAUiX,sBAAwB,WAEvC,OADA7T,KAAKskB,kBAAkBtkB,KAAKtI,KAAKmc,yBAC1B7T,KAAKgmB,aAMhBnF,EAASjkB,UAAU4hC,uBAAyB,WACxC,OAAOx+B,KAAKtI,KAAK8mC,0BAMrB3d,EAASjkB,UAAU6hC,2BAA6B,WAC5C,OAAOz+B,KAAKtI,KAAK+mC,8BAMrB5d,EAASjkB,UAAU8hC,0BAA4B,WAC3C,OAAO1+B,KAAKtI,KAAKgnC,6BAMrB7d,EAASjkB,UAAUqX,kBAAoB,WAEnC,OADAjU,KAAKskB,kBAAkBtkB,KAAKtI,KAAKuc,qBAC1BjU,KAAKgmB,aAQhBnF,EAASjkB,UAAUqC,iBAAmB,WAClC,OAAOe,KAAK2+B,eAAe3+B,KAAK3I,QAAS,GAAK2I,KAAKiT,eAEvD4N,EAASjkB,UAAU+hC,eAAiB,SAAU7F,EAAM8F,GAChD,IAAK,IAAI9kC,EAAI,EAAG3B,EAAM2gC,EAAKxhC,OAAQwC,EAAI3B,EAAK2B,IACpCg/B,EAAKh/B,GAAGzC,QACRunC,EAAM5+B,KAAK2+B,eAAe7F,EAAKh/B,GAAGzC,QAASunC,GAGvC9F,EAAKh/B,GAAG+kC,UACRD,IAIZ,OAAOA,GAOX/d,EAASjkB,UAAUwL,sBAAwB,WACvC,OAAOpI,KAAKtI,KAAK0Q,yBAOrByY,EAASjkB,UAAUkiC,0BAA4B,WAC3C,OAAO9+B,KAAKtI,KAAKonC,6BAQrBje,EAASjkB,UAAUgM,mBAAqB,WACpC,OAAO5I,KAAKtI,KAAKkR,sBAOrBiY,EAASjkB,UAAU6d,cAAgB,WAC/B,OAASskB,WAAY/+B,KAAKtI,KAAK+iB,gBAAiBukB,WAAYh/B,KAAK8oB,aAUrEjI,EAASjkB,UAAUqiC,YAAc,SAAUC,EAAaC,EAASxJ,GAC7D31B,KAAKo/B,qBAAqBH,YAAYC,EAAaC,EAASxJ,IAQhE9U,EAASjkB,UAAU+Y,OAAS,SAAUld,GAC7BhB,oBAAkBuI,KAAKo/B,wBACxB3mC,EAASA,EACTuH,KAAKo/B,qBAAqBp/B,KAAKkhB,qBAAqBzoB,EAAQ,YASpEooB,EAASjkB,UAAUyiC,QAAU,SAAU5mC,GAC9BhB,oBAAkBuI,KAAKo/B,wBACxB3mC,EAASA,EACTuH,KAAKo/B,qBAAqBp/B,KAAKkhB,qBAAqBzoB,EAAQ,aAGpE,IAAImpB,EAiYJ,OAhYAvgB,IACIc,WAAS,IACV0e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIc,WAAS,IACV0e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIc,WAAS,aACV0e,EAASjkB,UAAW,gBAAY,GACnCyE,IACIc,gBACD0e,EAASjkB,UAAW,eAAW,GAClCyE,IACIc,WAAS,OACV0e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIc,WAAS,OACV0e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIc,WAAS,IACV0e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIc,WAAS,OACV0e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIc,WAAS,OACV0e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIc,WAAS,OACV0e,EAASjkB,UAAW,0BAAsB,GAC7CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,2BAAuB,GAC9CyE,IACIc,gBACD0e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIc,cACD0e,EAASjkB,UAAW,aAAS,GAChCyE,IACIc,cACD0e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIc,WAAS,aACV0e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIi+B,aAAY/8B,IACbse,EAASjkB,UAAW,wBAAoB,GAC3CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,0BAAsB,GAC7CyE,IACIi+B,aAAYtgB,KACb6B,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIi+B,aAAYC,oBACb1e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIc,cACD0e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIi+B,aAAY3e,KACbE,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIiB,gBAAeke,KAChBK,EAASjkB,UAAW,kBAAc,GACrCyE,IACIi+B,aAAY7e,KACbI,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIc,cACD0e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIi+B,aAAYj9B,IACbwe,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIi+B,aAAYvtB,KACb8O,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIc,cACD0e,EAASjkB,UAAW,eAAW,GAClCyE,IACIc,cACD0e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIc,WAAS,YACV0e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIc,cACD0e,EAASjkB,UAAW,wBAAoB,GAC3CyE,IACIc,cACD0e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIc,cACD0e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIc,WAAS,WACV0e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIc,WAAS,OACV0e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,wBAAoB,GAC3CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,2BAAuB,GAC9CyE,IACIc,WAAS,SACV0e,EAASjkB,UAAW,cAAU,GACjCyE,IACIc,WAAS,SACV0e,EAASjkB,UAAW,aAAS,GAChCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,4BAAwB,GAC/CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,kCAA8B,GACrDyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,+BAA2B,GAClDyE,IACIi+B,aAAY1e,KACbC,EAASjkB,UAAW,8BAA0B,GACjDyE,IACIc,WAAS,QACV0e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,eAAW,GAClCyE,IACIm+B,WACD3e,EAASjkB,UAAW,YAAQ,GAC/ByE,IACIm+B,WACD3e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIm+B,WACD3e,EAASjkB,UAAW,gBAAY,GACnCyE,IACIm+B,WACD3e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIm+B,WACD3e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIm+B,WACD3e,EAASjkB,UAAW,gBAAY,GACnCyE,IACIm+B,WACD3e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIm+B,WACD3e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIm+B,WACD3e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIm+B,WACD3e,EAASjkB,UAAW,gBAAY,GACnCyE,IACIm+B,WACD3e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIm+B,WACD3e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIm+B,WACD3e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,gBAAY,GACnCyE,IACIm+B,WACD3e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIm+B,WACD3e,EAASjkB,UAAW,iBAAa,GACpCyE,IACIm+B,WACD3e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIm+B,WACD3e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIm+B,WACD3e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIm+B,WACD3e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIm+B,WACD3e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIm+B,WACD3e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIm+B,WACD3e,EAASjkB,UAAW,gBAAY,GACnCyE,IACIm+B,WACD3e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIm+B,WACD3e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIm+B,WACD3e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,qBAAiB,GACxCyE,IACIm+B,WACD3e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIm+B,WACD3e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,wBAAoB,GAC3CyE,IACIm+B,WACD3e,EAASjkB,UAAW,kBAAc,GACrCyE,IACIm+B,WACD3e,EAASjkB,UAAW,mBAAe,GACtCyE,IACIm+B,WACD3e,EAASjkB,UAAW,eAAW,GAClCyE,IACIm+B,WACD3e,EAASjkB,UAAW,oBAAgB,GACvCyE,IACIm+B,WACD3e,EAASjkB,UAAW,0BAAsB,GAC7CyE,IACIm+B,WACD3e,EAASjkB,UAAW,eAAW,GAClCyE,IACIc,YAAU,IACX0e,EAASjkB,UAAW,wBAAoB,GAC3CyE,IACIi+B,aAAYttB,KACb6O,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,wBAAoB,GAC3CyE,IACIc,YAAS,IACV0e,EAASjkB,UAAW,sBAAkB,GACzCyE,IACIm+B,WACD3e,EAASjkB,UAAW,wBAAoB,GAC3CyE,IACIm+B,WACD3e,EAASjkB,UAAW,8BAA0B,GACjDyE,IACIm+B,WACD3e,EAASjkB,UAAW,0BAAsB,GAC7CyE,IACIm+B,WACD3e,EAASjkB,UAAW,gCAA4B,GACnDyE,IACIm+B,WACD3e,EAASjkB,UAAW,yBAAqB,GAC5CyE,IACIm+B,WACD3e,EAASjkB,UAAW,2BAAuB,GAC9CyE,IACIm+B,WACD3e,EAASjkB,UAAW,uBAAmB,GAC1CyE,IACIm+B,WACD3e,EAASjkB,UAAW,yBAAqB,GAC5CikB,EAAWe,EAAavgB,IACpBo+B,yBACD5e,IAEL6e,aC30HEC,GAAyB,WAMzB,SAASA,EAAQlpC,GACbmM,OAAKC,OAAO+8B,WACZ5/B,KAAKvJ,OAASA,EACduJ,KAAKqK,mBAgDT,OAxCAs1B,EAAQ/iC,UAAUmG,cAAgB,WAC9B,MAAO,WAMX48B,EAAQ/iC,UAAUyN,iBAAmB,WACjCrK,KAAKvJ,OAAO6T,GAAG,iBAAkBtK,KAAK6/B,cAAe7/B,OAEzD2/B,EAAQ/iC,UAAU+N,oBAAsB,WAChC3K,KAAKvJ,OAAOmU,aAGhB5K,KAAKvJ,OAAOoU,IAAI,iBAAkB7K,KAAK6/B,gBAQ3CF,EAAQ/iC,UAAUmN,QAAU,WACxB/J,KAAK2K,uBAETg1B,EAAQ/iC,UAAUijC,cAAgB,WAK9B,IAAK,IAFDC,EADAtrB,EAAaxU,KAAKvJ,OAAkB,YAAEuJ,KAAKvJ,OAAO2I,iBAElD2gC,EAAc//B,KAAKvJ,OAAOkJ,aACrBqgC,EAAI,EAAGA,EAAID,EAAYzoC,OAAQ0oC,IAAK,CAGzC,GAFsB1nC,YAAU,QAASkc,KACjBlc,YAAU,QAASynC,EAAYC,IACZ,CACvCF,EAAYE,EACZ,OAGRhgC,KAAKvJ,OAAOgK,eAAgBrB,gBAAiB0gC,IAAa,IAEvDH,KCzDPM,GAAwB,WAMxB,SAASA,EAAOxpC,GACZmM,OAAKC,OAAOq9B,UACZlgC,KAAKvJ,OAASA,EAgClB,OAxBAwpC,EAAOrjC,UAAUunB,eAAiB,SAAUgc,GACxCngC,KAAKvJ,OAAOiB,KAAKysB,eAAegc,IAQpCF,EAAOrjC,UAAUmG,cAAgB,WAC7B,MAAO,UAQXk9B,EAAOrjC,UAAUmN,QAAU,WACnB/J,KAAKvJ,OAAOmU,aAGhB5K,KAAKvJ,OAAOiB,KAAK2sB,aAAata,WAE3Bk2B,KClCPG,GAAuB,WAMvB,SAASA,EAAM3pC,GAEXuJ,KAAKqgC,SAAU,EAEfrgC,KAAKsgC,oBAAqB,EAE1BtgC,KAAKmhB,gBAAkB,kBAEvBnhB,KAAKwxB,gBAAkB,kBAEvBxxB,KAAK2xB,aAAe,eAEpB3xB,KAAKugC,aAAc,EAEnBvgC,KAAKwgC,eAAgB,EACrB59B,OAAKC,OAAO49B,SACZzgC,KAAKvJ,OAASA,EACduJ,KAAKqK,mBAgxCT,OA9wCA+1B,EAAMxjC,UAAU8jC,0BAA4B,SAAUzrB,GAWlD,OATIjV,KAAKvJ,OAAOC,sBAAsBC,eAAe4C,EAAUyG,KAAKvJ,QAC3CuJ,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAGvCwE,KAAKvJ,OAAOiB,KAAKhB,YAEV8G,OAAO,SAAUC,GAC7C,OAAOA,EAAE1E,WAAakc,KAQ9BmrB,EAAMxjC,UAAUyN,iBAAmB,WAC/BrK,KAAKvJ,OAAO6T,GAAG8nB,GAAmBpyB,KAAK2gC,WAAY3gC,MACnDA,KAAKvJ,OAAO6T,GAAGgoB,GAAmBtyB,KAAKqH,WAAYrH,MACnDA,KAAKvJ,OAAO6T,GAAGs2B,GAAgB5gC,KAAK6gC,UAAW7gC,MAC/CA,KAAKvJ,OAAO6T,GAAGw2B,GAAmB9gC,KAAK+gC,YAAa/gC,OAUxDogC,EAAMxjC,UAAUqiC,YAAc,SAAUC,EAAaC,EAASxJ,GAC1D,IAAIqL,EAAOhhC,KAAKvJ,OAGZqmC,EAA2B,2BAC/B,GAAIoC,EAAY,KAAOC,IAA8D,KAAlD,QAAS,QAAS,SAAS3gC,QAAQm3B,GAAtE,CACqB,UAAbA,IACA31B,KAAK0xB,aAAe,cAEP,UAAbiE,IACA31B,KAAK0xB,aAAe,iBAEP,UAAbiE,IACA31B,KAAK0xB,aAAe,iBAExB1xB,KAAKvJ,OAAmB,aAAIuJ,KAAK0xB,aAEjC,IAAK,IADDjzB,KACKrH,EAAI,EAAGA,EAAI8nC,EAAY5nC,OAAQF,IACpCqH,EAAKrH,GAAK4I,KAAKvJ,OAAOyF,wBAAwBgjC,EAAY9nC,IAE9D,IACI8L,GACAzE,KAAMA,EACNgzB,UAAW0N,GAef,GAbKjoC,EAAgB8I,KAAKvJ,SACtBuJ,KAAKihC,SAAS/9B,GAND,GASb89B,EAAK7jB,cACL6jB,EAAKzjC,SAAWyC,KAAKkhC,aAAaF,EAAKzjC,WAEf,eAAxByC,KAAKvJ,OAAa,SACbgB,oBAAkBgH,EAAK,GAAG5F,cAC3B4F,EAAK,GAAGvE,MAAQuE,EAAK,GAAG5F,WAAWqB,MAAQ,IAGnD8F,KAAKvJ,OAAOiB,KAAK45B,UACbtxB,KAAKvJ,OAAOkH,qBAA6C,kBAAtBqC,KAAK0xB,aAAkC,CAC1E,IAAIz3B,OAAQ,EACR+F,KAAKvJ,OAAO4I,oBACZpF,EAAQ+F,KAAKvJ,OAAO2I,gBAAkB,EAET,cAAxBY,KAAKvJ,OAAa,SACvBwD,EAAQ+F,KAAKvJ,OAAO2I,iBAExB,IAAIT,EAAMqB,KAAKvJ,OAAOoI,UAAUqgC,EAAY,IACxCiC,EAAWj+B,EAAKzE,KAAK,GAErBwJ,MADAm5B,MAEQ7oC,KAAK4oC,GACjBl5B,EAAK1P,KAAKoG,GACV,IACIrB,EAAaxE,EAAckH,KAAKvJ,OAAQyM,EAAKzE,KAAK,GAAiB,gBACnE4iC,EAAYrhC,KAAKvJ,OAAOoI,UAAUsgC,GACtCiC,EAAY7oC,KAAK+E,GACjB2K,EAAK1P,KAAK8oC,GACVrhC,KAAKvJ,OAAOqmC,GAA0BsE,EAAan5B,EAAMhO,GAE7D,GAAI+F,KAAKvJ,OAAOkH,qBAA+C,eAAxBqC,KAAKvJ,OAAa,OAAoB,CACrEwD,OAAQ,EACR+F,KAAKvJ,OAAO4I,oBACZpF,EAAQ+F,KAAKvJ,OAAO2I,gBAAkB,EAET,eAAxBY,KAAKvJ,OAAa,SACvBwD,EAAQ+F,KAAKvJ,OAAO2I,iBAExB,IAEIgiC,EAFA3oC,EAASyK,EAAKzE,KAAK,GACnBE,EAAMqB,KAAKvJ,OAAOoI,UAAUqgC,EAAY,IAExCj3B,MADAm5B,MAEQ7oC,KAAKE,GACjBwP,EAAK1P,KAAKoG,GACVqB,KAAKvJ,OAAOqmC,GAA0BsE,EAAan5B,EAAMhO,MAOrEmmC,EAAMxjC,UAAUskB,oBAAsB,SAAUzoB,EAAQ6oC,GACpD,IAAIN,EAAOhhC,KAAKvJ,OAGZ8qC,GAAqB,EACzB,IAAI9pC,oBAAkBgB,KAA6C,IAAlCuH,KAAKvJ,OAAO40B,iBAA7C,CAIQrrB,KAAKvJ,OAAO2H,uBAA0D,IAAlC4B,KAAKvJ,OAAO40B,iBAChDkW,EAAoBvhC,KAAKvJ,OAAOsnC,kBAAkB,GAAGl0B,UAEd,IAAlC7J,KAAKvJ,OAAO40B,mBACjBkW,EAAoBvhC,KAAKvJ,OAAO40B,kBAEpCrrB,KAAKwhC,aAAe/pC,oBAAkBgB,GAClCuoC,EAAK9kC,wBAAwBqlC,GAAqB9oC,EACtD,IAAI0iC,EAAkBn7B,KAAKvJ,OAAO6E,0BAA0B,GACxDuO,EAAW7J,KAAKvJ,OAAOiB,KAAKoH,wBAAwBkB,KAAKwhC,aAAarG,IAO1E,GANAn7B,KAAKyhC,YAAczhC,KAAKvJ,OAAOuJ,KAAK2xB,eAAuC,IAAvB4P,EAChDvhC,KAAKvJ,OAAOsnC,kBAAkB,GAC5B/9B,KAAKvJ,OAAOiB,KAAKkH,cAAciL,GACrC7J,KAAK0hC,eAAiB1hC,KAAKvJ,OAAOuJ,KAAKwxB,kBAA0C,IAAvB+P,EACtDP,EAAK9kC,wBAAwBqlC,GAC3BvhC,KAAKwhC,aACK,WAAZF,EAAsB,CACtB,IAAIK,EAAWX,EAAK9kC,wBAAwB8D,KAAKyhC,YAAY53B,SAAW,GACpE4nB,OAAY,EAChB,GAAkC,IAA9BzxB,KAAKyhC,YAAY53B,WAAiD,IAA/B7J,KAAKyhC,YAAY53B,UACpDm3B,EAAK9kC,wBAAwB8D,KAAKyhC,YAAY53B,UAAU3P,MAAQynC,EAASznC,OAAU,EACnF,OAEJ,GAAIynC,EAASznC,MAAQ8F,KAAK0hC,eAAexnC,MACrC,IAAK,IAAI9C,EAAI,EAAGA,EAAI4pC,EAAK9kC,wBAAwB5E,OAAQF,IACjD4pC,EAAK9kC,wBAAwB9E,GAAG+C,WAAawnC,EAAS9oC,WAAWsB,WACjEs3B,EAAYr6B,QAKpBq6B,EAAYzxB,KAAKyhC,YAAY53B,SAAW,EAE5Cm3B,EAAW,OAAI,YACfA,EAAiB,UAAIvP,EACrBzxB,KAAK4hC,aAAa,YAAanQ,QAE9B,GAAgB,YAAZ6P,EAAuB,CAC5B,IAAmC,IAA/BthC,KAAKyhC,YAAY53B,UAAiD,IAA9B7J,KAAKyhC,YAAY53B,UACa,IAAlEm3B,EAAK9kC,wBAAwB8D,KAAKyhC,YAAY53B,UAAU3P,MACxD,OAEAu3B,OAAY,EAEX,IADD54B,EAAamH,KAAK0hC,eAAe7oC,WACrC,IAASzB,EAAI,EAAGA,EAAI4pC,EAAK9kC,wBAAwB5E,OAAQF,IACjD4pC,EAAK9kC,wBAAwB9E,GAAG+C,WAAatB,EAAWsB,WACxDs3B,EAAYr6B,GAGpB4pC,EAAW,OAAI,aACfA,EAAiB,UAAIvP,EACrBzxB,KAAK4hC,aAAa,aAAcnQ,MAI5C2O,EAAMxjC,UAAUglC,aAAe,SAAUvmC,EAAQo2B,GAC7C,IAAIlqB,EAAQvH,KACR8c,GACAzhB,OAAQA,EACR8N,QAAQ,EACR1K,MAAOuB,KAAKvJ,OAAOuJ,KAAKwxB,kBACxB7yB,IAAKqB,KAAKvJ,OAAOuJ,KAAK2xB,eAE1B3xB,KAAKvJ,OAAO2S,QAAQ6nB,EAAoBnU,EAAY,SAAUA,GACrDA,EAAW3T,SACc,cAAtB2T,EAAWzhB,OACXkM,EAAM03B,aAAa13B,EAAMk6B,YAAY53B,UAAW4nB,EAAW,SAEhC,eAAtB3U,EAAWzhB,QAChBkM,EAAM03B,aAAa13B,EAAMk6B,YAAY53B,UAAW4nB,EAAW,aAK3E2O,EAAMxjC,UAAUskC,aAAe,SAAU1kB,GACrC,IAAK,IAAIplB,EAAI,EAAGA,EAAIolB,EAAYllB,OAAQF,IAEpC,GADAolB,EAAYplB,GAAG6C,MAAQ7C,GAClBK,oBAAkB+kB,EAAYplB,GAAGyB,YAAa,CAC/C,IAAIgpC,EAAgBxjC,WAAS,sBAAwBme,EAAYplB,GAAGkH,eAAgB0B,KAAKvJ,QACzF+lB,EAAYplB,GAAGyB,WAAWoB,MAAQ4nC,EAAc5nC,MAGxD,OAAOuiB,GAEX4jB,EAAMxjC,UAAUikC,UAAY,SAAUpjC,GAGlC,IAAK,IAFDqkC,EACAC,EAActkC,EAAExF,QACXb,EAAIqG,EAAExF,QAAQX,OAAS,EAAGF,GAAK,EAAGA,IAEvC,IADA0qC,EAAgBC,EAAY3qC,IACVkH,eAAgB,CAC9B,IAAI7F,EAASspC,EAAYvkC,OAAO,SAAUiB,GACtC,OAAOA,EAAK1F,WAAa+oC,EAAcxjC,iBAE3C,GAAI7F,EAAOnB,OAAQ,CACf,IAAI2C,EAAQxB,EAAO,GAAGY,aAAamF,QAAQsjC,GACvClpC,EAAeH,EAAO,IACX,IAAXwB,IACIxC,oBAAkBuI,KAAKvJ,OAAOwG,aAC9BrE,EAAaS,aAAa6D,OAAOjD,EAAO,GACnCrB,EAAaS,aAAa/B,SAC3BsB,EAAaQ,iBAAkB,EAC/BR,EAAa4a,yBAA0B,IAG/CxT,KAAKsgC,oBAAqB,IAK1C,GAAI7oC,oBAAkBuI,KAAKvJ,OAAOC,cAAgBsJ,KAAKvJ,OAAOC,WAAWY,OAAQ,CAKxE,IAHD0qC,EADAhB,EAAOhhC,KAAKvJ,OAEZwrC,EAAgBxkC,EAAExF,QAEtB,IAASb,EADQqG,EAAExF,QAAQX,OACD,EAAGF,GAAK,EAAGA,IAAK,CACtC4qC,EAAkBC,EAAc7qC,IAC3BA,GAAK4qC,EAAgB5oC,kBACtB4oC,EAAgB7nC,SAAS6F,KAAKvJ,OAAOuG,iBAAmB,MAU5D,GAPKvF,oBAAkBupC,EAAKhkC,mBACxBgkC,EAAK7jC,aAAe,MAEnB1F,oBAAkBuqC,EAAgB7nC,WAAc1C,oBAAkBupC,EAAK7jC,eACvE/E,OAAOwE,UAAUC,eAAeC,KAAKklC,EAAgB7nC,SAAU6mC,EAAK7jC,gBACrE6kC,EAAgB7nC,SAAS6mC,EAAK7jC,kBAE9B/E,OAAOwE,UAAUC,eAAeC,KAAKklC,EAAiBhB,EAAK7jC,eAC1D6kC,EAAgBhB,EAAK7jC,cAAe7F,SAAW0I,KAAKsgC,qBACpD7oC,oBAAkBupC,EAAKhkC,iBAExB,IAAK,IADDgN,EAAag4B,EAAgBhB,EAAK7jC,cAC7BrD,EAAI,EAAGA,EAAIkQ,EAAU1S,OAAQwC,KACW,IAAzCmoC,EAAczjC,QAAQwL,EAAUlQ,MAChCmoC,EAAc/kC,OAAOpD,EAAG,EAAGkQ,EAAUlQ,IACrCkQ,EAAUlQ,GAAGK,SAAWgC,YAAW6N,EAAUlQ,IAC7C1C,GAAK,GAIbgB,OAAOwE,UAAUC,eAAeC,KAAKklC,EAAiBhB,EAAKhkC,kBACd,OAA1CglC,EAAgBhB,EAAKhkC,mBACpBgD,KAAKsgC,qBACT0B,EAAgB7nC,SAAS6mC,EAAKhkC,iBAAmB,YAC1CglC,EAAgBnpC,kBAChBmpC,EAAgB1jC,gBAEvB7G,oBAAkBupC,EAAKtqC,cACvBsqC,EAAKtqC,eAETsqC,EAAKtqC,WAAWwG,OA9BG,EA8BkB,EAAG8kC,EAAgB7nC,UAE5D6mC,EAAKvgC,eAAgB/J,WAAYsqC,EAAKtqC,aAAc,OAEnD,CACD,IAASU,EAAI,EAAGA,EAAI2qC,EAAYzqC,OAAQF,IACpCqhB,WAAS,sBAAwBspB,EAAY3qC,GAAG2B,SAAUgpC,EAAY3qC,GAAI4I,KAAKvJ,QAEnF,IAAIyM,GAASzE,KAAMhB,EAAExF,QAASw5B,UAAWh0B,EAAE0hC,SACvCn/B,KAAKvJ,OAAOC,sBAAsBC,eAClCqJ,KAAKuc,aAAevc,KAAKvJ,OAAOC,WAAWA,WAAW8E,KACtDwE,KAAKzE,SAAWyE,KAAKvJ,OAAOC,WAAWA,WAAW8E,OAGlDwE,KAAKuc,aAAevc,KAAKvJ,OAAOiB,KAAKhB,WACrCsJ,KAAKzE,SAAWyE,KAAKvJ,OAAOC,YAE5Be,oBAAkBuI,KAAK0xB,gBACvB1xB,KAAK0xB,aAAe,gBACpBxuB,EAAKuuB,UAAYzxB,KAAKvJ,OAAOyF,wBAAwB5E,OAAS,EAAI0I,KAAKvJ,OAAOyF,wBAAwB5E,OAAS,EAC3G4L,EAAKuuB,UACTvuB,EAAKzE,KAAOyE,EAAKzE,KAAKN,IAAI,SAAU/G,GAChC,OAAIA,EAAEgC,iBAAmB3B,oBAAkBL,EAAEyB,aACzCzB,EAAE8C,MAAQ,EACH9C,WAGAA,EAAEyB,kBACFzB,EAAEkH,eACTlH,EAAE8C,MAAQ,EACH9C,MAInB4I,KAAKihC,SAAS/9B,KAGtBk9B,EAAMxjC,UAAUmkC,YAAc,SAAUtjC,GACpC,IAAK,IAAIrG,EAAI,EAAGA,EAAIqG,EAAExF,QAAQX,OAAQF,IAClC4I,KAAK8hC,cAAgBrkC,EAAExF,QAAQb,IAC3B4I,KAAK8hC,cAAc1oC,iBAAmB4G,KAAK8hC,cAAcjpC,aAE8B,IADvFmH,KAAKvJ,OAAOiB,KAAKhB,WACb8H,QAAQwB,KAAK0gC,0BAA0B1gC,KAAK8hC,cAAcxjC,gBAAgB,KACjD,IAA7B0B,KAAK8hC,cAAc5nC,QACnB8F,KAAKkiC,iBAIjB9B,EAAMxjC,UAAUulC,sBAAwB,WACpC,IAGIC,EACAC,EAJAP,EAAgB9hC,KAAK8hC,cACrBQ,EAAgBtiC,KAAKsiC,cACrBC,EAAQviC,KAAKvJ,OAUjB,KANI2rC,EADApiC,KAAKvJ,OAAOC,sBAAsBC,eAAe4C,EAAUyG,KAAKvJ,QAC/C8rC,EAAM7rC,WAAWA,WAAW8E,KAG5B+mC,EAAM7rC,aAGHe,oBAAkB6qC,IAAmBA,EAAczpC,YAAgBpB,oBAAkB6qC,EAAcnoC,WAkBtH,IAAK6F,KAAKvJ,OAAOuG,kBAAqBvF,oBAAkB6qC,IAAkBA,EAAczpC,aAC/D,eAAtBmH,KAAK0xB,cAAuD,kBAAtB1xB,KAAK0xB,cAGtC,CAAA,IADDr4B,EADS2G,KAAK0gC,0BAA0B4B,EAAchkC,gBAAgB,GAChDjF,aAC1B,IAASjC,EAAI,EAAGA,EAAIiC,EAAa/B,OAAQF,IACrCkrC,EAAczpC,WAAWsB,SAAS6F,KAAKvJ,OAAO0G,cAAc/F,GAAKiC,EAAajC,GAAG+C,cAvByC,CAElI,IAAK,IADD9B,EAAOD,OAAOC,KAAK+pC,GACdhrC,EAAI,EAAGA,EAAIiB,EAAKf,OAAQF,IACzBgrC,EAAehrC,GAAG4I,KAAKvJ,OAAO0G,gBAAkBmlC,EAAcnoC,SAAS6F,KAAKvJ,OAAO0G,gBACnFklC,EAAMjrC,GAGY,eAAtB4I,KAAK0xB,aACA1xB,KAAKvJ,OAAOwG,WACbmlC,EAAellC,OAAOmlC,EAAK,EAAGP,EAAc3nC,UAGrB,kBAAtB6F,KAAK0xB,eACL1xB,KAAKvJ,OAAOwG,WACbmlC,EAAellC,OAAOmlC,EAAM,EAAG,EAAGP,EAAc3nC,WAaxD6F,KAAKvJ,OAAOuG,kBACR8kC,EAAcjpC,WACY,eAAtBmH,KAAK0xB,cAAuD,kBAAtB1xB,KAAK0xB,cAC3CoQ,EAAc9hC,KAAKvJ,OAAOuG,iBAAmBslC,EAActiC,KAAKvJ,OAAOuG,iBACvE8kC,EAAc3nC,SAAS6F,KAAKvJ,OAAOuG,iBAAmBslC,EAActiC,KAAKvJ,OAAOuG,mBAGhF8kC,EAAc9hC,KAAKvJ,OAAOuG,iBAAmBslC,EAActiC,KAAKvJ,OAAOwG,WACvE6kC,EAAc3nC,SAAS6F,KAAKvJ,OAAOuG,iBAAmBslC,EAActiC,KAAKvJ,OAAOwG,aAIpF6kC,EAAc3nC,SAAS6F,KAAKvJ,OAAOuG,iBAAmB,KACtD8kC,EAAc9hC,KAAKvJ,OAAOuG,iBAAmB,QAIzDojC,EAAMxjC,UAAU4lC,qBAAuB,SAAUrxB,GAC7C,IAAIsxB,EAAkC,kBAAtBziC,KAAK0xB,aACjB1xB,KAAKvJ,OAAO0a,QAAQC,uBAAuB,qBAAqB9Z,OAAS,GAAK6Z,IACxD,IAArBA,EAAQtH,UAAkB44B,IAC3BziC,KAAKvJ,OAAO0a,QAAQC,uBAAuB,qBAAqB,GAAGqX,UAG3E2X,EAAMxjC,UAAU8lC,oBAAsB,SAAUvxB,GAC5C,IAAIwxB,EAAaxxB,IAAYA,EAAQ5I,UAAUC,SAAS,eAAiB2I,EAAQ5I,UAAUC,SAAS,mBAC7F2I,EAAQ5I,UAAUC,SAAS,gBAC9Bo6B,EAAiBzxB,IAAYwxB,GAC7B3iC,KAAKvJ,OAAOmI,cAAcoB,KAAKvJ,OAAOyF,wBAAwB5E,OAAS,GAAG+U,aAAa,cACnF8E,EAAQ9E,aAAa,YACzBo2B,EAAYG,GAAwC,eAAtB5iC,KAAK0xB,aACnC1xB,KAAKvJ,OAAO0a,QAAQC,uBAAuB,oBAAoB9Z,OAAS,GAAK6Z,IAAYyxB,GAAkBH,IAC3GziC,KAAKvJ,OAAO0a,QAAQC,uBAAuB,oBAAoB,GAAGqX,UAG1E2X,EAAMxjC,UAAUimC,WAAa,SAAUlkC,EAAK1E,EAAOiJ,GAC/C,IAAI4/B,EAAS5/B,EAAK3B,OAAS2J,UAAQhI,EAAK3B,OAAQ,MAAQ,KACxDvB,KAAK0xB,kBAAelc,EACpB,IAAIutB,EAAoB,EACxB/iC,KAAKwiC,qBAAqBM,GAC1B9iC,KAAK0iC,oBAAoBI,GACzB,IAAK,IAAI1rC,EAAI,EAAGA,EAAI8L,EAAK+E,KAAK3Q,OAAQF,KAC7BK,oBAAkBqrC,IAAWA,EAAOz2B,aAAa,cAAgBnJ,EAAK+E,KAAK7Q,GAAGiV,aAAa,cACxFrB,eAAa9H,EAAK3B,OAAQ,mBAC9BvB,KAAK0xB,aAAe,UACpB1xB,KAAKgjC,gBAIb,IAAIhC,EAAOhhC,KAAKvJ,OACZwsC,EAAS,EAETC,EAAalC,EAAKxZ,SAAWwZ,EAAKxZ,QAAQlwB,OAC1Cs9B,SAASC,eAAemM,EAAK7vB,QAAQ8D,GAAK,6BAA6BkuB,aAAe,EAEtFC,EAAiBpjC,KAAKqjC,UAAUrC,EAAK7vB,SAErCmyB,EAAgBtC,EAAK50B,mBAAmB+2B,aAAeC,EAAeG,IAAML,EAC5E/I,EAAY6G,EAAK9J,aAAagD,kBAAkBC,UAC/C1iC,oBAAkBqrC,KACnBC,EAAoBD,EAAOU,UAAYrJ,GAI3C,IAEIsJ,IAHJR,EAASF,EAAoBO,EAZd,GAaU3kC,EAAI,GAAGwkC,aACHF,GACH,EACtBS,EAAgBT,EAASQ,EACzBE,EAAmBD,EAAgBD,EACnCG,EAAmBD,EAAmBF,EACtCI,EAAavrC,YAAU,sBAAuB4K,GAC9C4gC,EAAaxrC,YAAU,sBAAuB4K,GAC9C6gC,EAA4B,cAApBF,EAAW1gC,KAAwB0gC,EAAWG,MAAWvsC,oBAAkBqsC,IAClFrsC,oBAAkBqsC,EAAWG,gBAAwD,KAArCH,EAAWG,eAAe,GAAGD,MAC9EE,EAAeH,GAAQL,EACvBS,EAAsBJ,EAAOL,GAAiBK,GAAQJ,EACtDS,EAAsBL,EAAOJ,GAAoBI,GAAQH,EAC7D,GAAIM,GAAgBC,GAAsBC,EAAoB,CAU1D,GATIF,GAAsC,YAAtBlkC,KAAK0xB,eACrB1xB,KAAKqkC,oBACLrkC,KAAK0xB,aAAe,aACpB1xB,KAAKskC,0BACLtkC,KAAKukC,kBAAkBzB,GACvB9iC,KAAKwkC,kBACLxkC,KAAK0iC,oBAAoBI,GACzB9iC,KAAKykC,kBAAkBvhC,EAAK3B,SAE5B4iC,GAA4C,YAAtBnkC,KAAK0xB,aAA4B,CACvD1xB,KAAKskC,0BACL,IAAI54B,KACAyF,EAAUjG,UAAQhI,EAAK3B,OAAQ,OACnCmK,KAAgBjD,MAAM3L,KAAKqU,EAAQzI,iBAAiB,oDACrCpR,OAAS,GACpB0I,KAAK0kC,iBAAiBh5B,GAAY,EAAM,iBAE5C1L,KAAK2kC,iBAAiB7B,GACtB9iC,KAAKukC,kBAAkBzB,GACvB9iC,KAAK0xB,aAAe,gBAEpB0S,GAA4C,YAAtBpkC,KAAK0xB,eAC3B1xB,KAAKwkC,kBACLxkC,KAAKskC,0BACLtkC,KAAKqkC,oBACLrkC,KAAK0xB,aAAe,gBACpB1xB,KAAK2kC,iBAAiB7B,GACtB9iC,KAAKwiC,qBAAqBM,GAC1B9iC,KAAKykC,kBAAkBvhC,EAAK3B,SAGpC,OAAOvB,KAAK0xB,cAEhB0O,EAAMxjC,UAAUynC,kBAAoB,WAChC,IAAIO,MACJA,KAAgBn8B,MAAM3L,KAAKkD,KAAKvJ,OAAO0a,QAAQzI,iBAAiB,oBACjDpR,OAAS,GACpB0I,KAAK0kC,iBAAiBE,GAAY,EAAO,kBAGjDxE,EAAMxjC,UAAU2nC,kBAAoB,SAAUM,GAC1C,IAAIC,EAAO9kC,KAAKvJ,OAAO0a,QACnB6vB,EAAOhhC,KAAKvJ,OAChB,GAAIouC,GAAoC,IAAvBA,EAAUh7B,WAAmBg7B,EAAUt8B,UAAUC,SAAS,cAAe,CACtF,IAAIu8B,EAAM/kC,KAAKvJ,OAAO+V,cAAc,OAASC,UAAW,sBACpDu4B,EAAgBhlC,KAAKvJ,OAAO2V,mBAC5B64B,EAAgB,EAChBjE,EAAKxZ,UACLyd,EAAgBjE,EAAKnX,cAAcC,aAAaqZ,cAEpD,IAAI+B,GAAgBztC,oBAAkBuI,KAAKvJ,OAAOyyB,gBAAgBC,UAC9D+b,IACAH,EAAIxqC,MAAMgpC,IAAMvjC,KAAKvJ,OAAOiB,KAAKyZ,QAAQC,uBAAuB,gBAAgB,GAAG+xB,aAC7E8B,EAAgB,MAE1BF,EAAIxqC,MAAM8S,MAAQ63B,EAAeJ,EAAKK,YAAc,KAChDL,EAAKK,YAAcnlC,KAAKolC,iBAAmB,KAC1CJ,EAAct8B,iBAAiB,sBAAsBpR,QACtD0tC,EAAcn3B,YAAYk3B,KAItC3E,EAAMxjC,UAAU+nC,iBAAmB,SAAUU,GACzC,IAAI1C,EAAa0C,IAAcA,EAAU98B,UAAUC,SAAS,eACxD68B,EAAU98B,UAAUC,SAAS,mBAAqB68B,EAAU98B,UAAUC,SAAS,gBACnF,GAAI68B,IAAc1C,GAAc3iC,KAAKvJ,OAAOmI,cAAcoB,KAAKvJ,OAAOyF,wBAAwB5E,OAAS,GAAG+U,aAAa,cACnHg5B,EAAUh5B,aAAa,YAAa,CACpC,IAAIi5B,EAAetlC,KAAKvJ,OAAO+V,cAAc,OAASC,UAAW,qBAC7D84B,EAAiBvlC,KAAKvJ,OAAOygC,aACjCoO,EAAa/qC,MAAM8S,MAAQrN,KAAKvJ,OAAO0a,QAAQg0B,YAAcnlC,KAAKolC,iBAAmB,KAChFG,EAAe78B,iBAAiB,qBAAqBpR,SACtDiuC,EAAeh9B,UAAUsE,IAAI,uBAC7B04B,EAAe13B,YAAYy3B,GAC3BA,EAAa/qC,MAAMirC,OAASxlC,KAAKolC,iBAAmB,QAIhEhF,EAAMxjC,UAAUwoC,eAAiB,WAC7B,IAAIK,EAAazlC,KAAKvJ,OAAOygC,aAAagD,kBAC1C,OAAOuL,EAAWC,YAAcD,EAAWN,YAAcQ,SAAOC,oBAAsB,GAE1FxF,EAAMxjC,UAAUomC,aAAe,WAC3B,IAAI6C,EAAWjR,SAASxjB,uBAAuB,qBAAqB,GAEpE,IADgBy0B,EAASn9B,iBAAiB,gBAAgBpR,SACvC0I,KAAKvJ,OAAOyyB,gBAAgBC,SAAU,CACrD,IAAI2c,EAAMlR,SAASpoB,cAAc,OACjCjE,YAAUu9B,GAAM,wBAChBv9B,YAAUu9B,GAAM,UAAW,mBAC3B,IAAIC,EAAWF,EAAS56B,cAAc,eAClC+6B,EAAUH,EAAS56B,cAAc,cAAc0C,UAC/Co4B,IACAC,EAAUD,EAASp4B,UACnBo4B,EAASE,WAAWC,YAAYH,IAEpCF,EAAS56B,cAAc,cAAc0C,UAAY,GACjD,IAAIw4B,EAAcvR,SAASpoB,cAAc,QACzC25B,EAAY15B,UAAY,aACxB05B,EAAY5rC,MAAM6rC,YAAc,OAChCD,EAAYx4B,UAAYq4B,EACxBH,EAAS56B,cAAc,cAAc4C,YAAYi4B,GACjDD,EAAS56B,cAAc,cAAc4C,YAAYs4B,GACjD,IAAIE,EAAezR,SAAS3pB,cAAc,qBAC1C,GAAIjL,KAAKugC,aAAe8F,EAAc,CAClC,IAAIC,EAAejyB,SAASgyB,EAAa9rC,MAAMgsC,KAAM,IAAMT,EAAIX,YAAc,GACzEqB,EAAYxmC,KAAKvJ,OAAO8zB,UAA2B,EAAf+b,EACxCD,EAAa9rC,MAAMgsC,KAAOC,EAAW,KACrCxmC,KAAKugC,aAAc,KAI/BH,EAAMxjC,UAAU4nC,gBAAkB,WAC9B,IAAIiC,EAAY7R,SAAS3pB,cAAc,gBACnCy7B,EAAa9R,SAAS3pB,cAAc,eACpCo7B,EAAezR,SAAS3pB,cAAc,qBAC1C,GAAIw7B,EAAW,CACX,GAAIJ,EAAc,CACd,IAAIC,EAAejyB,SAASgyB,EAAa9rC,MAAMgsC,KAAM,IAAME,EAAUtB,YAAc,GACnFwB,oBAAkBD,GACdN,YAAa,QAEZpmC,KAAKvJ,OAAO8zB,WACboc,oBAAkBN,GACdE,KAAMD,EAAe,OAIjCG,EAAUhe,SAEdzoB,KAAKugC,aAAc,GAEvBH,EAAMxjC,UAAU6nC,kBAAoB,SAAUljC,GAC1C,IAAImK,KACAyF,EAAUjG,UAAQ3J,EAAQ,OAC9BmK,EAAayF,KAAa1I,MAAM3L,KAAKqU,EAAQzI,iBAAiB,uDAC/CpR,SACe,eAAtB0I,KAAK0xB,eACL1xB,KAAK0kC,iBAAiBh5B,GAAY,EAAM,aACpC1L,KAAKvJ,OAAO0a,QAAQC,uBAAuB,wBAAwB9Z,OAAS,GAC5E0I,KAAKvJ,OAAO0a,QAAQC,uBAAuB,wBAAwB,GAAGqX,UAGpD,kBAAtBzoB,KAAK0xB,cACL1xB,KAAK0kC,iBAAiBh5B,GAAY,EAAM,kBAIpD00B,EAAMxjC,UAAU0nC,wBAA0B,WACtC,IAAIsC,MACJA,KAAYn+B,MAAM3L,KAAKkD,KAAKvJ,OAAO0a,QAAQzI,iBAAiB,+BACjDpR,SACP0I,KAAK0kC,iBAAiBkC,GAAQ,EAAO,gBACrC5mC,KAAK0kC,iBAAiBkC,GAAQ,EAAO,eAG7CxG,EAAMxjC,UAAU8nC,iBAAmB,SAAUjlC,EAAOoN,EAAKJ,GACrD,IAAK,IAAIrV,EAAI,EAAGe,EAAMsH,EAAMnI,OAAQF,EAAIe,EAAKf,IACrCyV,EACApN,EAAMrI,GAAGmR,UAAUsE,IAAIJ,GAGvBhN,EAAMrI,GAAGmR,UAAUkgB,OAAOhc,IAItC2zB,EAAMxjC,UAAUymC,UAAY,SAAUlyB,GAClC,IAAI01B,EAAM11B,EAAQ21B,wBACdC,EAAOnS,SAASmS,KAChBC,EAAUpS,SAASqS,gBACnB9M,EAAY3/B,OAAO0sC,aAAeF,EAAQ7M,WAAa4M,EAAK5M,UAC5DgN,EAAa3sC,OAAO4sC,aAAeJ,EAAQG,YAAcJ,EAAKI,WAC9DE,EAAYL,EAAQK,WAAaN,EAAKM,WAAa,EACnDC,EAAaN,EAAQM,YAAcP,EAAKO,YAAc,EACtD/D,EAAMsD,EAAItD,IAAMpJ,EAAYkN,EAC5Bd,EAAOM,EAAIN,KAAOY,EAAaG,EACnC,OAAS/D,IAAK5pB,KAAK4tB,MAAMhE,GAAMgD,KAAM5sB,KAAK4tB,MAAMhB,KAEpDnG,EAAMxjC,UAAU+jC,WAAa,SAAUz9B,GACnC,IAAI89B,EAAOhhC,KAAKvJ,OACZ+wC,EAAexnC,KAAKvJ,OAAO0a,QAAQlG,cAAc,sBACrDu8B,EAAajtC,MAAMktC,OAAS,GAC5B,IAAI3E,EAAS5/B,EAAK3B,OAAS2J,UAAQhI,EAAK3B,OAAQ,MAAQ,KACpDmmC,EAAS5E,EAASA,EAAOj5B,UAAY,EACrCk4B,KACAO,EAAgBtB,EAAK9kC,wBAAwBwrC,GAmBjD,GAlBA1nC,KAAKwkC,kBACLxkC,KAAKqgC,SAAU,EACVn9B,EAAKzE,KAAK,GAIXsjC,EAAc7+B,EAAKzE,KAHnBsjC,EAAYxpC,KAAK2K,EAAKzE,OAKV,IAAZipC,EACA1nC,KAAK2nC,mBAAmB5F,EAAaO,IAGrCtiC,KAAKqgC,SAAU,EACfrgC,KAAKgjC,iBAEJhC,EAAK9X,gBAAgBC,UAAYnpB,KAAKqgC,SACvCW,EAAK5B,qBAAqByD,WAAW3/B,EAAK+E,KAAMy/B,EAAQxkC,GAExD89B,EAAK9X,gBAAgBC,SAAU,CAE/B,IADIye,EAAc58B,eAAa9H,EAAK3B,OAAQ,gBACzBqmC,EAAY3yB,KAAOjV,KAAKvJ,OAAOyyB,gBAAgBC,SAAU,CACvDye,EAAYC,cAAc,GAChCzI,qBAAqByD,WAAW3/B,EAAK+E,KAAMy/B,EAAQxkC,IAGtE,GAAIA,EAAK3B,QAAU2J,UAAQhI,EAAK3B,OAAQ,IAAMy/B,EAAK9X,gBAAgBC,UAAW,CAC1E,IAAIye,GAAAA,EAAc58B,eAAa9H,EAAK3B,OAAQ,iBAExCimC,EAAajtC,MAAMktC,OAAS,aAIxCrH,EAAMxjC,UAAUyK,WAAa,SAAUnE,GACnC,IAAI89B,EAAOhhC,KAAKvJ,OA6ChB,GA3CKuqC,EAAK9X,gBAAgBC,UAuBlBjmB,EAAK3B,QAAU2J,UAAQhI,EAAK3B,OAAQ,IAAMy/B,EAAK9X,gBAAgBC,WAAane,eAAa9H,EAAK3B,OAAQ,eACtGyJ,eAAa9H,EAAK3B,OAAQ,cAAc0T,KAAO+rB,EAAK9X,gBAAgBC,UAAYjmB,EAAK3B,QAAUqzB,SAASC,eAAemM,EAAK9X,gBAAgBC,aAC5I1Q,WAAS,eAAgBzY,KAAK0xB,aAAcxuB,GAC5C89B,EAAK53B,QlBxlBA,UkBwlBwBlG,IACxBA,EAAKiG,QAAU63B,EAAK9X,gBAAgBC,WACrCnpB,KAAK8nC,aAAa5kC,GACd89B,EAAK7jB,cACL6jB,EAAKzjC,SAAWyC,KAAKkhC,aAAaF,EAAKzjC,aA7B/CyN,eAAa9H,EAAK3B,OAAQ,eACtBvB,KAAKvJ,OAAO0a,QAAQlG,cAAc,kBAClCjL,KAAK0xB,aAAe,WAExBjZ,WAAS,eAAgBzY,KAAK0xB,aAAcxuB,GAC5CA,EAAKuuB,UAAYvuB,EAAKuuB,YAAcvuB,EAAK6kC,UAAY/nC,KAAKgoC,aAAa9kC,EAAK3B,OAAO+jB,eAAiBpiB,EAAKuuB,UACzGuP,EAAK53B,QlBrkBA,UkBqkBwBlG,GACxBA,EAAKiG,SACDjS,EAAgB8I,KAAKvJ,SACtBuJ,KAAKihC,SAAS/9B,GAEd89B,EAAK7jB,cACL6jB,EAAKzjC,SAAWyC,KAAKkhC,aAAaF,EAAKzjC,WAE3CyjC,EAAKtpC,KAAK45B,UACL75B,oBAAkBupC,EAAK50B,mBAAmBnB,cAAc,wBACzD+1B,EAAK50B,mBAAmBnB,cAAc,sBAAsBwd,WAkB5EzoB,KAAKskC,0BACLtkC,KAAKqkC,oBACA5sC,oBAAkBuI,KAAKvJ,OAAO0a,QAAQC,uBAAuB,qBAAqB,IAG7E3Z,oBAAkBuI,KAAKvJ,OAAO0a,QAAQC,uBAAuB,oBAAoB,KACvFpR,KAAKvJ,OAAO0a,QAAQC,uBAAuB,oBAAoB,GAAGqX,SAHlEzoB,KAAKvJ,OAAO0a,QAAQC,uBAAuB,qBAAqB,GAAGqX,SAKnEzoB,KAAKvJ,OAAOkH,sBAAwBqC,KAAKvJ,OAAO4b,cAAgB5a,oBAAkByL,EAAKzE,KAAK,GAAa,YAAI,CAC7G,IAAIxE,EAAQ+F,KAAKvJ,OAAO2I,gBACxBnF,GAAgB,EAChB,IAAIkhC,EAAkBn7B,KAAKvJ,OAAO6E,0BAA0B,GACxDuO,EAAW7J,KAAKvJ,OAAOiB,KAAKoH,wBAAwBoE,EAAKzE,KAAK,GAAG08B,IACjEx8B,EAAMqB,KAAKvJ,OAAOoI,UAAUgL,GAC5BpL,EAAOyE,EAAKzE,KAAK,GACrB,GAA0B,kBAAtBuB,KAAK0xB,aAAkC,CACvC,IAAIj5B,KACAwP,KACJxP,EAAOF,KAAKkG,GACZwJ,EAAK1P,KAAKoG,GAEVF,EAAO3F,EAAckH,KAAKvJ,OAAQyM,EAAKzE,KAAK,GAAiB,gBAC7DoL,EAAW7J,KAAKvJ,OAAOiB,KAAKoH,wBAAwBL,EAAK08B,IACzD,IAAIkG,EAAYrhC,KAAKvJ,OAAOoI,UAAUgL,GACtCpR,EAAOF,KAAKkG,GACZwJ,EAAK1P,KAAK8oC,GACV,IAAK,IAAIjqC,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAC/B4I,KAAKvJ,OAAO6I,aAAaC,YACrBd,KAAMhG,EAAOrB,GAAIoI,KAAMyI,EAAK7Q,GAAGqI,MAAMxF,GACrCyF,OAAQM,KAAKvJ,OAAOiB,KAAKiI,aAAaK,KAAKvJ,OAAO2I,iBAClDQ,YAAa,mBAGrB,IAAIua,EAAYknB,EAAUjwB,uBAAuB,sBAAsB,GAClE3Z,oBAAkB0iB,KACnB5M,eAAa4M,GAAY,sBACzBjJ,YAAUiJ,GAAY,0BAI1Bna,KAAKvJ,OAAO6I,aAAaC,YACrBd,KAAMA,EAAMe,KAAMb,EAAIc,MAAMxF,GAC5ByF,OAAQM,KAAKvJ,OAAOiB,KAAKiI,aAAaK,KAAKvJ,OAAO2I,iBAClDQ,YAAa,qBAK7BwgC,EAAMxjC,UAAUkrC,aAAe,SAAU5kC,GACrC,IAII+kC,EAJAjH,EAAOhhC,KAAKvJ,OACZouC,EAAY35B,UAAQhI,EAAK3B,OAAQ,MACjC2mC,EAAcC,MAAMnoC,KAAKgoC,aAAanD,IAAc,EAAI7kC,KAAKgoC,aAAanD,GAC1E+C,EAAc58B,eAAa9H,EAAK3B,OAAQ,cAE5C,GAAIqmC,GAAeA,EAAY3yB,KAAOjV,KAAKvJ,OAAOyyB,gBAAgBC,WAAa3yB,EAAawJ,KAAKvJ,UACzFS,EAAgB8I,KAAKvJ,QAAS,CAClCwxC,EAAaL,EAAYC,cAAc,GAGvC,IAAK,IAFD5vC,EAAU+oC,EAAKp4B,qBACfowB,KACK5hC,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC4hC,EAAQ5hC,GAAKa,EAAQb,GAAG6C,MAE5B,IAAIwE,EAAOwpC,EAAWvxC,WACtB,GAA8B,OAA1BsJ,KAAKvJ,OAAOwG,YAAuBxF,oBAAkBuI,KAAK0xB,eAAuC,kBAAtB1xB,KAAK0xB,cAA0D,YAAtB1xB,KAAK0xB,gBAAiCjzB,EAAW,OAAG,CAEnK,IADD2pC,KACJ,IAAShxC,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAChC,GAAIa,EAAQb,GAAGgC,gBAAiB,CAC5BgvC,EAAW7vC,KAAKN,EAAQb,IAExB,IAAK,IADD4G,EAAQ7E,EAAoBlB,EAAQb,IAC/B0Z,EAAM,EAAGA,EAAM9S,EAAM1G,OAAQwZ,IAClCs3B,EAAW7vC,KAAKyF,EAAM8S,IAI9Bs3B,EAAW9wC,SACXW,EAAUmwC,GAGlBpH,EAAK7sB,OAAO2sB,IAAqB9H,QAASA,EAAS/gC,QAASA,IAC5DgwC,EAAW9zB,OAAOysB,IAAkBzB,QAAS+I,EAAajwC,QAASA,IACnE,IAAIowC,EAAqBJ,EAAW7I,qBAAqB7iB,aACzD,IAAK9kB,oBAAkB4wC,GACnB,IAASjxC,EAAI,EAAGA,EAAIixC,EAAmB/wC,OAAQF,IAE3C,GADAixC,EAAmBjxC,GAAG6C,MAAQ7C,GACzBK,oBAAkB4wC,EAAmBjxC,GAAGyB,YAAa,CACtD,IAAIyvC,EAAcjqC,WAAS,sBAAwBgqC,EAAmBjxC,GAAGkH,eAAiB,SAAU2pC,GACpGI,EAAmBjxC,GAAGyB,WAAWoB,MAAQquC,EAIrDtH,EAAKtpC,KAAK45B,UACV2W,EAAWvwC,KAAK45B,UACZ2W,EAAWvwC,KAAKhB,WAAWY,OAAS,IACpC2wC,EAAWvwC,KAAK45B,UACX75B,oBAAkBwwC,EAAW77B,mBAAmBnB,cAAc,wBAC/Dg9B,EAAW77B,mBAAmBnB,cAAc,sBAAsBwd,SAEjEhxB,oBAAkBwwC,EAAW/Q,aAAajsB,cAAc,uBACzDg9B,EAAW/Q,aAAajsB,cAAc,qBAAqBwd,UAInEvxB,EAAgB8I,KAAKvJ,UACrBwxC,EAAaL,EAAYC,cAAc,GACvC7G,EAAKtpC,KAAK45B,UACV2W,EAAWvwC,KAAK45B,YAGxB8O,EAAMxjC,UAAUorC,aAAe,SAAUnD,GACrC,OAAOA,EAAYxwB,SAASwwB,EAAUx4B,aAAa,iBAAkB,IAAM,GAE/E+zB,EAAMxjC,UAAU9D,cAAgB,SAAUL,EAAQgG,GAC9C,IAAI5F,EAAaJ,EAAOI,WACpB0oC,GAAqB,EAOzB,GANIvhC,KAAKvJ,OAAO2H,uBAA0D,IAAlC4B,KAAKvJ,OAAO40B,iBAChDkW,EAAoBvhC,KAAKvJ,OAAOsnC,kBAAkB,GAAGl0B,UAEd,IAAlC7J,KAAKvJ,OAAO40B,mBACjBkW,EAAoBvhC,KAAKvJ,OAAO40B,kBAEV,kBAAtBrrB,KAAK0xB,aAAkC,CACvC,IAAIyJ,EAAkBn7B,KAAKvJ,OAAO6E,0BAA0B,GACxDuO,GAAkC,IAAvB03B,EACVvhC,KAAKvJ,OAAOiB,KAAKoH,wBAAwBL,EAAK,GAAG08B,IAChDn7B,KAAKvJ,OAAO2R,wBAAwB,GACtCs5B,EAAiB1hC,KAAKvJ,OAAOyF,wBAAwB2N,GACzD7J,KAAKsiC,cAAgBxpC,EAAckH,KAAKvJ,OAAQirC,EAAe7oC,WAAWE,UAE9E,GAA0B,kBAAtBiH,KAAK0xB,aAAkC,CAC3B1xB,KAAKvJ,OAAOyF,wBAAwBqlC,GAAmBrnC,QACrDrB,EAAWqB,MACrB8F,KAAKsiC,cAAgBxpC,EAAckH,KAAKvJ,OAAQoC,EAAWE,UAG3DiH,KAAKlH,cAAcD,KAI/BunC,EAAMxjC,UAAUqkC,SAAW,SAAU/9B,EAAMqlC,GACvC,GAA0B,YAAtBvoC,KAAK0xB,eAA+Bl7B,EAAawJ,KAAKvJ,QAAS,CAC/D,IACI+xC,EADAxH,EAAOhhC,KAAKvJ,OAEZ6rC,OAAgB,EACpB,GAAI7qC,oBAAkByL,EAAKuuB,WAAY,CACnC,IAAI0J,EAAkBn7B,KAAKvJ,OAAO6E,0BAA0B,GACxDuO,GAAsC,IAA3Bm3B,EAAK3V,iBACfrrB,KAAKvJ,OAAOiB,KAAKoH,wBAAwBoE,EAAKzE,KAAK,GAAG08B,IAAqB,EAC1E6F,EAAK54B,wBAAwB,GAAK,EACpC3P,EAASuoC,EAAK9kC,wBAAwB2N,GAC1C7J,KAAKlH,cAAcL,EAAQyK,EAAKzE,WAGhCyE,EAAKuuB,UAAYvuB,EAAKuuB,YAAcvuB,EAAK6kC,UAAY/nC,KAAKgoC,aAAa9kC,EAAK3B,OAAO+jB,eAAiBpiB,EAAKuuB,UACzGzxB,KAAKsiC,cAAgBtB,EAAK9kC,wBAAwBgH,EAAKuuB,WAE3D,IAAIsQ,KACJO,EAAgBtiC,KAAKsiC,cAChBp/B,EAAKzE,KAAK,GAIXsjC,EAAc7+B,EAAKzE,KAHnBsjC,EAAYxpC,KAAK2K,EAAKzE,MAK1BuB,KAAKvJ,OAAOuJ,KAAKmhB,iBAAiB5oB,KAAK2K,EAAKzE,KAAK,GAAI6jC,GACrD,IAAI/zB,EAAQ,EACR22B,EAAellC,KAAKvJ,OAAOyyB,gBAAgBC,SAC/CnpB,KAAKyoC,eAAiBvD,EACjBA,EAIDllC,KAAKwgC,cAAgB0E,GAAgBllC,KAAKsgC,mBAH1CtgC,KAAK2nC,mBAAmB5F,EAAaO,GAKzC,IAAIoG,EAAa3G,EAAYzqC,OACxBG,oBAAkBuI,KAAKvJ,OAAOwG,YAC/B8kC,EAAY4G,UAwFhB,IAAK,IAtFDhsC,EAAU,SAAUvF,GAGpB,GAFAoxC,EAAkBzG,EAAY3qC,GAC9B2jC,EAAO+G,cAAgB0G,EACK,YAAxBzN,EAAOrJ,aAA4B,CAInC,GAHKsP,EAAK9X,gBAAgBC,WAAYof,GAClCxN,EAAOmH,gBAEPnH,EAAO+G,gBAAkB/G,EAAOuH,cAAe,CAC/C,IAAIsG,EAAe7N,EAAOiN,aAAa9kC,EAAK3B,OAAOsnC,aAAavjB,eAC5D6iB,MAAMS,KACNA,EAAe7N,EAAOiN,aAAa9kC,EAAK3B,OAAO+jB,gBAEnDpiB,EAAKuuB,UAAYmX,EACjBtG,EAAgBvH,EAAOuH,cAAgBvH,EAAOtkC,OAAOyF,wBAAwBgH,EAAKuuB,WAEtF,GAAI6Q,EAAczpC,YAAsC,kBAAxBkiC,EAAOrJ,aAAkC,EAG7C,KADpBoX,GADAxsB,EAAgB0kB,EAAK1jC,YACUkB,QAAQu8B,EAAO+G,iBAE9CxlB,EAAcpf,OAAO4rC,EAAgB,GAG7C,IAAIC,EAAehO,EAAOxe,aAAa/d,QAAQ8jC,GAE/C,GADAvH,EAAOiO,UAAUD,GACW,kBAAxBhO,EAAOrJ,aAAkC,CAsBzC,GArBK4Q,EAAclpC,iBAOfmV,EAAQwsB,EAAOkO,cAAc3G,EAAe,GACxCvH,EAAOtkC,OAAOuG,iBACd+9B,EAAOx/B,SAAS2B,OAAO6rC,EAAex6B,EAAQ,EAAG,EAAGwsB,EAAO+G,cAAc3nC,UAE7E4gC,EAAOxe,aAAarf,OAAO6rC,EAAex6B,EAAQ,EAAG,EAAGwsB,EAAO+G,iBAV3D/G,EAAOtkC,OAAOuG,iBACd+9B,EAAOx/B,SAAS2B,OAAO6rC,EAAe,EAAG,EAAGhO,EAAO+G,cAAc3nC,UAErE4gC,EAAOxe,aAAarf,OAAO6rC,EAAe,EAAG,EAAGhO,EAAO+G,gBASvDrqC,oBAAkB6qC,EAAczpC,qBACzB2vC,EAAgB3vC,kBAChB2vC,EAAgBlqC,eACvBkqC,EAAgBtuC,MAAQ,EACpB6gC,EAAOtkC,OAAOuG,kBACdwrC,EAAgBzN,EAAOtkC,OAAOuG,iBAAmB,OAGrDslC,EAAczpC,WAAY,CAC1B,IACIQ,EADM0hC,EAAO2F,0BAA0B4B,EAAchkC,gBAClC,GAAGjF,aACtB6vC,EAAqB7vC,EAAamF,QAAQ8jC,GAAiB,EAC/DjpC,EAAa6D,OAAOgsC,EAAoB,EAAGV,GAC3CA,EAAgB3vC,WAAaypC,EAAczpC,WAC3C2vC,EAAgBlqC,eAAiBgkC,EAAchkC,eAC3Cy8B,EAAOtkC,OAAOuG,kBACdwrC,EAAgBzN,EAAOtkC,OAAOuG,iBAAmBslC,EAAcvH,EAAOtkC,OAAOuG,iBAC7EwrC,EAAgB3vC,WAAaypC,EAAczpC,WAC3C2vC,EAAgBtuC,MAAQooC,EAAcpoC,OAG9C,GAAIsuC,EAAgBpvC,gBAAiB,CAEjC2hC,EAAOoO,uBAAuBX,EADlB,GAEZzN,EAAOqO,kBAAkBZ,EAAiBO,EAAex6B,EAAQ,IAGzEwsB,EAAOsO,WAAWN,GAEtB,GAAItxC,oBAAkB+wC,EAAgB3vC,YAAa,CAC/C,IAAIyjB,EACAwsB,GADAxsB,EAAgB0kB,EAAK1jC,YACUkB,QAAQu8B,EAAOuH,eAC9CgH,EAAc,EAClBhtB,EAAc9e,OAAO,SAAUC,GACvB+qC,EAAgBzvC,WAAa0E,EAAE1E,UAC/BuwC,MAGoB,kBAAxBvO,EAAOrJ,cAAoD,IAAhB4X,EAC3ChtB,EAAcpf,OAAO4rC,EAAiB,EAAG,EAAGN,GAEf,eAAxBzN,EAAOrJ,cAAiD,IAAhB4X,GAC7ChtB,EAAcpf,OAAO4rC,EAAgB,EAAGN,GAGhDxH,EAAK5B,qBAAqB+C,yBAE1BpH,EAAS/6B,KACJ5I,EAAI,EAAGA,EAAIsxC,EAAYtxC,IAC5BuF,EAAQvF,KAIpBgpC,EAAMxjC,UAAUysC,WAAa,SAAUp6B,GACnC,IAAI+xB,EAAOhhC,KAAKvJ,OACZ4C,EAAeF,EAAoB6G,KAAKsiC,eACxCiH,EAAsB9xC,oBAAkB4B,IAChB,IAAxBA,EAAa/B,OAAgB2X,EAAc,EAC3C5V,EAAa/B,OAAS2X,EAAc,EACd,kBAAtBjP,KAAK0xB,eACDsP,EAAKhkC,iBACLgD,KAAKzE,SAAS2B,OAAOqsC,EAAoB,EAAGvpC,KAAK8hC,cAAc3nC,UAC/D6F,KAAKuc,aAAarf,OAAOqsC,EAAoB,EAAGvpC,KAAK8hC,gBAGrD9hC,KAAKuc,aAAarf,OAAOqsC,EAAoB,EAAGvpC,KAAK8hC,eAEzD9hC,KAAKwpC,cACDxpC,KAAK8hC,cAAc1oC,iBACnB4G,KAAKopC,kBAAkBppC,KAAK8hC,cAAeyH,KAIvDnJ,EAAMxjC,UAAUosC,UAAY,SAAUD,GAClC,IAAI/H,EAAOhhC,KAAKvJ,OAChB,GAA0B,eAAtBuJ,KAAK0xB,aAA+B,CAQpC,GAPIsP,EAAKhkC,iBACLgD,KAAKzE,SAAS2B,OAAO6rC,EAAc,EAAG/oC,KAAK8hC,cAAc3nC,UAE7D6F,KAAK8hC,cAAcjpC,WAAamH,KAAKuc,aAAawsB,GAAclwC,WAChEmH,KAAK8hC,cAAcxjC,eAAiB0B,KAAKuc,aAAawsB,GAAczqC,eACpE0B,KAAK8hC,cAAc5nC,MAAQ8F,KAAKuc,aAAawsB,GAAc7uC,MAC3D8F,KAAKuc,aAAarf,OAAO6rC,EAAc,EAAG/oC,KAAK8hC,eAC3C9hC,KAAK8hC,cAAc1oC,gBAAiB,CAEpC4G,KAAKopC,kBAAkBppC,KAAK8hC,cAAeiH,GAC3C/oC,KAAKmpC,uBAAuBnpC,KAAK8hC,cAFrB,GAIhB,GAAI9hC,KAAKsiC,cAAczpC,WAAY,CAC/B,IACIQ,EADM2G,KAAK0gC,0BAA0B1gC,KAAKsiC,cAAchkC,gBACrC,GAAGjF,aACtB6vC,EAAqB7vC,EAAamF,QAAQwB,KAAKsiC,eACnDjpC,EAAa6D,OAAOgsC,EAAoB,EAAGlpC,KAAK8hC,kBAI5D1B,EAAMxjC,UAAU4sC,YAAc,WAC1B,IAAIxI,EAAOhhC,KAAKvJ,OACZqrC,EAAgB9hC,KAAK8hC,cACrBQ,EAAgBtiC,KAAKsiC,cACrBmH,EAAYzI,EAAK7jC,aAWrB,GAVKmlC,EAAclpC,kBACfkpC,EAAclpC,iBAAkB,EAChCkpC,EAAc9uB,yBAA0B,GACpC/b,oBAAkB6qC,EAAcjpC,eAAuD,IAAtCipC,EAAcjpC,aAAa/B,UAC5EgrC,EAAcjpC,iBACT2nC,EAAKhkC,iBAAmBvF,oBAAkB6qC,EAAcnoC,SAASsvC,MAClEnH,EAAcnoC,SAASsvC,SAIT,kBAAtBzpC,KAAK0xB,aAAkC,CACvC,IAAI74B,EAAasD,YAAWmmC,UACrBzpC,EAAWQ,aAClByoC,EAAcjpC,WAAaA,EAC3BipC,EAAcxjC,eAAiBgkC,EAAcvpC,SAC7CupC,EAAcjpC,aAAa6D,OAAOolC,EAAcjpC,aAAa/B,OAAQ,EAAGwqC,GASxE,GAPId,EAAoB,kBACpBsB,EAActB,EAAK7jC,iBACnBmlC,EAActB,EAAK7jC,cAAcD,OAAOolC,EAActB,EAAK7jC,cAAc7F,OAAQ,EAAGwqC,IAEnFrqC,oBAAkBqqC,IAAmBd,EAAKhkC,iBAAoBvF,oBAAkB6qC,EAAcnoC,SAASsvC,KACxGnH,EAAcnoC,SAAS6mC,EAAK7jC,cAAcD,OAAOolC,EAAcjpC,aAAa/B,OAAQ,EAAGwqC,EAAc3nC,UAEpG2nC,EAAc1oC,gBAGd,CAED0oC,EAAc5nC,MAAQooC,EAAcpoC,MAAQ,EAC5C8F,KAAKmpC,uBAAuBrH,EAFhB,QAHZA,EAAc5nC,MAAQooC,EAAcpoC,MAAQ,EAOhDooC,EAAcppC,UAAW,IAGjCknC,EAAMxjC,UAAUslC,cAAgB,WACxBliC,KAAKvJ,OAAOC,sBAAsBC,eAAe4C,EAAUyG,KAAKvJ,SAChEuJ,KAAKuc,aAAevc,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAC3DwE,KAAKzE,SAAWyE,KAAKvJ,OAAOC,WAAWA,WAAW8E,OAGlDwE,KAAKuc,aAAevc,KAAKvJ,OAAOiB,KAAKhB,WACrCsJ,KAAKzE,SAAWyE,KAAKvJ,OAAOC,YAEhC,IAAIgzC,EAAa5wC,EAAckH,KAAKvJ,OAAQuJ,KAAK8hC,cAAc/oC,WAC1DtB,oBAAkBiyC,EAAWrwC,eAAiBqwC,EAAWrwC,aAAa/B,SACvEoyC,EAAWtwC,iBAAkB,GAEjC4G,KAAK2pC,cAAcD,IAEvBtJ,EAAMxjC,UAAUwsC,kBAAoB,SAAU3wC,EAAQ8V,GAClD,IAAIQ,EACAiyB,EAAOhhC,KAAKvJ,OACZa,EAAS,EACb,IAAKmB,EAAOW,gBACR,OAAO,EAEX9B,EAASmB,EAAOY,aAAa/B,OAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IACxB2X,EAAgB1Q,WAAS,sBAAwB5F,EAAOY,aAAajC,GAAG2B,SAAUioC,GAClFzyB,IACAyyB,EAAKzjC,SAASL,OAAOqR,EAAO,EAAGQ,GAC/B0J,WAAS,sBAAwB1J,EAAchW,SAAUgW,EAAe/O,KAAKvJ,QACzEuqC,EAAKhkC,iBACLgD,KAAKzE,SAAS2B,OAAOqR,EAAO,EAAGQ,EAAc5U,UAE7C4U,EAAc3V,kBACdmV,EAAQvO,KAAKopC,kBAAkBr6B,EAAeR,IAGtD,OAAOA,GAEX6xB,EAAMxjC,UAAUusC,uBAAyB,SAAU1wC,EAAQyB,GACvD,IACI6U,EADAzX,EAAS,EAGb,GADA4C,KACKzB,EAAOW,gBACR,OAAO,EAEX9B,EAASmB,EAAOY,aAAa/B,OAC7B,IAAK,IAAIF,EAAI,EAAGA,EAAIE,EAAQF,IAAK,CAC7B2X,EAAgB1Q,WAAS,sBAAwB5F,EAAOY,aAAajC,GAAG2B,SAAUiH,KAAKvJ,QACvF,IAAI6G,OAAa,EACb7E,EAAOI,aACPyE,EAAaxE,EAAckH,KAAKvJ,OAAQgC,EAAOI,WAAWE,WAE1DtB,oBAAkB6F,KAAgB7F,oBAAkBgB,EAAOI,cAC3DyE,EAAa7E,EAAOI,YAExBkW,EAAc7U,MAAQzB,EAAOI,WAAayE,EAAWpD,MAAQA,EAAQzB,EAAOyB,MAAQ,EAChF6U,EAAc3V,kBACdc,IACAA,EAAQ8F,KAAKmpC,uBAAuBp6B,EAAe7U,IAG3D,OAAOA,GAEXkmC,EAAMxjC,UAAU+sC,cAAgB,SAAUlxC,GACtC,IACI/B,EADAsqC,EAAOhhC,KAAKvJ,OAGZC,EADAsJ,KAAKvJ,OAAOC,sBAAsBC,eAAe4C,EAAUyG,KAAKvJ,QACnDuJ,KAAKvJ,OAAOC,WAAWA,WAAW8E,KAGlCwE,KAAKvJ,OAAOC,WAE7B,IAAIgzC,EAAajxC,EACbsC,GAAmBtD,oBAAkBupC,EAAKhkC,iBAC1C4sC,EAAiB5pC,KAAK0gC,0BAA0BgJ,EAAWprC,gBAAgB,GAC/E,GAAIorC,EAAY,CACZ,GAAIA,EAAW7wC,WAAY,CACvB,IAAIQ,EAAeuwC,EAAiBA,EAAevwC,gBAC/CwwC,EAAa,EACbxwC,GAAgBA,EAAa/B,OAAS,IACtCuyC,EAAaxwC,EAAamF,QAAQkrC,GAClCE,EAAevwC,aAAa6D,OAAO2sC,EAAY,GAC1C7pC,KAAKvJ,OAAOuG,kBAAmBgkC,EAAKrjC,qBACrC/C,GAAaZ,MAAO0vC,EAAYruC,OAAQ,UAAY2E,KAAKvJ,OAAQsE,EAAiB2uC,EAAWzvC,MAAOyvC,EAAWzvC,QAI3H,GAAI+mC,EAAKhkC,gBAAiB,CAClB0sC,EAAWtwC,iBAAmBswC,EAAWrwC,aAAa/B,OAAS,GAC/D0I,KAAK8pC,gBAAgBJ,GAKzB,IAAK,IAHDrH,OAAM,EACN0H,OAAM,EACNxtB,EAAe7lB,EACVU,EAAI,EAAGA,EAAImlB,EAAajlB,OAAQF,IACjCmlB,EAAanlB,GAAG4I,KAAKvJ,OAAOwG,aAAeysC,EAAWvvC,SAAS6F,KAAKvJ,OAAOwG,aAC3EolC,EAAMjrC,GAGd,IAASA,EAAI,EAAGA,EAAI4I,KAAKuc,aAAajlB,OAAQF,IACtC4I,KAAKuc,aAAanlB,GAAG4I,KAAKvJ,OAAOwG,aAAeysC,EAAWvvC,SAAS6F,KAAKvJ,OAAOwG,aAChF8sC,EAAM3yC,IAGD,IAATirC,GAAe5qC,oBAAkB4qC,IACjC3rC,EAAWwG,OAAOmlC,EAAK,IAEd,IAAT0H,GAAetyC,oBAAkBsyC,IACjC/pC,KAAKuc,aAAarf,OAAO6sC,EAAK,GAGtC,IAAI96B,EAAcjP,KAAKuc,aAAa/d,QAAQkrC,GAC5C,IAAK1I,EAAKhkC,gBAAiB,CACvB,IAAIgtC,EAAchqC,KAAKvJ,OAAO6G,WAAWkB,QAAQkrC,IAC5B,IAAjBM,IACAhJ,EAAK1jC,WAAWJ,OAAO8sC,EAAa,GACpCtzC,EAAWwG,OAAO8sC,EAAa,IAGvC,IAAqB,IAAjB/6B,IAAuB+xB,EAAKhkC,gBAE5B,IAAK,IADDm+B,EAAkB6F,EAAK1lC,0BAA0B,GAC5CxB,EAAI,EAAGA,EAAIkG,KAAKuc,aAAajlB,OAAQwC,IACtCkG,KAAKuc,aAAaziB,GAAGqhC,KAAqBuO,EAAWvO,KACrDlsB,EAAcnV,GAI1B,IAAKknC,EAAKhkC,gBAAiB,CACvB,IAAIitC,EAAqBjqC,KAAKipC,cAAcS,EAAY,GACxD1pC,KAAKuc,aAAarf,OAAO+R,EAAag7B,EAAqB,GAE3DP,EAAW7wC,YAAc+wC,GAAkBA,EAAevwC,eAAiBuwC,EAAevwC,aAAa/B,SACvGsyC,EAAe1wC,UAAW,EAC1B0wC,EAAexwC,iBAAkB,EACjCwwC,EAAep2B,yBAA0B,IAEsB,IAA/DxT,KAAKvJ,OAAOuJ,KAAKmhB,iBAAiB3iB,QAAQorC,IAA2BnyC,oBAAkBmyC,IACvF5pC,KAAKvJ,OAAOuJ,KAAKmhB,iBAAiB5oB,KAAKqxC,GAEtCnyC,oBAAkBmyC,IACnB5pC,KAAKkqC,sBAAsBN,KAIvCxJ,EAAMxjC,UAAUstC,sBAAwB,SAAUzxC,GAC9C,IAAI6E,EAAaxE,EAAckH,KAAKvJ,OAAQgC,EAAO6F,gBAC9C7G,oBAAkB6F,KACnB0C,KAAKvJ,OAAOuJ,KAAKmhB,iBAAiB5oB,KAAK+E,GACvC0C,KAAKkqC,sBAAsB5sC,KAGnC8iC,EAAMxjC,UAAUktC,gBAAkB,SAAUrxC,GACxC,IAAIsW,EACAszB,EACA0H,EACArzC,EAEAA,EADAsJ,KAAKvJ,OAAOC,sBAAsBC,eAAe4C,EAAUyG,KAAKvJ,QACnDuJ,KAAKvJ,OAAOC,WAAWA,WAAW8E,KAGlCwE,KAAKvJ,OAAOC,WAE7B,IAAK,IAAIU,EAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAAK,CACjD2X,EAAgBtW,EAAOY,aAAajC,IAC/BK,oBAAkBsX,EAAc1V,eAAiB0V,EAAc1V,aAAa/B,SAC7EyX,EAAc3V,iBAAkB,GAEpC,IAAImjB,OAAe,EAEfA,EADAvc,KAAKvJ,OAAOC,sBAAsBC,eAAe4C,EAAUyG,KAAKvJ,QACjDuJ,KAAKvJ,OAAOC,WAAWA,WAAW8E,KAGlCwE,KAAKvJ,OAAOC,WAE/B,IAAK,IAAIyzC,EAAM,EAAGA,EAAM5tB,EAAajlB,OAAQ6yC,IACrC5tB,EAAa4tB,GAAKnqC,KAAKvJ,OAAOwG,aAAe8R,EAAc5U,SAAS6F,KAAKvJ,OAAOwG,aAChFolC,EAAM8H,GAGd,IAAK,IAAIC,EAAM,EAAGA,EAAMpqC,KAAKuc,aAAajlB,OAAQ8yC,IAC9C,GAAIpqC,KAAKuc,aAAa6tB,GAAKpqC,KAAKvJ,OAAOwG,aAAe8R,EAAc5U,SAAS6F,KAAKvJ,OAAOwG,WAAY,CACjG8sC,EAAMK,EACN,OAGK,IAAT/H,GAAe5qC,oBAAkB4qC,IACjC3rC,EAAWwG,OAAOmlC,EAAK,IAEd,IAAT0H,GAAetyC,oBAAkBsyC,IACjC/pC,KAAKuc,aAAarf,OAAO6sC,EAAK,GAE9Bh7B,EAAc3V,iBACd4G,KAAK8pC,gBAAgB/6B,KAIjCqxB,EAAMxjC,UAAUqsC,cAAgB,SAAUxwC,EAAQ8V,GAC9C,IAAIQ,EACJ,IAAKtW,EAAOW,gBACR,OAAO,EAEX,IAAK,IAAIhC,EAAI,EAAGA,EAAIqB,EAAOY,aAAa/B,OAAQF,IAE5CmX,KADAQ,EAAgBtW,EAAOY,aAAajC,IAElBgC,kBACdmV,EAAQvO,KAAKipC,cAAcl6B,EAAeR,IAGlD,OAAOA,GAEX6xB,EAAMxjC,UAAU+qC,mBAAqB,SAAU0C,EAAgBt7B,GAC3D,IAAIxH,EAAQvH,KACZqqC,EAAe7sC,OAAO,SAAUC,GAC5B,GAAIA,EAAErE,kBAAoB3B,oBAAkBgG,EAAEpE,cAAe,CAEzD,IAAe,IADHoE,EAAEpE,aAAamF,QAAQuQ,GAQ/B,OAHAxH,EAAMmqB,aAAe,UACrBnqB,EAAMy7B,oBACNz7B,EAAM84B,SAAU,GALhB94B,EAAMogC,mBAAmBlqC,EAAEpE,aAAc0V,OAWzDqxB,EAAMxjC,UAAUmN,QAAU,WACtB/J,KAAK2K,uBAMTy1B,EAAMxjC,UAAU+N,oBAAsB,WAC9B3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAIunB,GAAmBpyB,KAAK2gC,YACxC3gC,KAAKvJ,OAAOoU,IAAIynB,GAAmBtyB,KAAKqH,YACxCrH,KAAKvJ,OAAOoU,IAAI+1B,GAAgB5gC,KAAK6gC,WACrC7gC,KAAKvJ,OAAOoU,IAAIi2B,GAAmB9gC,KAAK+gC,eAW5CX,EAAMxjC,UAAUmG,cAAgB,WAC5B,MAAO,kBAEJq9B,KCnzCPx/B,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAaxCG,GAA0C,SAAUC,EAAYC,EAAQ3J,EAAK4J,GAC7E,IAA2HV,EAAvHW,EAAIC,UAAUpK,OAAQqK,EAAIF,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOpJ,OAAOwJ,yBAAyBL,EAAQ3J,GAAO4J,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQ3J,EAAK4J,QACpH,IAAK,IAAIpK,EAAIkK,EAAWhK,OAAS,EAAGF,GAAK,EAAGA,KAAS0J,EAAIQ,EAAWlK,MAAIuK,GAAKF,EAAI,EAAIX,EAAEa,GAAKF,EAAI,EAAIX,EAAES,EAAQ3J,EAAK+J,GAAKb,EAAES,EAAQ3J,KAAS+J,GAChJ,OAAOF,EAAI,GAAKE,GAAKvJ,OAAO2J,eAAeR,EAAQ3J,EAAK+J,GAAIA,GAM5D49B,GAAiC,SAAUt9B,GAE3C,SAASs9B,IACL,OAAkB,OAAXt9B,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAK/D,OAPAY,GAAU2+B,EAAiBt9B,GAI3BZ,IACIc,cACDo9B,EAAgB3iC,UAAW,gBAAY,GACnC2iC,GACTn9B,iBChCExB,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAuBxCopC,GAA8C,SAAUroC,GAExD,SAASqoC,EAA6B7zC,GAClC,IAAI8Q,EAAQtF,EAAOnF,KAAKkD,KAAMvJ,IAAWuJ,KAEzC,OADAuH,EAAM8C,mBACC9C,EAsEX,OA1EA3G,GAAU0pC,EAA8BroC,GAMxCqoC,EAA6B1tC,UAAUyN,iBAAmB,WACtDrK,KAAKvJ,OAAO6T,GAAGigC,GAAqBvqC,KAAKwqC,SAAUxqC,OAEvDsqC,EAA6B1tC,UAAU4tC,SAAW,SAAUtnC,GACxDlD,KAAKyqC,WAAavnC,EAAKzE,MAE3B6rC,EAA6B1tC,UAAU8tC,YAAc,WACjD,OAAOzoC,EAAOrF,UAAU+tC,QAAQ7tC,KAAKkD,OAEzCsqC,EAA6B1tC,UAAUguC,aAAe,SAAUnsC,EAAMmd,IAC7DnkB,oBAAkBmkB,EAAWivB,cAAgBjvB,EAAWivB,YAAY3uB,UACrEN,EAAWivB,YAAYzuB,SAASC,OAASrc,KAAKvJ,OAAO6b,aAAa6J,YAClEnc,KAAKvJ,OAAOgK,eAAgB6R,cAAgB6J,YAAaP,EAAWivB,YAAYzuB,SAASC,QAAU,GAE7F5kB,oBAAkBmkB,EAAWivB,cAAiBjvB,EAAWivB,YAAY3uB,UAC3EN,EAAWivB,YAAYxuB,OAASrc,KAAKvJ,OAAO6b,aAAa6J,aACzDnc,KAAKvJ,OAAOgK,eAAgB6R,cAAgB6J,YAAaP,EAAWivB,YAAYxuB,QAAU,GAE9F,IAAIyuB,EAAO9qC,KAAK0qC,cAShB,GARKjzC,oBAAkBmkB,EAAWivB,eACW,UAArCjvB,EAAWivB,YAAY5sB,WAA8D,SAArCrC,EAAWivB,YAAY5sB,UACvErC,EAAWivB,YAAYE,aAAeD,EAAKC,aAG3CnvB,EAAWivB,YAAYE,aAAe/qC,KAAKgrC,gBAAgBpvB,EAAWivB,YAAYxuB,OAGrFrc,KAAKvJ,OAAOC,sBAAsBC,oBAAyD6e,IAA1CxV,KAAKvJ,OAAOC,WAAWA,WAAWu0C,MAChFjrC,KAAKvJ,OAAOC,WAAWA,WAAWgwB,SAAqD,KAA1C1mB,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAAe/zC,EAAgB8I,KAAKvJ,QACvH,OAAOwL,EAAOrF,UAAUguC,aAAa9tC,KAAKkD,KAAMvB,EAAMmd,GAGjDnkB,oBAAkBmkB,EAAWhc,cAAsD,gBAAtCgc,EAAWhc,YAAYmI,aACrE6T,EAAWhc,YAAc,WAG7B,IAAK,IADDqI,EAAOhG,EAAOrF,UAAUguC,aAAa9tC,KAAKkD,KAAMvB,EAAMmd,GACjDja,EAAI,EAAGA,EAAIsG,EAAK3Q,OAAQqK,IAC7BsG,EAAKtG,GAAG1H,MAAS+F,KAAe,WAAExB,QAAQyJ,EAAKtG,GAAGlD,MAEtD,OAAOwJ,GAGfqiC,EAA6B1tC,UAAUsuC,mBAAqB,SAAU7vC,GAClE,IAAI8vC,GAAS,SAAU,UAAW,UAAW,YAAa,YAAa,UACnE,OAAQ,UAAU9iB,KAAK,SAAUruB,GAAS,OAAOqB,IAAWrB,IAChE,GAAKgG,KAAKvJ,OAAOC,sBAAsBC,oBAAyD6e,IAA1CxV,KAAKvJ,OAAOC,WAAWA,WAAWu0C,MAChFjrC,KAAKvJ,OAAOC,WAAWA,WAAWgwB,SAAqD,KAA1C1mB,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAAe/zC,EAAgB8I,KAAKvJ,QAAS,CAChI,IACI0lB,EAAcnc,KAAU,MAAEmc,YAC1BgvB,GACAnrC,KAAKorC,SACLprC,KAAKvB,QACLuB,KAAKqrC,WAEW,kBAAXhwC,GAA8B2E,KAAKorC,MAAMjvB,IAC9Cnc,KAAKorC,MAAMjvB,GAAa7kB,OAAU0I,KAAKvJ,OAAoB,cAAE60C,uBACtDtrC,KAAKorC,MAAMjvB,QAIlBgvB,GAAoB,kBAAX9vC,KACT2E,KAAKorC,SACLprC,KAAKvB,QACLuB,KAAKqrC,WAGb,OAAOF,GAEJb,GACTiB,4BC3FEC,GAAwB,WAMxB,SAASA,EAAO/0C,GACZmM,OAAKC,OAAO4oC,UACZzrC,KAAKvJ,OAASA,EACduJ,KAAK0rC,mBAAoB,EACzB1rC,KAAKqO,kBACLrO,KAAK2rC,oBACL3rC,KAAK4rC,sBACL5rC,KAAKqK,mBAoNT,OA5MAmhC,EAAO5uC,UAAUmG,cAAgB,WAC7B,MAAO,UAQXyoC,EAAO5uC,UAAUmN,QAAU,WACvB/J,KAAK2K,uBAMT6gC,EAAO5uC,UAAUyN,iBAAmB,WAChCrK,KAAKvJ,OAAO6T,GAAG,mBAAoBtK,KAAK6rC,sBAAuB7rC,MAC/DA,KAAKvJ,OAAO6T,GAAG,eAAgBtK,KAAK8rC,iBAAkB9rC,OAM1DwrC,EAAO5uC,UAAU+N,oBAAsB,WAC/B3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,mBAAoB7K,KAAK6rC,uBACzC7rC,KAAKvJ,OAAOoU,IAAI,eAAgB7K,KAAK8rC,oBAUzCN,EAAO5uC,UAAUivC,sBAAwB,SAAUE,GAC/CtzB,WAAS,8BAAgCzY,KAAKvJ,QAC9CuJ,KAAK2rC,iBAAmBI,EAAYttC,KACpCuB,KAAK4rC,sBACL5rC,KAAKqO,kBACLrO,KAAK0rC,mBAAoB,EACzB,IAAK,IAAI1L,EAAI,EAAGA,EAAIhgC,KAAK2rC,iBAAiBr0C,OAAQ0oC,IAAK,CACnD,IAAIlxB,EAAM9O,KAAK2rC,iBAAiB3L,GAChChgC,KAAKgsC,gBAAgBl9B,GACrB,IAAIjX,EAAwD,KAAxCmI,KAAKvJ,OAAOiB,KAAKC,eAAeC,IAAaoI,KAAKvJ,OAAOsB,eAAeF,cACtFmI,KAAKvJ,OAAOkB,eAAeE,cACT,UAAlBA,GAA+C,SAAlBA,GACqB,IAAnDmI,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxC0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,MACzFoI,KAAK0rC,mBAAoB,GAE7B,IAAIO,EAAU3zC,YAAU,eAAgBwW,IACnCrX,oBAAkBw0C,IAAYA,EAAQ30C,QACvCmhB,WAAS,0BAA2BzY,KAAKksC,iBAAiBp9B,GAAMA,GAEpE,IAAIq9B,EAAW7zC,YAAU,aAAcwW,GACvC,IAAKrX,oBAAkB00C,GAAW,CAC9B,IAAIC,EAAYtzC,EAAckH,KAAKvJ,OAAQqY,EAAIjW,WAAWE,UAAU,GAGpE0f,WAAS,2BAA2B,EAAM2zB,GACtCA,GAAaA,EAAUvzC,YACvBmH,KAAKqsC,2BAA2BD,IAIxCpsC,KAAK2rC,iBAAiBr0C,OAAS,GAAK0I,KAAK0rC,mBACzC1rC,KAAKssC,oBAETtsC,KAAKvJ,OAAO0d,OAAO,gBAAkBiB,OAAQpV,KAAKqO,kBAEtDm9B,EAAO5uC,UAAUyvC,2BAA6B,SAAU5zC,GACpD,IAAI2zC,EAAYtzC,EAAckH,KAAKvJ,OAAQgC,EAAOI,WAAWE,UAAU,GACnEwzC,EAAgBluC,WAAS,2BAA4B2B,KAAKvJ,QAC1D21C,GAAah0C,OAAOwE,UAAUC,eAAeC,KAAKyvC,EAAeH,EAAUrzC,WAC3E0f,WAAS,2BAA2B,EAAM2zB,GAE1CA,GAAaA,EAAUvzC,YACvBmH,KAAKqsC,2BAA2BD,IAGxCZ,EAAO5uC,UAAUovC,gBAAkB,SAAUvzC,GACzC,IAAIhC,EAASqC,EAAckH,KAAKvJ,OAAQgC,EAAO6F,gBAI/C,GAAsB,UAFsC,KAAxC0B,KAAKvJ,OAAOiB,KAAKC,eAAeC,IAAaoI,KAAKvJ,OAAOsB,eAAeF,cACtFmI,KAAKvJ,OAAOkB,eAAeE,gBACmD,IAAnDmI,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1B,KAAxC0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,IA2BlC,CACD,IAAKH,oBAAkBhB,GAAS,CAGJ,WAFsC,KAAxCuJ,KAAKvJ,OAAOiB,KAAKC,eAAeC,IAClDoI,KAAKvJ,OAAOsB,eAAeF,cAAgBmI,KAAKvJ,OAAOkB,eAAeE,gBACa,IAAnDmI,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC7B,KAAxC0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,MAMR,IAAvBnB,EAAiB,WAAoE,IAArDuJ,KAAKvJ,OAAOqgC,oBAAoBt4B,QAAQ/F,IAAkBhB,oBAAkBuI,KAAKvJ,OAAoB,YAAU,SAC/IuJ,KAAKvJ,OAAO8iC,UAAUv5B,KAAKvJ,OAAOoI,UAAUpI,EAAc,OAAIA,GAElEuJ,KAAKgsC,gBAAgBv1C,KAR0B,IAA3CuJ,KAAK2rC,iBAAiBntC,QAAQ/H,IAC9BuJ,KAAKgsC,gBAAgBv1C,IAUY,IAAzCuJ,KAAKqO,eAAe7P,QAAQ/F,KAC5BuH,KAAKqO,eAAe9V,KAAKE,GACzBggB,WAAS,4BAA8BhgB,EAAOM,SAAUN,EAAQuH,KAAKvJ,cA7CzE,GAAIgB,oBAAkBhB,IAClB,IAA+C,IAA3CuJ,KAAK2rC,iBAAiBntC,QAAQ/F,GAM9B,aAL6C,IAAzCuH,KAAKqO,eAAe7P,QAAQ/F,KAC5BuH,KAAKqO,eAAe9V,KAAKE,GACzBggB,WAAS,4BAA8BhgB,EAAOM,SAAUN,EAAQuH,KAAKvJ,QACrEgC,EAAO+a,yBAA0B,SAMzCxT,KAAKgsC,gBAAgBv1C,IAC0B,IAA3CuJ,KAAK2rC,iBAAiBntC,QAAQ/H,KAA2D,IAAzCuJ,KAAKqO,eAAe7P,QAAQ/H,IAC/B,IAAzCuJ,KAAKqO,eAAe7P,QAAQ/F,KAC5BuH,KAAKqO,eAAe9V,KAAKE,GACzBggB,WAAS,4BAA8BhgB,EAAOM,SAAUN,EAAQuH,KAAKvJ,UAI5B,IAAzCuJ,KAAKqO,eAAe7P,QAAQ/F,KAA6D,IAA3CuH,KAAK2rC,iBAAiBntC,QAAQ/F,KAC5EuH,KAAKqO,eAAe9V,KAAKE,GACzBggB,WAAS,4BAA8BhgB,EAAOM,SAAUN,EAAQuH,KAAKvJ,UA4BzF+0C,EAAO5uC,UAAUsvC,iBAAmB,SAAUj0C,GAG1C,IAAK,IAFDu0C,EAAWl0C,YAAU,eAAgBL,GACrCw0C,GAAU,EACLl+B,EAAQ,EAAGA,EAAQi+B,EAASl1C,OAAQiX,IAAS,CAClD,IAAI09B,EAAUO,EAASj+B,GAAOlV,aAC1BxB,EAAwD,KAAxCmI,KAAKvJ,OAAOiB,KAAKC,eAAeC,IAChDoI,KAAKvJ,OAAOsB,eAAeF,cAAgBmI,KAAKvJ,OAAOkB,eAAeE,cAC1E,KAAwB,UAAlBA,GAA+C,SAAlBA,GAAiF,IAAnDmI,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAC1D,KAAxC0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,KAAc,CACjD,IAAI20C,EAAgBluC,WAAS,2BAA4B2B,KAAKvJ,QACzD2B,OAAOwE,UAAUC,eAAeC,KAAKyvC,EAAeC,EAASj+B,GAAOxV,YACrEiH,KAAKqO,eAAe9V,KAAKi0C,EAASj+B,IAClCkK,WAAS,4BAA8B+zB,EAASj+B,GAAOxV,SAAUyzC,EAASj+B,GAAQvO,KAAKvJ,QACvFg2C,GAAU,GAGlB,GAAuB,SAAlB50C,IACsD,IAAnDmI,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,QAAwD,KAAxC0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,OACpC,IAApDoI,KAAK2rC,iBAAiBntC,QAAQguC,EAASj+B,IAAgB,CACvDk+B,GAAU,EACV,OAGHh1C,oBAAkBw0C,IAAYA,EAAQ30C,SACvCm1C,EAAUzsC,KAAKksC,iBAAiBM,EAASj+B,KAEtB,UAAlB1W,GAA+C,SAAlBA,IAA6B20C,EAASl1C,SACpEm1C,GAAU,GAGlB,OAAOA,GAEXjB,EAAO5uC,UAAU0vC,kBAAoB,WAGjC,IAAK,IAFD7zC,EAASuH,KAAKqO,eACdlW,EAAM6H,KAAKqO,eAAe/W,OACrBmK,EAAI,EAAGA,EAAItJ,EAAKsJ,IAAK,CAC1B,IAAIirC,EAAW5zC,EAAckH,KAAKvJ,OAAQgC,EAAOgJ,GAAGnD,gBAEpD,IAD2C,IAA9B7F,EAAO+F,QAAQkuC,GAChB,CACR,IAAIC,EAAW7zC,EAAckH,KAAKvJ,OAAQgC,EAAOgJ,GAAGnD,gBAAgB,GACpE7F,EAAOgJ,GAAGoR,YAAc85B,EAAS95B,YAAc,OAG/Cpa,EAAOgJ,GAAGoR,YAAc,EACxB7S,KAAK4rC,mBAAmBrzC,KAAKE,EAAOgJ,MAIhD+pC,EAAO5uC,UAAUkvC,iBAAmB,SAAUrtC,GAK1C,IAJA,IAGIsQ,EAHAR,EAAQ,EACRhR,EAAWkB,EAAKlB,SAChBpF,EAAMoF,EAASjG,OAEPiX,EAAQpW,EAAKoW,IAAS,CAE9B,IAAIq+B,GADJ79B,EAAgBxR,EAASgR,IACEsE,aACvB+5B,GAAqB,IAAXA,GAAiBn1C,oBAAkBsX,EAAcyE,2BAC3DzE,EAAcyE,wBAA0B,KACxCzE,EAAc8D,YAAc,MAGpC7S,KAAKqO,kBACLrO,KAAKvJ,OAAO0d,OAAO,iBAAmBiB,OAAQ7X,EAAUgR,MAAOhR,EAASjG,UAErEk0C,KC/NPqB,GAA6B,WAM7B,SAASA,EAAYp2C,GACjBuJ,KAAKye,yBAA0B,EAC/B7b,OAAKC,OAAOiqC,eACZ9sC,KAAKvJ,OAASA,EACduJ,KAAK+W,eACL/W,KAAKqK,mBAoLT,OA5KAwiC,EAAYjwC,UAAUmG,cAAgB,WAClC,MAAO,eAMX8pC,EAAYjwC,UAAUyN,iBAAmB,WACrCrK,KAAKvJ,OAAO6T,GAAG,gBAAiBtK,KAAK+sC,uBAAwB/sC,MAC7DA,KAAKvJ,OAAO6T,GAAG,gBAAiBtK,KAAKosB,mBAAoBpsB,MACzDA,KAAKvJ,OAAOiB,KAAK4S,GAAG,sBAAuBtK,KAAKgtC,mBAAoBhtC,MACpEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,iBAAkBtK,KAAKitC,eAAgBjtC,OAQ/D6sC,EAAYjwC,UAAUmN,QAAU,WAC5B/J,KAAK2K,uBAMTkiC,EAAYjwC,UAAU+N,oBAAsB,WACpC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,gBAAiB7K,KAAK+sC,wBACtC/sC,KAAKvJ,OAAOoU,IAAI,gBAAiB7K,KAAKosB,oBACtCpsB,KAAKvJ,OAAOiB,KAAKmT,IAAI,sBAAuB7K,KAAKgtC,oBACjDhtC,KAAKvJ,OAAOiB,KAAKmT,IAAI,iBAAkB7K,KAAKitC,kBAEhDJ,EAAYjwC,UAAUmwC,uBAAyB,SAAU/P,GACrDh9B,KAAK+W,YAAcimB,GAEvB6P,EAAYjwC,UAAU0lB,IAAM,SAAUL,EAEtCC,EAAkBC,EAAUC,EAAQ8qB,GAChC,IAAI3lC,EAAQvH,KACRtJ,EAAasJ,KAAKvJ,OAAOC,WACzB0pB,EAAWhoB,SAMf,OALAqgB,WAAS,QAASy0B,EAAO9sB,GACzB3H,WAAS,UAAU,EAAO2H,GACrB3oB,oBAAkBwqB,KACnBjiB,KAAKye,wBAA0BwD,EAAsBxD,yBAElD,IAAI0uB,QAAQ,SAAUle,GACzB,IAAIz1B,GAAK+N,EAAM6lC,WAAe12C,aAAsBC,cAC9C4Q,EAAM9Q,OAAOC,WADgD,IAAIC,cAAYD,GAE/E8gB,EAAQ,IAAIC,QAMhB,GALKlQ,EAAM6lC,YACP51B,EAAQjQ,EAAMmT,cAAclD,GAC5BiB,WAAS,QAASjB,EAAO4I,IAE7B7Y,EAAM9Q,OAAO2S,QAAQikC,EAAyBlxC,SAAOikB,EAAU6B,IAC3D3pB,YAAU,SAAU8nB,GACpB,OAAO,KAEX5mB,EAAG2e,aAAaX,GAAOY,KAAK,SAAU3a,GAClC,IAAI6vC,EAAa,KAKjB,OAJK71C,oBAAkBwqB,IAA2BxqB,oBAAkBwqB,EAAsBvrB,cACtF42C,EAAarrB,EAAsBvrB,YAEvCurB,EAAwB1a,EAAMgmC,2BAA2BtrB,EAAuBvrB,EAAY+G,GACrF8J,EAAM9Q,OAAOiB,KAAK2qB,kBAAkBC,IAAI/a,EAAM9Q,OAAOiB,KAAMuqB,EAAuBC,EAAkBC,EAAU+qB,EAAO9qB,GAAQhK,KAAK,SAAUo1B,GAC7H,MAAdF,EACArrB,EAAsBvrB,WAAa42C,SAG5BrrB,EAAsBvrB,WAEjCu4B,EAAQue,UAKxBX,EAAYjwC,UAAU8d,cAAgB,SAAUlD,EAAO4I,GAQnD,OAPK3oB,oBAAkB2oB,IAAqC,gBAAxBA,EAASxD,YACtC5c,KAAKvJ,OAAO4b,cACf+N,EAASxD,WAAa,WACtBpF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAM7X,KAAKvJ,OAAOuG,gBAAiB,QAAS,MAClDwa,EAAQlf,YAAU,mCAAoC0H,KAAKvJ,OAAnD6B,CAA2Dkf,IAEhEA,GAEXq1B,EAAYjwC,UAAU2wC,2BAA6B,SAAUntB,EAAUqtB,EAAOC,GAE1E,IAAIxqC,EAAO9K,SAkBX,GAjBAqgB,WAAS,QAASzY,KAAKvJ,OAAOiB,KAAK+iB,gBAAgBC,eAAc,GAAOxX,GACxEuV,WAAS,YAAY,EAAMvV,GACtBzL,oBAAkB2oB,IAAc3oB,oBAAkB2oB,EAASxD,aAC5DnE,WAAS,aAAc2H,EAASxD,WAAY1Z,GAE3ClD,KAAKotC,YACNptC,KAAKvJ,OAAO6G,cACZ0C,KAAKvJ,OAAOqyB,WAAWvR,kBAAkBjf,YAAU,SAAUo1C,IAC7Dj1B,WAAS,aAAczY,KAAKvJ,OAAO8G,SAAU2F,IAEjDlD,KAAKvJ,OAAO0d,OAAO,gBAAiBjR,GAEpCA,EAAOlD,KAAK+W,YACZ02B,EAAQh2C,oBAAkByL,EAAKkS,QAAUpV,KAAKvJ,OAAO8G,SAASkL,MAAM,GAAKvF,EAAKkS,OACzEpV,KAAKotC,YACNptC,KAAKvJ,OAAO8G,aAEZ6iB,GAAYA,EAAS1pB,YAAcsJ,KAAKotC,UAAW,CACnD,IAAIO,EAAY3tC,KAAKvJ,OAAO8G,SACxBqwC,EAAUxtB,EAAS1pB,sBAAsBC,cAAcypB,EAAS1pB,WAAWA,WAAW8E,KAAO4kB,EAAS1pB,WAC1GsJ,KAAKvJ,OAAOqyB,WAAWvR,kBAAkBq2B,GACzCH,EAAQztC,KAAKvJ,OAAO8G,SACpByC,KAAKvJ,OAAO8G,SAAWowC,EAI3B,OAFAvtB,EAAW3oB,oBAAkB2oB,GAAYhoB,SAAWgoB,EACpDA,EAAS1pB,WAAa,IAAIC,eAAc6E,KAAMiyC,IACvCrtB,GASXysB,EAAYjwC,UAAUwvB,mBAAqB,SAAUlpB,GACjD,GAAIlD,KAAKvJ,OAAOiB,KAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,OAASX,KAAKvJ,OAAO2I,gBAAiB,CACvF,IAAI7E,KACAkE,EAAOyE,EAAKzE,KAEZmU,EADcnb,oBAAkBgH,EAAKoU,aACjBpU,EAAKvE,MAAQuE,EAAKoU,YAC1CtY,EAAMob,OAAS/C,EACf1P,EAAK3I,MAAQA,EAEjByF,KAAKvJ,OAAO0d,OAAO,gBAAiBjR,GACpClD,KAAKvJ,OAAO2S,QAAQ,qBAAsBlG,IAE9C2pC,EAAYjwC,UAAUowC,mBAAqB,SAAUa,GACjD,GAAsB,UAAlBA,EAAS1qC,KAAkB,CAC3B,IAAI2qC,EAAcD,EAASE,OAAOtvC,KAC9BuvC,EAAqBhuC,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAC7D22C,EAAYJ,EAASK,UAAU52C,OAC/B62C,EAAWL,EAAY5zC,MAC3B,GAAI4zC,EAAYj1C,YAAcC,EAAckH,KAAKvJ,OAAQq3C,EAAYj1C,WAAWE,SAAUq1C,QAAQJ,IAAsB,CACpH,IAAIK,GAAiB,EACjBC,GAAgB,EAChBhU,EAAQ9hC,EAAgBwH,KAAKvJ,OAAQq3C,EAAa9tC,KAAKvJ,OAAO6G,aAC9D0C,KAAKye,yBAA6B6b,GAAUt6B,KAAKvJ,OAAO0mB,cACxDkxB,GAAiB,EACjBC,GAAgBR,EAAY50C,UAEhC20C,EAASK,UAAUD,EAAY,GAAGM,UAAaC,aAAcL,EAAUM,YAAaH,EAChFj0C,SAAUg0C,QAETP,EAAY10C,iBAAmB3B,oBAAkBq2C,EAAYj1C,cAClEg1C,EAASK,UAAUD,EAAY,GAAGM,UAAaC,aAAcL,MAKzEtB,EAAYjwC,UAAUqwC,eAAiB,SAAU9qB,GAC7C,IAAK,IAAI/qB,EAAI,EAAGA,EAAI+qB,EAASusB,WAAWp3C,OAAQF,IACxC+qB,EAASusB,WAAWt3C,GAAG6Q,OACvBka,EAASusB,WAAWt3C,GAAGu3C,WAAcC,mBAAmB,KAIpE/B,EAAYjwC,UAAUwwC,QAAU,WAC5B,OAAQ52C,EAAawJ,KAAKvJ,SAAW8C,EAAUyG,KAAKvJ,SAEjDo2C,KC/LPgC,GAA2B,WAM3B,SAASA,EAAUp4C,GACfmM,OAAKC,OAAOisC,aACZ9uC,KAAKvJ,OAASA,EACduJ,KAAK+W,eACL/W,KAAKqK,mBA+IT,OAvIAwkC,EAAUjyC,UAAUmG,cAAgB,WAChC,MAAO,aAMX8rC,EAAUjyC,UAAUyN,iBAAmB,WACnCrK,KAAKvJ,OAAO6T,GAAG,cAAetK,KAAKqsB,iBAAkBrsB,MACrDA,KAAKvJ,OAAO6T,GAAG,gBAAiBtK,KAAK+uC,qBAAsB/uC,OAM/D6uC,EAAUjyC,UAAU+N,oBAAsB,WAClC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,cAAe7K,KAAKqsB,kBACpCrsB,KAAKvJ,OAAOoU,IAAI,gBAAiB7K,KAAK+uC,wBAQ1CF,EAAUjyC,UAAUmN,QAAU,WAC1B/J,KAAK2K,uBAETkkC,EAAUjyC,UAAUmyC,qBAAuB,SAAU/R,GACjDh9B,KAAK+W,YAAcimB,GAEvB6R,EAAUjyC,UAAU0lB,IAAM,SAAUG,EAAqBP,EAAkBQ,EAAQN,GAC/E,IAAI7a,EAAQvH,KACRytC,EAAQztC,KAAKvJ,OAAOC,WACpB6pB,EAAOnoB,SACPg1C,GAAW52C,EAAawJ,KAAKvJ,SAAW8C,EAAUyG,KAAKvJ,QAE3D,OADAgiB,WAAS,UAAU,EAAO8H,GACnB,IAAI4sB,QAAQ,SAAUle,GACzB,IAAIz1B,GAAK4zC,GAAaK,aAAiB92C,cACjC4Q,EAAM9Q,OAAOC,WADmC,IAAIC,cAAY82C,GAElEj2B,EAAQ,IAAIC,QAMhB,GALK21B,IACD51B,EAAQjQ,EAAMmT,cAAclD,GAC5BiB,WAAS,QAASjB,EAAO+I,IAE7BhZ,EAAM9Q,OAAO2S,QAAQ4lC,EAAuB7yC,SAAOokB,EAAMkC,IACrDnqB,YAAU,SAAUioB,GACpB,OAAO,KAEX/mB,EAAG2e,aAAaX,GAAOY,KAAK,SAAU3a,GAClC,IAAIwxC,EAAc,KAKlB,OAJKx3C,oBAAkBgrB,IAAyBhrB,oBAAkBgrB,EAAoB/rB,cAClFu4C,EAAcxsB,EAAoB/rB,YAEtC+rB,EAAsBlb,EAAM2nC,wBAAwBzsB,EAAqBgrB,EAAOhwC,GACzE8J,EAAM9Q,OAAOiB,KAAKirB,gBAAgBL,IAAI/a,EAAM9Q,OAAOiB,KAAM+qB,EAAqBP,EAAkBQ,EAAQN,GAAQhK,KAAK,SAAUwc,GAC/G,MAAfqa,EACAxsB,EAAoB/rB,WAAau4C,SAG1BxsB,EAAoB/rB,WAE/Bu4B,EAAQ2F,UAKxBia,EAAUjyC,UAAU8d,cAAgB,SAAUlD,EAAO+I,GAQjD,OAPK9oB,oBAAkB8oB,IAA6B,gBAApBA,EAAK3D,YAC9B5c,KAAKvJ,OAAO4b,cACfkO,EAAK3D,WAAa,WAClBpF,EAAMM,UAAU,aAAc,eAC9BN,EAAMK,MAAM7X,KAAKvJ,OAAOuG,gBAAiB,QAAS,MAClDwa,EAAQlf,YAAU,mCAAoC0H,KAAKvJ,OAAnD6B,CAA2Dkf,IAEhEA,GAEXq3B,EAAUjyC,UAAUsyC,wBAA0B,SAAU3uB,EAAMktB,EAAOC,GACjE,IAAIxqC,KAEAkqC,GAAW52C,EAAawJ,KAAKvJ,SAAW8C,EAAUyG,KAAKvJ,QAsB3D,GArBAgiB,WAAS,QAASzY,KAAKvJ,OAAOiB,KAAK+iB,gBAAgBC,eAAc,GAAOxX,GACxEuV,WAAS,YAAY,EAAMvV,GAC3BuV,WAAS,eAAe,EAAMvV,GACzBzL,oBAAkB8oB,IAAU9oB,oBAAkB8oB,EAAK9B,0BACpDhG,WAAS,0BAA2B8H,EAAK9B,wBAAyBvb,GAEjEzL,oBAAkB8oB,IAAU9oB,oBAAkB8oB,EAAK3D,aACpDnE,WAAS,aAAc8H,EAAK3D,WAAY1Z,GAEvCkqC,IACDptC,KAAKvJ,OAAO6G,cACZ0C,KAAKvJ,OAAOqyB,WAAWvR,kBAAkBlZ,WAAS,SAAUqvC,IAC5Dj1B,WAAS,aAAczY,KAAKvJ,OAAO8G,SAAU2F,IAEjDlD,KAAKvJ,OAAO0d,OAAO,gBAAiBjR,GAEpCA,EAAOlD,KAAK+W,YACZ02B,EAAQh2C,oBAAkByL,EAAKkS,QAAUpV,KAAKvJ,OAAO8G,SAASkL,MAAM,GAAKvF,EAAKkS,OACzEg4B,IACDptC,KAAKvJ,OAAO8G,aAEZgjB,GAAQA,EAAK7pB,YAAc02C,EAAS,CACpC,IAAI+B,EAAYnvC,KAAKvJ,OAAO8G,SACxBqwC,EAAUrtB,EAAK7pB,sBAAsBC,cAAc4pB,EAAK7pB,WAAWA,WAAW8E,KAAO+kB,EAAK7pB,WAC9FsJ,KAAKvJ,OAAOqyB,WAAWvR,kBAAkBq2B,GACzCH,EAAQztC,KAAKvJ,OAAO8G,SACpByC,KAAKvJ,OAAO8G,SAAW4xC,EAI3B,OAFA5uB,EAAO9oB,oBAAkB8oB,MAAaA,EACtCA,EAAK7pB,WAAa,IAAIC,eAAc6E,KAAMiyC,IACnCltB,GASXsuB,EAAUjyC,UAAUyvB,iBAAmB,SAAUnpB,GAC7C,GAAIlD,KAAKvJ,OAAOiB,KAAKyb,oBAAoBjQ,EAAKxD,OAAOiB,OAASX,KAAKvJ,OAAO2I,gBAAiB,CACvF,IAAI7E,KACAkE,EAAOnG,YAAU,OAAQ4K,GAEzB0P,EADcnb,oBAAkBgH,EAAKoU,aACjBpU,EAAKvE,MAAQuE,EAAKoU,YAC1CtY,EAAM60C,gBAAwB,EAANx8B,EACxB1P,EAAK3I,MAAQA,EAEjByF,KAAKvJ,OAAO0d,OAAO,gBAAiBjR,GACpClD,KAAKvJ,OAAO2S,QAAQ,mBAAoBlG,IAErC2rC,KCxJPQ,GAAsB,WACtB,SAASA,EAAK54C,GACVmM,OAAKC,OAAOysC,QACZtvC,KAAKvJ,OAASA,EACduJ,KAAKqK,mBA+LT,OAzLAglC,EAAKzyC,UAAUyN,iBAAmB,WAC9BrK,KAAKvJ,OAAO6T,GAAGoxB,EAAiC17B,KAAKuvC,0BAA2BvvC,MAChFA,KAAKvJ,OAAO6T,GAAGkU,EAAsBxe,KAAKwvC,WAAYxvC,OAM1DqvC,EAAKzyC,UAAU+N,oBAAsB,WAC7B3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI6wB,EAAiC17B,KAAKuvC,2BACtDvvC,KAAKvJ,OAAOoU,IAAI2T,EAAsBxe,KAAKwvC,cAQ/CH,EAAKzyC,UAAUmG,cAAgB,WAC3B,MAAO,SAOXssC,EAAKzyC,UAAU00B,QAAU,WACrBtxB,KAAKvJ,OAAOiB,KAAK2/B,YAAY/F,WAQjC+d,EAAKzyC,UAAUmN,QAAU,WACrB/J,KAAK2K,uBAQT0kC,EAAKzyC,UAAUu6B,SAAW,SAAUC,GAChCp3B,KAAKvJ,OAAOiB,KAAK2/B,YAAYF,SAASC,IAQ1CiY,EAAKzyC,UAAU06B,sBAAwB,SAAU7zB,GAC7CzD,KAAKvJ,OAAOiB,KAAK2/B,YAAYC,sBAAsB7zB,IAWvD4rC,EAAKzyC,UAAU2yC,0BAA4B,SAAUz1B,GAEjD,GADAA,EAAWrhB,OAAOS,SAAiC,aAAtB4gB,EAAWze,OACpC2E,KAAKvJ,OAAOkH,oBAAqB,CACjC,IAAI8xC,EAAoBzvC,KAAKvJ,OAAO6E,0BAA0B,GAC1D7C,EAASuH,KAAKvJ,OAAO8G,SAASC,OAAO,SAAUC,GAC/C,OAAOA,EAAEgyC,KAAuB31B,EAAWrhB,OAAOg3C,KAElDh3C,EAAOnB,SACPmB,EAAO,GAAGS,SAAW4gB,EAAWrhB,OAAOS,UAG/C,IAAIw2C,GACAt6B,OAAQpV,KAAKvJ,OAAO8G,SACpBoB,IAAKmb,EAAWnb,IAChBtD,OAAQye,EAAWze,OACnB5C,OAAQqhB,EAAWrhB,OACnB8V,MAAOvO,KAAKvJ,OAAO8G,SAASjG,QAGhC,GADA+G,WAAS,oBAAqB2B,KAAKvJ,QAAQkiB,mBAAmB+2B,GAC1D1vC,KAAKvJ,OAAOkH,oBAAqB,CACjC,IAEIwc,OAAY,EACI,aAAhBu1B,EAAU,QACVv1B,EAAYu1B,EAAO,IAAEt+B,uBAAuB,oBAAoB,GAC3D3Z,oBAAkB0iB,KACnB5M,eAAa4M,GAAY,oBACzBjJ,YAAUiJ,GAAY,wBAGL,WAAhBu1B,EAAU,SACfv1B,EAAYu1B,EAAO,IAAEt+B,uBAAuB,sBAAsB,GAC7D3Z,oBAAkB0iB,KACnB5M,eAAa4M,GAAY,sBACzBjJ,YAAUiJ,GAAY,wBAKtCk1B,EAAKzyC,UAAU+yC,SAAW,SAAUC,EAAcxxB,EAAMhJ,GAapD,IAAK,IAZDy6B,EAAap4C,oBAAkB2d,MAAeA,EAC9CzY,EAAU,SAAUmzC,GACpBD,EAAWt3C,KAAK6lB,EAAK0xB,IACrB,IAAIC,KACA3xB,EAAK0xB,GAAG12C,kBACR22C,EAAMH,EAAapyC,OAAO,SAAUC,GAChC,OAAO2gB,EAAK0xB,GAAG/2C,WAAa0E,EAAEa,iBAElCuxC,EAAa9U,EAAO4U,SAASC,EAAcG,EAAKF,KAGpD9U,EAAS/6B,KACJ8vC,EAAI,EAAGA,EAAI1xB,EAAK9mB,OAAQw4C,IAC7BnzC,EAAQmzC,GAEZ,OAAOD,GAEXR,EAAKzyC,UAAUozC,eAAiB,SAAUC,GACtC,IAAIC,EAAaD,EAAe76B,OAAO9d,OACnC64C,EAAkBnwC,KAAKvJ,OAAOiB,KAAK2/B,aACI,IAAvCr3B,KAAKvJ,OAAO6b,aAAa89B,WACrBD,EAAgBE,SAASC,oBAAwC,mBAAEt2C,QAAUm2C,EAAgBE,SAASE,kBAAkB,SACxHJ,EAA0B,SAAE10B,kBAAoBy0B,EAChDlwC,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,SAAWN,IAIrDb,EAAKzyC,UAAU4yC,WAAa,SAAUS,GAClC,IAAI1oC,EAAQvH,KACRxG,EAAK,IAAI7C,cAAYs5C,EAAe76B,QACxC,GAA8C,SAA1CpV,KAAKvJ,OAAO6b,aAAaC,aAAyB,CAClD,IAAI6L,KACAqyB,EAAYzwC,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,IACf,UAA7C0I,KAAKvJ,OAAOsB,eAAeF,eAA0E,SAA7CmI,KAAKvJ,OAAOsB,eAAeF,eACpF,cAAgB,QAChB2f,GAAQ,IAAIC,SAAQI,MAAM44B,EAAU,QAAS,GACjDryB,EAAO5kB,EAAGyf,aAAazB,GACvBy4B,EAAe1hC,MAAQ6P,EAAK9mB,OAC5B,IAEIo5C,GAFAC,EAAO3wC,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,YACrCjvB,EAAUvhB,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,aACf,GAC7B3E,EAAQA,EAAMk5B,KAAKA,GAAME,KAAKD,GAC9BvyB,EAAO5kB,EAAGyf,aAAazB,GACvB,IAAIq4B,EAAa7vC,KAAK2vC,SAASM,EAAe76B,OAAQgJ,GACtD6xB,EAAe76B,OAASy6B,MAEvB,CACD,IAAIgB,EAAO,IAAIl6C,cAAYs5C,EAAe76B,QACtClc,EAAW,IAAI8I,YAAU,WAAY,WAAY,MAAM8uC,GAAG,WAAY,gBAAYt7B,GAClFu7B,EAAYF,EAAK53B,cAAa,IAAIxB,SAAQI,MAAM3e,IAChDuxC,OAAa,EAMbA,GALAjzC,EAAuBwI,KAAKvJ,SAAauJ,KAAKvJ,OAAOkB,eAAeC,MAAQoI,KAAKvJ,OAAOiB,KAAKC,eAAeC,KAC3GoI,KAAKvJ,OAAOsB,eAAeV,QAAQC,SAAW0I,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAI1Ey5C,EAAUvzC,OAAO,SAAUC,GACpC,OAAOjF,EAAgB+O,EAAM9Q,OAAQgH,EAAGszC,KAJ/BA,EAOjBd,EAAe1hC,MAAQk8B,EAAWnzC,OAC9BkgB,EAAQ,IAAIC,QAAhB,IACIk5B,EAAO3wC,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,SACzCxwC,KAAKgwC,eAAeC,GACpB,IAAI1uB,EAAUvhB,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,YACxCsuB,EAAWnzC,OAAUiqB,EAAUovB,IAE/BpvB,GADAA,EAAW5H,KAAKq3B,MAAMvG,EAAWnzC,OAASq5C,IAAWlG,EAAWnzC,OAASq5C,EAAQ,EAAI,KACvD,EAC9B3wC,KAAKvJ,OAAOiB,KAAK+I,eAAgB6R,cAAgB6J,YAAaoF,KAAa,IAE3EmvB,EAAOC,GAAQpvB,EAAU,GAC7B/J,EAAQA,EAAMk5B,KAAKA,GAAME,KAAKD,GAC9BE,EAAKn6C,WAAW8E,KAAOivC,EACvBwF,EAAe76B,OAASy7B,EAAK53B,aAAazB,GAE9CxX,KAAKvJ,OAAO0d,OAAO,eAAgB87B,IAEhCZ,KCtMP4B,GAAyB,WACzB,SAASA,EAAQx6C,GACbmM,OAAKC,OAAOquC,WACZlxC,KAAKvJ,OAASA,EACduJ,KAAKqK,mBAwIT,OAhIA4mC,EAAQr0C,UAAUmG,cAAgB,WAC9B,MAAO,WAMXkuC,EAAQr0C,UAAUyN,iBAAmB,WACjCrK,KAAKvJ,OAAO6T,GAAG2hB,EAAoBjsB,KAAKmxC,eAAgBnxC,MACxDA,KAAKvJ,OAAO6T,GAAG4hB,EAAsBlsB,KAAKmxC,eAAgBnxC,MAC1DA,KAAKvJ,OAAO6T,GAAG6kB,EAAqBnvB,KAAKoxC,oBAAqBpxC,OAMlEixC,EAAQr0C,UAAU+N,oBAAsB,WAChC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAIohB,EAAoBjsB,KAAKmxC,gBACzCnxC,KAAKvJ,OAAOoU,IAAIqhB,EAAsBlsB,KAAKmxC,gBAC3CnxC,KAAKvJ,OAAOoU,IAAIskB,EAAqBnvB,KAAKoxC,uBAE9CH,EAAQr0C,UAAUu0C,eAAiB,SAAUjuC,GACzC,IACI+mB,EACAC,EAFA8W,EAAOhhC,KAAKvJ,OAGZszB,EAAWiX,EAAK7vB,QAAQ8D,GAAK,sBAC7B+U,EAAYgX,EAAK7vB,QAAQ8D,GAAK,uBAC9B2U,EAAiB5pB,KAAKvJ,OAAOiB,KAAKmyB,cAAcC,aAChDunB,EAAYznB,EAAe3e,cAAc,IAAM8e,GAC/CunB,EAAa1nB,EAAe3e,cAAc,IAAM+e,GAChDrrB,EAAMuE,EAAKvE,IACX4yC,EAAcvQ,EAAKjD,kBAAkB,GAKzC,GAJKtmC,oBAAkBkH,EAAI,MACvBA,EAAMA,EAAI,IAEdA,EAAQlH,oBAAkB85C,IAAgBA,EAAY1nC,WAAalL,EAAIkL,SAA0BlL,EAAd4yC,EACjE,OAAdF,GAAqC,OAAfC,EAAqB,CAG3C,GAFArnB,EAAgBL,EAAe3e,cAAc,IAAM8e,GAAUzE,cAC7D4E,EAAiBN,EAAe3e,cAAc,IAAM+e,GAAW1E,cAC1C,IAAjB3mB,EAAIkL,UAAkBm3B,EAAK54B,wBAAwB9Q,OAAS,EAC5D2yB,EAAc1hB,UAAUsE,IAAI,YAC5Bqd,EAAe3hB,UAAUsE,IAAI,iBAE5B,GAAqB,kBAAjB3J,EAAW,OAA2BzL,oBAAkB85C,IAAgBvQ,EAAKtpC,KAAK85C,oBAAsB,CAC7G,IAAIhQ,EAAeR,EAAK9kC,wBAAwByC,EAAIkL,UAC/CpS,oBAAkB+pC,KACdA,EAAatnC,MAAQ8mC,EAAK9kC,wBAAwByC,EAAIkL,SAAW,GAAG3P,MACrE+vB,EAAc1hB,UAAUsE,IAAI,YAG5Bod,EAAc1hB,UAAUkgB,OAAO,YAE/B+Y,EAAatnC,QAAU8mC,EAAK9kC,wBAAwByC,EAAIkL,SAAW,GAAG3P,OACtE+vB,EAAc1hB,UAAUkgB,OAAO,YAER,IAAvB+Y,EAAatnC,OACbgwB,EAAe3hB,UAAUsE,IAAI,YAEN,IAAvB20B,EAAatnC,OACbgwB,EAAe3hB,UAAUkgB,OAAO,aAIvB,kBAAjBvlB,EAAW,MAAyBzL,oBAAkB85C,KAAiBvQ,EAAKtpC,KAAK85C,sBAC7ExxC,KAAKvJ,OAAO+wB,QAAkB,SAAE,WAChCyC,EAAc1hB,UAAUsE,IAAI,YAE5B7M,KAAKvJ,OAAO+wB,QAAkB,SAAE,YAChC0C,EAAe3hB,UAAUsE,IAAI,eAK7CokC,EAAQr0C,UAAUw0C,oBAAsB,SAAUluC,GAC9C,IAAI89B,EAAOhhC,KAAKvJ,OACZyqB,EAAsB,sBACY,SAAlClhB,KAAKvJ,OAAOmF,aAAaC,MAA0D,UAAvCmE,KAAKvJ,OAAOiB,KAAKkE,aAAaC,MAC1EqH,EAAKE,KAAK6R,KAAOjV,KAAKvJ,OAAOiB,KAAKyZ,QAAQ8D,GAAK,YAC/C/R,EAAKiG,QAAS,EACdnJ,KAAKvJ,OAAOiB,KAAKoE,WAAW85B,YAE5B1yB,EAAKE,KAAK6R,KAAOjV,KAAKvJ,OAAOiB,KAAKyZ,QAAQ8D,GAAK,cAC/CjV,KAAKvJ,OAAO0uB,YAEZjiB,EAAKE,KAAK6R,KAAOjV,KAAKvJ,OAAOiB,KAAKyZ,QAAQ8D,GAAK,gBAC/CjV,KAAKvJ,OAAO2uB,cAEZliB,EAAKE,KAAK6R,KAAO+rB,EAAKtpC,KAAKyZ,QAAQ8D,GAAK,WAAa+rB,EAAKp4B,qBAAqBtR,SAC3EG,oBAAkBupC,EAAK5B,uBAC3Bp/B,KAAKvJ,OAAO2oC,qBAAqBle,GAAqB,KAAM,UAE5Dhe,EAAKE,KAAK6R,KAAO+rB,EAAKtpC,KAAKyZ,QAAQ8D,GAAK,YAAc+rB,EAAKp4B,qBAAqBtR,SAC5EG,oBAAkBupC,EAAK5B,uBAC3Bp/B,KAAKvJ,OAAO2oC,qBAAqBle,GAAqB,KAAM,YASpE+vB,EAAQr0C,UAAUktB,WAAa,WAC3B,OAAO9pB,KAAKvJ,OAAOiB,KAAKmyB,cAAcC,cAU1CmnB,EAAQr0C,UAAUw5B,YAAc,SAAUhd,EAAO+c,GAC7Cn2B,KAAKvJ,OAAOiB,KAAKmyB,cAAcuM,YAAYhd,EAAO+c,IAQtD8a,EAAQr0C,UAAUmN,QAAU,WACxB/J,KAAK2K,uBAEFsmC,KC3IPQ,GAA2B,WAM3B,SAASA,EAAUh7C,GACfmM,OAAKC,OAAO6uC,aACZ1xC,KAAKvJ,OAASA,EACduJ,KAAK2xC,oBACL3xC,KAAKqb,gBAoOT,OA5NAo2B,EAAU70C,UAAUmG,cAAgB,WAChC,MAAO,WAEX0uC,EAAU70C,UAAU+N,oBAAsB,WAClC3K,KAAKvJ,OAAOmU,aAapB6mC,EAAU70C,UAAU4e,sBAAwB,SAAUH,EAAcqC,EAAck0B,GAC9E5xC,KAAKqb,aAAeA,EAIpB,IAAK,IAHDziB,EAEA0E,KACKI,EAAI,EAAGvF,EAFOC,OAAOC,KAAKqlB,GAAcpmB,OAEToG,EAAIvF,EAAKuF,IAAK,CACjCpF,YAAU,eAAgBolB,EAAahgB,KAEpDJ,EAAW/E,KAAKmlB,EAAahgB,IAGrC,IAII6rC,EAJAjtB,EAAgBtkB,EAAkBsF,GAClCu0C,EAAcv0C,EAAWmL,QACzBqpC,EAAgB15C,OAAOC,KAAK2H,KAAKvJ,OAAOykB,YAAY5jB,OACpDy6C,EAAa35C,OAAOC,KAAKikB,GAAehlB,OAExCD,EAAU2I,KAAKvJ,OAAOkJ,aAC1B,GAAIK,KAAKvJ,OAAOykB,WAAW1d,OAAO,SAAU+4B,GAAK,OAAOA,EAAElF,mBAAqB/5B,OACtE,CAAA,IAAIF,EAAI,EAAb,IAAgBe,EAAM45C,EAAY36C,EAAIe,EAAKf,IAGvC,GAFAwB,EAAe0jB,EAAcllB,GAC7BmyC,EAAqBvpC,KAAKgyC,sBAAsBp5C,EAAci5C,GACtC,CAwCpB,IAAK,IAvCDl1C,EAAU,SAAUs1C,EAAiBC,GACrC,IAAI9uC,OAAO,EACXA,KACA,IAAK,IAAI0N,EAAM,EAAGA,EAAMzZ,EAAQC,OAAQwZ,IAAO,CAG3C1N,EAFa3L,oBAAkBa,YAAU,QAASjB,EAAQyZ,KACtDzZ,EAAQyZ,GAAOxY,YAAU,QAAUjB,EAAQyZ,KACjC,KAGlB,GADA1N,EAAO23B,EAAOoX,kBAAkB/uC,EAAM23B,EAAOtkC,OAAOykB,WAAW+2B,EAAkB,KAC7ElX,EAAOtkC,OAAOykB,WAAW+2B,EAAkB,GAAG5gB,iBA0B9C,MAAO,WAzBP,IAAI+gB,EACJP,EAAY1zC,IAAI,SAAUV,EAAGrG,GACrBqG,EAAE1E,WAAaH,EAAaG,WAC5Bq5C,EAAQh7C,KAIhB,IAAIi7C,EAAeD,EAAQ7I,EAAqB0I,EAC5CK,EAAgBn2C,YAAWvD,UACxB05C,EAAcj5C,oBACdi5C,EAAcvX,EAAOtkC,OAAO0G,cACnCsb,WAAS,aAAc65B,EAAelvC,GACtC,IAAIlJ,EAAQ5B,YAAU,QAASg6C,GAI/B,GAHA75B,WAAS,QAASve,EAAQ,EAAGkJ,GAC7BqV,WAAS,gBAAgB,EAAMrV,GAC/BqV,WAAS,iBAAkB65B,EAAcv5C,SAAUqK,GAC/CwuC,EAAQ,CACR,IAAIv4C,EAAef,YAAU,eAAgBM,GACzCS,EAAa/B,QACb+B,EAAad,KAAK6K,GAG1ByuC,EAAY30C,OAAOm1C,EAAc,EAAGjvC,IAMxC23B,EAAS/6B,KACJiyC,EAAkB,EAAGC,EAAQJ,EAAeG,GAAmBC,EAAOD,IAC3Et1C,EAAQs1C,GAEZjyC,KAAK2xC,yBAIZ,CAED,IAAK,IADDv4B,KACKnN,EAAc,EAAG4vB,EAAWxkC,EAAQC,OAAQ2U,EAAc4vB,EAAU5vB,IAAe,CAGxFmN,EAFa3hB,oBAAkBa,YAAU,QAASjB,EAAQ4U,KACtD5U,EAAQ4U,GAAe3T,YAAU,QAASjB,EAAQ4U,KACtC,KAEXgmC,EAAkB,EAA3B,IAAK,IAAyBM,EAAWT,EAAeG,GAAmBM,EAAUN,IACjFjyC,KAAKmyC,kBAAkB/4B,EAAOpZ,KAAKvJ,OAAOykB,WAAW+2B,EAAkB,IAG/E,OAAOJ,GAEXJ,EAAU70C,UAAUo1C,sBAAwB,SAAU10C,EAAYC,GAG9D,IAAK,IADD9E,EACKrB,EAAI,EAAGe,EAFGC,OAAOC,KAAKkF,GAAUjG,OAELF,EAAIe,EAAKf,IAAK,CAC9CqB,EAAS8E,EAASnG,GAGlB,GAAIkG,KAFW7F,oBAAkBgB,EAAOI,YAAc,KAClD0E,EAASC,OAAO,SAAUC,GAAK,OAAOA,EAAE1E,WAAaN,EAAOI,WAAWE,WAAa,IAC3D,CACzBiH,KAAK2xC,iBAAiBp5C,KAAKE,GAE3B,IADeH,YAAU,kBAAmBG,GAKxC,SAHAuH,KAAKgyC,sBAAsBv5C,EAAQ8E,IAO/C,OAAOyC,KAAK2xC,iBAAiBr6C,QAEjCm6C,EAAU70C,UAAUu1C,kBAAoB,SAAUK,EAAUC,GAExD,IAAK,IAAIr7C,EAAI,EAAGe,EADUC,OAAOC,KAAKo6C,EAAQp7C,SAASC,OACZF,EAAIe,EAAKf,IAIhD,IAAK,IAHDs7C,EAAgBj7C,oBAAkBg7C,EAAQp7C,QAAQD,GAAG8D,YAAcu3C,EAAQp7C,QAAQD,GAAG8c,MACtFu+B,EAAQp7C,QAAQD,GAAG8D,WAEdo4B,EAAK,EAAGqf,EADNv6C,OAAOC,KAAKm6C,GACSlf,EAAKqf,EAAOr7C,OAAQg8B,IAAM,CACtD,IAAI17B,EAAM+6C,EAAOrf,GACjB,GAAI17B,IAAQ86C,EACR,GAAI1yC,KAAK2xC,iBAAiBr6C,OACtBk7C,EAAS56C,GAAOoI,KAAK4yC,iBAAiBH,EAAQp7C,QAAQD,GAAI4I,KAAK2xC,uBAE9D,GAAI3xC,KAAKvJ,OAAO0mB,YAAa,CAC9B,IAAI1e,EAAOuB,KAAKvJ,OAAOC,sBAAsBC,cAAcqJ,KAAKvJ,OAAOC,WAAWA,WAAW8E,KACvFwE,KAAKvJ,OAAO8G,SAClBi1C,EAAS56C,GAAOoI,KAAK4yC,iBAAiBH,EAAQp7C,QAAQD,GAAIqH,IAQ1E,OAAO+zC,GAEXf,EAAU70C,UAAUg2C,iBAAmB,SAAUC,EAAev+B,GAC5D,IAAI0D,EAAM,IAAIP,QACVq7B,KACAhzB,KACA3c,EAAQ1L,oBAAkBo7C,EAAc3+B,YACiBsB,EAAzDxV,KAAKvJ,OAAO89B,iBAAiBse,EAAc3+B,OAAO/Q,KACtD0vC,EAAcvyB,qBAAsBhB,OAAQtf,KAAK+yC,kBAAkBF,EAAcvzB,OAAQnc,KACzF0vC,EAAczzB,aAAapf,KAAKvJ,OAAOiB,KAAKgsB,QAC5C,IAAIlE,EAAWqzB,EAAcjzB,gBAAwC,SAAUtX,GAAK,OAAOA,GAC3FuqC,EAAchzB,YAAYC,GAC1B,IAAIkzB,EAAUH,EAAcxyB,YAAY,GACxCrI,EAAIE,QAAUlY,KAAKqb,aACnBrD,EAAIi7B,gBACJ,IAEIC,EAFAC,EAAU,IAAIx8C,cAAY2d,GAAa2E,aAAajB,GACpD/U,EAAQ4vC,EAAc1vC,KAE1BF,GAAS4vC,EAAc1vC,MACvB,IAAK,IAAI/L,EAAI,EAAGA,EAAI6L,EAAM3L,OAAQF,IAAK,CACnC87C,EAAajwC,EAAM7L,GACnB,IAAIQ,EAAMi7C,EAAc3+B,MAAQ,MAAQjR,EAAM7L,GAAGg8C,cAC7Cle,EAAmB,WAAbjyB,EAAM7L,GAAkBkB,YAAU,aAAc66C,GACtDE,qBAAmBpwC,EAAM7L,GAAI+7C,EAASN,EAAe7yC,KAAKvJ,QAC1D68C,EAAOT,EAAc33C,WACrBq4C,EAAuB,WAAbtwC,EAAM7L,GAAkB89B,EAAIt9B,GAAOs9B,EACjD4d,EAAOQ,GAAQR,EAAOQ,OACtBR,EAAOQ,GAAM17C,GAAO27C,EACpBT,EAAOQ,GAAMrwC,EAAM7L,IAAOK,oBAAkBy9B,GAA2B,IAApB1V,EAAS+zB,GAEhEzzB,EAAOR,OAASuzB,EAAcjzB,eAC9B,IAAIjN,EAAcnG,gBAAc,MAC5BC,UAAW,cAEf,GAAIzM,KAAKvJ,OAAO0e,QAAS,CAErB69B,EAAQp4B,GAAGk4B,EAAOD,EAAc33C,YAAa8E,KAAKvJ,OAAQu8C,EAAQ5yB,SAAU,GAAI,KAAM,KAAMzN,GAC5F3S,KAAKvJ,OAA2B,4BAGhCqe,iBAAenC,EAAaqgC,EAAQp4B,GAAGk4B,EAAOD,EAAc33C,YAAa8E,KAAKvJ,OAAQu8C,EAAQ5yB,WAElG,IAAIpmB,EAAQ84C,EAAOD,EAAc33C,YAAYg4C,GAE7C,OAA8C,IAA1CvgC,EAAYhF,UAAUnP,QAAQxE,GACf2Y,EAAYhF,UAAY3T,EAIhC2Y,EAAYhF,WAG3B8jC,EAAU70C,UAAUm2C,kBAAoB,SAAUS,EAAerwC,GAC7D,GAAI1L,oBAAkB0L,IAAkC,iBAAlBqwC,EAClC,OAAOA,EAEX,IAAI55C,EACJ,OAAQuJ,GACJ,IAAK,SACDvJ,GAAQ0lB,OAAQk0B,GAChB,MACJ,IAAK,WACD55C,GAAQuJ,KAAM,WAAYoc,SAAUi0B,GACpC,MACJ,IAAK,OACD55C,GAAQuJ,KAAMA,EAAMoc,SAAUi0B,GAGtC,OAAO55C,GAQX63C,EAAU70C,UAAUmN,QAAU,WAC1B/J,KAAK2K,uBAEF8mC,KC9OPgC,GAAsB,WACtB,SAASA,EAAK/7C,GACVkL,OAAKC,OAAO6wC,QACZ1zC,KAAKvJ,OAASiB,EACdsI,KAAK0W,WACL1W,KAAK2zC,kBACL3zC,KAAK4W,aAAe,EACpB5W,KAAKjF,iBAAmBtD,oBAAkBuI,KAAKvJ,OAAOuG,iBACtDgD,KAAKqK,mBAgGT,OAxFAopC,EAAK72C,UAAUmG,cAAgB,WAC3B,MAAO,QAKX0wC,EAAK72C,UAAUyN,iBAAmB,WAC9BrK,KAAKvJ,OAAO6T,GAAG,cAAetK,KAAK4zC,YAAa5zC,MAChDA,KAAKvJ,OAAO6T,GAAG,aAActK,KAAK6zC,qBAAsB7zC,OAM5DyzC,EAAK72C,UAAU+N,oBAAsB,WAC7B3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,cAAe7K,KAAK4zC,aACpC5zC,KAAKvJ,OAAOoU,IAAI,aAAc7K,KAAK6zC,wBAEvCJ,EAAK72C,UAAUi3C,qBAAuB,SAAUC,GAC5C,IAAIr1C,EAAOq1C,EAAWr4C,aAClBmiB,EAASk2B,EAAWl2B,OACxB5d,KAAK+zC,YAAYt1C,EAAMmf,GACvB5d,KAAK4W,aAAe,EACpBk9B,EAAWr4C,aAAeuE,KAAK2zC,eAC/B3zC,KAAK2zC,mBAETF,EAAK72C,UAAUm3C,YAAc,SAAUt1C,EAAMmf,GACzC,IAAK,IAAI9c,EAAI,EAAGA,EAAIrC,EAAKnH,OAAQwJ,IAW7B,GAVId,KAAKvJ,OAAOiB,KAAKK,eAAeV,QAAQC,OAAS,GAA6C,KAAxC0I,KAAKvJ,OAAOiB,KAAKC,eAAeC,IACjFH,oBAAkBqB,EAAckH,KAAKvJ,OAAQgI,EAAKqC,GAAG/H,UAAU,MAChEiH,KAAK4W,cACL5W,KAAK2zC,eAAe3zC,KAAK4W,aAAenY,EAAKqC,KAIjDd,KAAK4W,cACL5W,KAAK2zC,eAAe3zC,KAAK4W,aAAenY,EAAKqC,IAE7CrC,EAAKqC,GAAG1H,gBAAiB,CACzB,IAAI46C,EAAa,IAAIr9C,cAAY8H,EAAKqC,GAAGzH,cAAc4f,aAAa2E,GACpE5d,KAAK+zC,YAAYC,EAAWp2B,KAYxC61B,EAAK72C,UAAUknB,WAAa,SAAU5oB,EAAY+iB,EAAW2F,GACzD5jB,KAAKvJ,OAAOiB,KAAKosB,WAAW5oB,EAAY+iB,EAAW2F,IAEvD6vB,EAAK72C,UAAUonB,iBAAmB,SAAU9P,GACxClU,KAAKvJ,OAAOiB,KAAKssB,iBAAiB9P,IAQtCu/B,EAAK72C,UAAUg3C,YAAc,WACzB5zC,KAAKvJ,OAAOgK,eAAgBlC,aAAcksB,sBAAoBzqB,KAAKvJ,OAAOiB,KAAK6G,gBAAiB,IAOpGk1C,EAAK72C,UAAUmnB,aAAe,WAC1B/jB,KAAKvJ,OAAOiB,KAAKqsB,eACjB/jB,KAAK4zC,eAQTH,EAAK72C,UAAUmN,QAAU,WACrB/J,KAAK2K,uBAEF8oC,KC3GPQ,GAA4B,WAM5B,SAASA,EAAWx9C,GAChBmM,OAAKC,OAAOqxC,cACZl0C,KAAKvJ,OAASA,EAiBlB,OAfAw9C,EAAWr3C,UAAUu3C,cAAgB,WACjC,OAAOn0C,KAAKvJ,OAAOiB,KAAK08C,iBAAiBD,iBAE7CF,EAAWr3C,UAAUmN,QAAU,aAS/BkqC,EAAWr3C,UAAUmG,cAAgB,WACjC,MAAO,cAEJkxC,KCxBPI,GAA6B,WAC7B,SAASA,EAAY59C,GACjBmM,OAAKC,OAAOyxC,eACZt0C,KAAKvJ,OAASA,EACduJ,KAAKqK,mBAwHT,OAlHAgqC,EAAYz3C,UAAUyN,iBAAmB,WACrCrK,KAAKvJ,OAAO6T,GAAG,kBAAmBtK,KAAKyF,gBAAiBzF,MACxDA,KAAKvJ,OAAO6T,GAAG,mBAAoBtK,KAAK0F,iBAAkB1F,OAM9Dq0C,EAAYz3C,UAAU+N,oBAAsB,WACpC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,kBAAmB7K,KAAKyF,iBACxCzF,KAAKvJ,OAAOoU,IAAI,mBAAoB7K,KAAK0F,oBAE7C2uC,EAAYz3C,UAAU6I,gBAAkB,SAAUvC,GAC9C,IAAIqxC,EAAS9qC,SAAO,IAAMzJ,KAAKvJ,OAAO0a,QAAQ8D,GAAK,4BAA6B/R,EAAKiO,SACjFqjC,EAAa/qC,SAAO,IAAMzJ,KAAKvJ,OAAO0a,QAAQ8D,GAAK,0BAA2B/R,EAAKiO,SACnFwE,EAASlM,SAAO,IAAMzJ,KAAKvJ,OAAO0a,QAAQ8D,GAAK,4BAA6B/R,EAAKiO,SACjFkuB,EAAU51B,SAAO,IAAMzJ,KAAKvJ,OAAO0a,QAAQ8D,GAAK,6BAA8B/R,EAAKiO,SAavF,GAZIojC,KACkD,IAA9Cv0C,KAAKvJ,OAAOiB,KAAKkE,aAAaqsB,YAC9BssB,EAAOh6C,MAAMG,QAAU,OAGvB65C,EAAOh6C,MAAMG,QAAU,SAGQ,SAAlCsF,KAAKvJ,OAAOmF,aAAaC,MAAqD,UAAlCmE,KAAKvJ,OAAOmF,aAAaC,MACjEpE,oBAAkB+8C,IAAkBA,EAAWjsC,UAAUC,SAAS,iBACvEgsC,EAAWj6C,MAAMG,QAAU,QAE3Bib,GAAU0pB,EAAS,CACnB,IAAI2B,EAAOhhC,KAAKvJ,OACZ86C,EAAcvQ,EAAKjD,kBAAkB,GACrC3E,EAAgBl2B,EAAKuxC,MAAMlzC,OAAO2J,QAAQ,MAC9C,GAAIzT,oBAAkB2hC,KAAoB3hC,oBAAkB2hC,KAAmBA,EAAc7wB,UAAUC,SAAS,aAC5GmN,EAAOpb,MAAMG,QAAU2kC,EAAQ9kC,MAAMG,QAAU,WAE9C,CACD,GAA6B,IAAzB62C,EAAY1nC,UAAkBm3B,EAAK54B,wBAAwB9Q,OAAS,EACpEqe,EAAOpb,MAAMG,QAAU2kC,EAAQ9kC,MAAMG,QAAU,YAE9C,GAAqB,kBAAjBwI,EAAW,OAA2BzL,oBAAkB85C,IAAgBvQ,EAAKtpC,KAAK85C,oBAAsB,CAC7G,IAAIhQ,EAAeR,EAAK9kC,wBAAwBq1C,EAAY1nC,UACvDpS,oBAAkB+pC,KACdA,EAAatnC,MAAQ8mC,EAAK9kC,wBAAwBq1C,EAAY1nC,SAAW,GAAG3P,MAC7Eyb,EAAOpb,MAAMG,QAAU,OAGvBib,EAAOpb,MAAMG,QAAU,QAEvB8mC,EAAatnC,QAAU8mC,EAAK9kC,wBAAwBq1C,EAAY1nC,SAAW,GAAG3P,QAC9Eyb,EAAOpb,MAAMG,QAAU,SAEA,IAAvB8mC,EAAatnC,QACbmlC,EAAQ9kC,MAAMG,QAAU,QAED,IAAvB8mC,EAAatnC,QACbmlC,EAAQ9kC,MAAMG,QAAU,UAIf,kBAAjBwI,EAAW,MAAyBzL,oBAAkB85C,KAAiBvQ,EAAKtpC,KAAK85C,sBAC7ExxC,KAAKvJ,OAAO+wB,QAAkB,SAAE,YAChC7R,EAAOpb,MAAMG,QAAU,QAEvBsF,KAAKvJ,OAAO+wB,QAAkB,SAAE,aAChC6X,EAAQ9kC,MAAMG,QAAU,YAM5C25C,EAAYz3C,UAAU8I,iBAAmB,SAAUxC,GAM/C,GALqB,UAAjBA,EAAKE,KAAK6R,IAAmC,UAAjB/R,EAAKE,KAAK6R,IAAmC,UAAjB/R,EAAKE,KAAK6R,KAClEjV,KAAKvJ,OAAO0d,OAAO,0BAA2BjR,GAC9ClD,KAAKvJ,OAAOgK,eAAgB7E,cAAgBQ,eAAgB8G,EAAKE,KAAK6R,MAAQ,GAC9EjV,KAAKvJ,OAAOi/B,cAEZxyB,EAAKE,KAAK6R,KAAOjV,KAAKvJ,OAAO0a,QAAQ8D,GAAK,6BAA+B/R,EAAKE,KAAK6R,KAAOjV,KAAKvJ,OAAO0a,QAAQ8D,GAAK,gCAC9Gxd,oBAAkBuI,KAAKvJ,OAAO2oC,sBAAuB,CACtD,IACI/jC,EAAS6H,EAAKE,KAAK6R,KAAOjV,KAAKvJ,OAAO0a,QAAQ8D,GAAK,4BAA8B,SAAW,UAChGjV,KAAKvJ,OAAO2oC,qBAAwC,oBAAE,KAAM/jC,KAUxEg5C,EAAYz3C,UAAUmG,cAAgB,WAClC,MAAO,eAQXsxC,EAAYz3C,UAAUmN,QAAU,WAC5B/J,KAAK2K,uBAOT0pC,EAAYz3C,UAAU0uB,eAAiB,WACnC,OAAOtrB,KAAKvJ,OAAOiB,KAAKm4B,kBAAkBvE,kBAEvC+oB,KCvHPK,GAA2B,WAC3B,SAASA,EAAUj+C,GACfuJ,KAAK20C,gBAAkB,EACvB30C,KAAKwW,aAAe,eACpBxW,KAAKihB,eAAiB,iBACtBjhB,KAAK40C,qBACL50C,KAAK60C,uBACL70C,KAAK80C,qBACL90C,KAAKvJ,OAASA,EACduJ,KAAKjF,iBAAmBtD,oBAAkBhB,EAAOuG,iBACjDgD,KAAK+0C,gBACL/0C,KAAK/D,sBACL+D,KAAKg1C,OAAQ,EACbh1C,KAAKqK,mBA8kBT,OA5kBAqqC,EAAU93C,UAAUyN,iBAAmB,WACnCrK,KAAKvJ,OAAO6T,GAAG2lB,GAAkBjwB,KAAKgG,UAAWhG,MACjDA,KAAKvJ,OAAO6T,GAAG8lB,GAAiBpwB,KAAKoG,SAAUpG,MAC/CA,KAAKvJ,OAAO6T,GAAGgmB,GAAuBtwB,KAAKsG,eAAgBtG,MAC3DA,KAAKvJ,OAAO6T,GAAGuU,GAAkB7e,KAAKwG,UAAWxG,MACjDA,KAAKvJ,OAAO6T,GAAGkmB,GAA0BxwB,KAAKqG,kBAAmBrG,MACjEA,KAAKvJ,OAAO6T,GAAG+lB,GAAwBrwB,KAAKuG,gBAAiBvG,MAC7DA,KAAKvJ,OAAO6T,GAAG,kBAAmBtK,KAAKi1C,gBAAiBj1C,MACxDA,KAAKvJ,OAAO6T,GAAG,oBAAqBtK,KAAKk1C,kBAAmBl1C,MAC5DA,KAAKvJ,OAAOiB,KAAK4S,GAAG,yBAA0BtK,KAAKm1C,qBAAsBn1C,MACzEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,kBAAmBtK,KAAKo1C,cAAep1C,OAM/D00C,EAAU93C,UAAU+N,oBAAsB,WAClC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAIolB,GAAkBjwB,KAAKgG,WACvChG,KAAKvJ,OAAOoU,IAAIulB,GAAiBpwB,KAAKoG,UACtCpG,KAAKvJ,OAAOoU,IAAIgU,GAAkB7e,KAAKwG,WACvCxG,KAAKvJ,OAAOoU,IAAIylB,GAAuBtwB,KAAKsG,gBAC5CtG,KAAKvJ,OAAOoU,IAAI2lB,GAA0BxwB,KAAKqG,mBAC/CrG,KAAKvJ,OAAOoU,IAAIwlB,GAAwBrwB,KAAKuG,iBAC7CvG,KAAKvJ,OAAOoU,IAAI,kBAAmB7K,KAAKi1C,iBACxCj1C,KAAKvJ,OAAOoU,IAAI,oBAAqB7K,KAAKk1C,mBAC1Cl1C,KAAKvJ,OAAOiB,KAAKmT,IAAI,yBAA0B7K,KAAKm1C,sBACpDn1C,KAAKvJ,OAAOiB,KAAKmT,IAAI,kBAAmB7K,KAAKo1C,iBAQjDV,EAAU93C,UAAUmN,QAAU,WAC1B/J,KAAK2K,uBAMT+pC,EAAU93C,UAAUy4C,gBAAkB,WAClC,OAAOr1C,KAAK+0C,cAMhBL,EAAU93C,UAAU04C,eAAiB,WACjC,OAAOt1C,KAAKhF,aAMhB05C,EAAU93C,UAAU24C,iBAAmB,WACnC,OAAOv1C,KAAK/E,eAMhBy5C,EAAU93C,UAAU44C,mBAAqB,WACrC,OAAOx1C,KAAK20C,iBAEhBD,EAAU93C,UAAUq4C,gBAAkB,WAClC,IAGIh7C,EAHAwE,EAAQuB,KAAKvJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CqJ,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOwE,KAAKvJ,OAAOiB,KAAKhB,WAC/DkgC,EAAa52B,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GAE5D,IAAK7D,oBAAkBuI,KAAK40C,oBAAsB50C,KAAK40C,kBAAkBt9C,OACrE,IAAK,IAAIF,EAAI,EAAGA,EAAI4I,KAAK40C,kBAAkBt9C,OAAQF,IAC/C6C,EAAQwE,EAAKN,IAAI,SAAUV,GAAK,OAAOA,EAAEm5B,KAAgBp4B,QAAQwB,KAAK40C,kBAAkBx9C,GAAGw/B,IAC3Fn4B,EAAKvB,OAAOjD,EAAO,GAG3B+F,KAAK40C,kBAAoB50C,KAAK+0C,aAAe/0C,KAAK80C,kBAAoB90C,KAAK60C,oBAAsB70C,KAAK/D,uBAE1Gy4C,EAAU93C,UAAUoJ,UAAY,SAAU9C,GACtC,IAAIuyC,EAAkBvyC,EAAK1D,KAAKqW,UAC5B6/B,EAAa11C,KAAKvJ,OAAOwc,eAAiBjT,KAAKvJ,OAAOwI,mBACtDy2C,GAAcxyC,EAAKyyC,aAAa17C,MAAQy7C,IACxCD,GAAoCC,GAIxC,GAFc11C,KAAKvJ,OAAO6Z,4BAA8B,GACpDtQ,KAAKvJ,OAAO8Z,6BAA+B,EACnC,CACOvQ,KAAKvJ,OAAO6Z,4BAA8BmlC,IACxCz1C,KAAKvJ,OAAO2I,iBACzBY,KAAKvJ,OAAO6I,aAAaC,YAAad,KAAMyE,EAAK0I,QAASpM,KAAM0D,EAAK1D,KACjEE,OAAQM,KAAKvJ,OAAOiB,KAAKk+C,iBAAiB1yC,EAAK1D,KAAKqW,kBAIvD4/B,IAAoBz1C,KAAKvJ,OAAO2I,iBACrCY,KAAKvJ,OAAO6I,aAAaC,YAAad,KAAMyE,EAAK0I,QAASpM,KAAM0D,EAAK1D,KACjEE,OAAQM,KAAKvJ,OAAOiB,KAAKk+C,iBAAiB1yC,EAAK1D,KAAKqW,aAG5D,GAAI7V,KAAKg1C,OAA2C,UAAlCh1C,KAAKvJ,OAAOmF,aAAaC,MAAgE,WAA5CmE,KAAKvJ,OAAOmF,aAAaQ,eAA6B,CACjH,IAAIqC,EAAQuB,KAAKvJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CqJ,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOwE,KAAKvJ,OAAOiB,KAAKhB,WAC/Dm/C,OAAQ,EAERC,EAAe91C,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GAC1Dy6C,OAAmB,EACnBC,OAAa,EACbn9C,EAAa,aAEbD,EAAeoH,KAAK/E,eAAiB,EAAI+E,KAAK+0C,aAAa/0C,KAAKhF,aAAanC,GAAc,KAC3FoE,OAAY,EACZqB,OAAiB,EACjBtB,OAAkB,EAClBi5C,EAA6D,QAA5Cj2C,KAAKvJ,OAAOmF,aAAaQ,iBAAoD,IAAxB4D,KAAK/E,cAAuB,EACtD,UAA5C+E,KAAKvJ,OAAOmF,aAAaQ,eAA6B4D,KAAKhF,YACrDgF,KAAKhF,YAAc,EAE7B,GADAi7C,EAAiBj2C,KAAKk2C,wBAAwBD,GAC1Cj2C,KAAKm2C,iBAAkB,CAcvB,GAbIn2C,KAAK+0C,aAAaz9C,SAClB2F,EAAY+C,KAAK+0C,aAAa/0C,KAAKhF,aAAagF,KAAKvJ,OAAOwG,WAC5DD,EAAkBgD,KAAK+0C,aAAa/0C,KAAKhF,aAAagF,KAAKvJ,OAAOuG,iBAC9DgD,KAAK+0C,aAAa/0C,KAAKhF,aAAanC,KACpCyF,EAAiB0B,KAAK+0C,aAAa/0C,KAAKhF,aAAanC,GAAoB,WAGjFmH,KAAK40C,kBAAoBl7C,EAAYsG,KAAK40C,mBAC1C50C,KAAK80C,kBAAoBp7C,EAAYsG,KAAK80C,mBAC1C90C,KAAK80C,kBAAkBv8C,KAAKyH,KAAK+0C,aAAa/0C,KAAKhF,cACnD66C,EAAQ71C,KAAKvJ,OAAOiB,KAAKge,gBAAgBugC,GAAgBG,QACzDP,EAAM98C,SAAW2gB,SAAO1Z,KAAKvJ,OAAO0a,QAAQ8D,GAAK,UACjDwD,WAAS,sBAAwBo9B,EAAM98C,SAAU88C,EAAO71C,KAAKvJ,SACxD2B,OAAOwE,UAAUC,eAAeC,KAAK+4C,EAAO,SAAU,CAEvD,GADA71C,KAAKq2C,YAAqC,IAAxBr2C,KAAK/E,cAAuB,EAAI+E,KAAKq2C,WACP,UAA5Cr2C,KAAKvJ,OAAOmF,aAAaQ,gBAEzB,GADAy5C,EAAMS,cAAgB19C,EAClBoH,KAAK/E,eAAiB,EAAG,CACzB46C,EAAMh9C,WAAasD,YAAW6D,KAAK+0C,aAAa/0C,KAAKhF,cACrD66C,EAAMv3C,eAAiBu3C,EAAMh9C,WAAWE,gBACjC88C,EAAMh9C,WAAWQ,oBACjBw8C,EAAMh9C,WAAWmH,KAAKvJ,OAAO0G,cACpC04C,EAAM37C,MAAQ27C,EAAMh9C,WAAWqB,MAAQ,EACvC27C,EAAM57C,MAAQ+F,KAAKq2C,WACnB,IAAIE,EAAmBp9C,EAAoB6G,KAAK+0C,aAAa/0C,KAAKhF,cAAc1D,OAC5EmB,EAASU,EAAoB6G,KAAK+0C,aAAa/0C,KAAKhF,cAAcu7C,EAAmB,GACzF99C,EAAShB,oBAAkBgB,GAAUuH,KAAK+0C,aAAa/0C,KAAKhF,aAAevC,EAC3Es9C,EAAmBt3C,EAAKN,IAAI,SAAUV,GAAK,OAAOA,EAAEq4C,KAAkBt3C,QAAQ/F,EAAOq9C,IACjF91C,KAAKjF,kBACL86C,EAAM71C,KAAKvJ,OAAOuG,iBAAmBC,GAEzCG,EAAgB04C,EAAcD,EAAMh9C,WAAY,MAAOmH,KAAKvJ,OAAQuJ,KAAKjF,gBAAiB86C,SAG7F,IAAiD,UAA5C71C,KAAKvJ,OAAOmF,aAAaQ,gBAA0E,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,kBAClF3E,oBAAkBuI,KAAK+0C,aAAa/0C,KAAKhF,cAAe,CAS5D,GARA66C,EAAM37C,MAAQ8F,KAAK+0C,aAAa/0C,KAAKhF,aAAkB,MACnD66C,EAAM37C,OAAS8F,KAAK/E,eAAiB,IACrC46C,EAAMh9C,WAAaD,EACnBi9C,EAAMv3C,eAAiBA,SAChBu3C,EAAMh9C,WAAWQ,oBACjBw8C,EAAMh9C,WAAWmH,KAAKvJ,OAAO0G,eAExC04C,EAAM57C,MAAoD,UAA5C+F,KAAKvJ,OAAOmF,aAAaQ,eAA6B4D,KAAKq2C,WAAar2C,KAAKq2C,WAAa,EACxD,UAA5Cr2C,KAAKvJ,OAAOmF,aAAaQ,gBAA8B4D,KAAK/E,eAAiB,EAAG,CAC5Es7C,EAAmBp9C,EAAoB6G,KAAK+0C,aAAa/0C,KAAKhF,cAAc1D,OAC5EmB,EAASU,EAAoB6G,KAAK+0C,aAAa/0C,KAAKhF,cAAcu7C,EAAmB,GACzF99C,EAAShB,oBAAkBgB,GAAUuH,KAAK+0C,aAAa/0C,KAAKhF,aAAevC,EAC3Es9C,EAAmBt3C,EAAKN,IAAI,SAAUV,GAAK,OAAOA,EAAEq4C,KAAkBt3C,QAAQ/F,EAAOq9C,IAEzF,GAAgD,UAA5C91C,KAAKvJ,OAAOmF,aAAaQ,gBAA8B4D,KAAK/E,eAAiB,EAAG,CAC5ExC,EAASuH,KAAK+0C,aAAa/0C,KAAKhF,aACpC+6C,EAAmBt3C,EAAKN,IAAI,SAAUV,GAAK,OAAOA,EAAEq4C,KAAkBt3C,QAAQ/F,EAAOq9C,IAErF91C,KAAKjF,kBACL86C,EAAM71C,KAAKvJ,OAAOuG,iBAAmBA,GAG7C64C,EAAM57C,OAAyB,IAAjB47C,EAAM57C,MAAe,EAAI47C,EAAM57C,MAC7C47C,EAAMz8C,iBAAkB,EACxBy8C,EAAMx8C,gBACN2G,KAAK+0C,aAAa73C,OAAO24C,EAAM57C,MAAO,EAAG47C,GACzC71C,KAAK/D,mBAAmBiB,OAAO24C,EAAM57C,MAAO,EAAG47C,GAE3CG,EADAD,GAIaF,EAAM57C,MAEyB,UAA5C+F,KAAKvJ,OAAOmF,aAAaQ,iBACzB45C,EAA6B,IAAhBH,EAAM57C,MAAc+7C,EAAaA,EAAa,GAE/Dv3C,EAAKvB,OAAO84C,EAAY,EAAGH,GAC3B71C,KAAK40C,kBAAkBr8C,KAAKs9C,GAEhC71C,KAAKvJ,OAAOiB,KAAKge,gBAAgBugC,GAAgBx3C,KAAOo3C,EACxD71C,KAAKm2C,kBAAmB,GAExBn2C,KAAKvJ,OAAOwc,eAAiBjT,KAAKvJ,OAAOwI,oBACoB,QAA1De,KAAKvJ,OAAOiB,KAAKge,gBAAgBugC,GAAgB/1C,OACpDM,QAAMR,KAAK/D,mBAAmBg6C,GAAiBj2C,KAAKvJ,OAAOiB,KAAKge,gBAAgBugC,GAAgBG,WAI5G1B,EAAU93C,UAAU0J,eAAiB,SAAU7I,GAE3C,GAAsC,SAAlCuC,KAAKvJ,OAAOmF,aAAaC,MAAmBmE,KAAKvJ,OAAOqF,WAAuB,aAG/E,OAFA2B,EAAE0L,QAAS,OACXnJ,KAAKvJ,OAAOqF,WAAuB,cAAI,GAGvCkE,KAAKvJ,OAAOqF,WAA+B,qBAAMrE,oBAAkBuI,KAAKvJ,OAAOqF,WAAwB,eAA6C,IAAvCkE,KAAKvJ,OAAOiB,KAAK2zB,kBAC9HrrB,KAAK/E,cAAgB+E,KAAKvJ,OAAOqF,WAA0B,cAC3DkE,KAAKhF,YAAcgF,KAAKvJ,OAAOqF,WAAwB,YACvDkE,KAAK7E,aAAe6E,KAAKvJ,OAAOyF,wBAAwB8D,KAAK/E,iBAG7D+E,KAAK/E,cAAgB+E,KAAKvJ,OAAOiB,KAAK2zB,iBACtCrrB,KAAKhF,YAAcgF,KAAKvJ,OAAOiB,KAAK2zB,kBAAoB,EAAIrrB,KAAKvJ,OAAOiB,KAAK2zB,iBAAmB,EAChGrrB,KAAKvJ,OAAOqF,WAAwB,YAAIkE,KAAKvJ,OAAOiB,KAAK2zB,kBAAoB,EAAIrrB,KAAKvJ,OAAOiB,KAAK2zB,iBAAmB,EACrHrrB,KAAK7E,aAAe6E,KAAKvJ,OAAOmS,qBAAqB,KAG7D8rC,EAAU93C,UAAUwJ,SAAW,SAAU3I,GACrC,GAAgD,WAA5CuC,KAAKvJ,OAAOmF,aAAaQ,eAA6B,CACtD4D,KAAKg1C,OAAQ,EACbh1C,KAAKm2C,kBAAmB,EACxB,IAAI7N,EAAc,EASlB,GARKtoC,KAAK+0C,aAAaz9C,SACnB0I,KAAK40C,qBACL50C,KAAK+0C,aAAer7C,EAAYsG,KAAKvJ,OAAOiB,KAAKwE,yBACjD8D,KAAK/D,mBAAqBvC,EAAYsG,KAAKvJ,OAAOiB,KAAKwE,0BAEvD8D,KAAKvJ,OAAOqF,WAA+B,qBAAMrE,oBAAkBuI,KAAKvJ,OAAOqF,WAAwB,cACvGyM,YAAUvI,KAAKvJ,OAAOiB,KAAK+gC,cAAc,IAAK,kBAEF,QAA5Cz4B,KAAKvJ,OAAOmF,aAAaQ,eAA0B,CACnD,IAAInE,EAAU+H,KAAKvJ,OAAOiB,KAAKwE,wBACO,UAAlC8D,KAAKvJ,OAAOmF,aAAaC,OAAqBmE,KAAKvJ,OAAOsF,kBAAkBiE,KAAKwW,cAAclf,OAAS,GACrG0I,KAAKvJ,OAAOsF,kBAAkBiE,KAAKihB,gBAAgB3pB,UACtDW,EAAU+H,KAAK+0C,cAEnB/0C,KAAKw2C,iBAAiBv+C,GACtB+H,KAAKvJ,OAAO0d,OAAOgd,OACnBnxB,KAAK20C,gBAAkB,EAE3B30C,KAAKy2C,iBAEL,IAAIC,EAAcr4C,WAAS,cAAe2B,KAAKvJ,OAAOiB,MAClDi/C,EAAQ32C,KAAKvJ,OAAOwjB,kBACpBja,KAAKvJ,OAAOsF,kBAAkBiE,KAAKihB,gBAAgB3pB,QAAsD,UAA5C0I,KAAKvJ,OAAOmF,aAAaQ,gBACtFksC,EAAc7qC,EAAEkB,IAAIkL,SACpB6sC,EAAYxf,aAAa0f,OAAOA,OAAS52C,KAAK42C,QAG9CtO,EAAcqO,EAAMvlC,uBAAuB,cAAc,GAAGvH,SAKhE6sC,EAAYxf,aAAa0f,OAAOr1B,SAAW+mB,EAAaoO,EAAYxf,aAAa0f,OAAOr1B,QAAQ,MAGxGmzB,EAAU93C,UAAUyJ,kBAAoB,SAAUnD,GACzClD,KAAK+0C,aAAaz9C,SACnB0I,KAAK+0C,aAAer7C,EAAYsG,KAAKvJ,OAAOiB,KAAKwE,yBACjD8D,KAAK/D,mBAAqBvC,EAAYsG,KAAKvJ,OAAOiB,KAAKwE,0BAE3D,IAAIw6C,EAAcr4C,WAAS,cAAe2B,KAAKvJ,OAAOiB,MACtDsI,KAAK42C,OAASF,EAAYxf,aAAa0f,OAAOA,OAC9C,IAGIn4C,EACAo4C,EACAl2C,EALAhC,KACA1G,KACA6+C,EAAa92C,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GAIvD7D,oBAAkByL,EAAKvE,OAA6D,IAArDqB,KAAKvJ,OAAOsnC,kBAAkBv/B,QAAQ0E,EAAKvE,MAO3Ek4C,EAAS19C,EADTsF,EAAOuB,KAAKvJ,OAAOiB,KAAKkR,qBAAqB5I,KAAKvJ,OAAOiB,KAAKkR,qBAAqBtR,OAAS,IAE5FqJ,EAAMX,KAAKvJ,OAAOsnC,kBAAkB,GAAG1xB,aAAa,cANpDwqC,EAAS19C,EADTsF,EAAOyE,EAAK0I,SAEZjL,EAAMuC,EAAKvE,IAAI0N,aAAa,aAOhC,IAAI0qC,EAAiB1iC,SAASrU,KAAKvJ,OAAOiB,KAAKs/C,mBAAmBr2C,GAAK0L,aAAa,iBAAkB,IACtG,GAAIwqC,EAAOv/C,OAGP,IAAK,IAFD2/C,EAAaF,EAAiBF,EAAOv/C,OAEhCF,EADa2/C,EAAiB,EACT3/C,GAAK6/C,EAAY7/C,IAC3CuH,EAAIpG,KAAKyH,KAAKvJ,OAAOiB,KAAK+gC,cAAcrhC,KACpC4I,KAAKvJ,OAAOuI,YAAcgB,KAAKvJ,OAAOwc,eAAiBjT,KAAKvJ,OAAOwI,qBACnEN,EAAIpG,KAAKyH,KAAKvJ,OAAOiB,KAAKykC,iBAAiB/kC,IAIvD,IAAKK,oBAAkBgH,EAAK5F,YAAa,CACrC,IAAIA,EAAaC,EAAckH,KAAKvJ,OAAQgI,EAAK5F,WAAWE,UAC5D,IAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,IAAIywC,EAAahxC,EAAWQ,aAAamF,QAAQC,GACjD5F,EAAWQ,aAAa6D,OAAO2sC,EAAY,GAE/C7pC,KAAK60C,oBAAsBn7C,EAAYsG,KAAK60C,qBAC5C70C,KAAK60C,oBAAoBt8C,KAAKkG,GAElCo4C,EAAOt+C,KAAKkG,GACZxG,EAAU4+C,EACV,IAASz/C,EAAI,EAAGA,EAAIa,EAAQX,OAAQF,IAAK,CACrC,IAAI4+C,EAAah2C,KAAK+0C,aAAa52C,IAAI,SAAUV,GAAK,OAAOA,EAAEq5C,KAAgBt4C,QAAQvG,EAAQb,GAAG0/C,KAC9E,IAAhBd,GACAh2C,KAAK+0C,aAAa73C,OAAO84C,EAAY,GAG7C,IAAS5+C,EAAI,EAAGA,EAAIuH,EAAIrH,OAAQF,IACvBK,oBAAkBkH,EAAIvH,KACvB4I,KAAKvJ,OAAOiB,KAAKq0B,gBAAgByF,gBAAgBj5B,KAAKoG,EAAIvH,KAItEs9C,EAAU93C,UAAU65C,eAAiB,WAEjC,IAAK,IADDxuC,EAAOjI,KAAKvJ,OAAOiB,KAAK+gC,cACnBrhC,EAAI,EAAGA,EAAI6Q,EAAK3Q,OAAQF,IAC7B6Q,EAAK7Q,GAAG8V,aAAa,gBAAiB9V,EAAE2Q,YAE5C,IAAIsI,EAAUrQ,KAAKvJ,OAAO6Z,4BAA8B,GACpDtQ,KAAKvJ,OAAO8Z,6BAA+B,EAC/C,GAAIvQ,KAAKvJ,OAAOuI,YAAcgB,KAAKvJ,OAAOwI,oBAAsBe,KAAKvJ,OAAOwc,eAAiB5C,EAGpF,CAAA,IAFD6mC,EAAQl3C,KAAKvJ,OAAOiB,KAAK2X,qBACzB4sB,EAAkBj8B,KAAKvJ,OAAOiB,KAAKwmC,yBACvC,IAAS9mC,EAAI,EAAGA,EAAI8/C,EAAM5/C,OAAQF,IAC9B8/C,EAAM9/C,GAAG8V,aAAa,gBAAiB9V,EAAE2Q,YACrCsI,GACA4rB,EAAgB7kC,GAAG8V,aAAa,gBAAiB9V,EAAE2Q,cAKnE2sC,EAAU93C,UAAU45C,iBAAmB,SAAUv+C,GAI7C,IAAK,IAHD2+B,EAAa52B,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GACxDkb,EAAe,eACf3d,EAAyD,UAA5CmH,KAAKvJ,OAAOmF,aAAaQ,eAA6B,gBAAkB,aAChFhF,EAAI,EAAGA,EAAI4I,KAAKvJ,OAAOsF,kBAAkBya,GAAclf,OAAQF,IAC/DK,oBAAkBuI,KAAKvJ,OAAOsF,kBAAkBya,GAAcpf,GAAGyB,KAC9DmH,KAAKvJ,OAAOsF,kBAAkBya,GAAcpf,GAAGyB,GAAY+9B,KAAgB3+B,EAAQ+H,KAAKhF,aAAa47B,KACrG52B,KAAK20C,gBAAkB30C,KAAK20C,gBAAkB,IAK9DD,EAAU93C,UAAU2J,gBAAkB,SAAU9I,GAC5C,IACI05C,EAAgB,iBAChBn2B,EAAiBvjB,EAAErC,aAA0B,eACjD,GAAIqC,EAAErC,aAA0B,eAAE9D,OAE9B,IAAK,IAAIF,EAAI,EAAGA,EAAI4pB,EAAe1pB,OAAQF,IACvCwD,GAAaZ,MAAOgnB,EAAe5pB,GAAIiE,OAAQ,QAAU2E,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBiF,KAAKhF,YAAagF,KAAK/E,mBAFtG,GAKrB,GAAIwC,EAAErC,aAAa+7C,GAAe7/C,OAGzB,CAAA,IADDmB,EADiBgF,EAAErC,aAAa+7C,GAEpC,IAAS//C,EAAI,EAAGA,EAAIqB,EAAOnB,OAAQF,IAAK,CACpC4I,KAAKo3C,eAAe3+C,EAAOrB,GAAG2B,UAE9B,IAAK,IADD89C,EAAS19C,EAAoBV,EAAOrB,IAC/BqK,EAAI,EAAGA,EAAIo1C,EAAOv/C,OAAQmK,IAC/BzB,KAAKo3C,eAAeP,EAAOp1C,GAAG1I,UAElC0E,EAAErC,aAAa+7C,GAAiB15C,EAAErC,aAAa+7C,GAAe79C,OAAOu9C,IAG7E72C,KAAKg1C,OAAQ,GAEjBN,EAAU93C,UAAUw6C,eAAiB,SAAUp9C,UAEpCgG,KAAKvJ,OAAe,yBAAEuD,UAEtBgG,KAAKvJ,OAAS,mBAAEuD,IAE3B06C,EAAU93C,UAAUs4C,kBAAoB,WACpC,IACIj7C,EADAm/B,EAAgB,gBAEhBvgC,EAAa,aAEboD,EAAqB+D,KAAKvJ,OAAOiB,KAAKwE,wBACtC7C,EAAe,eACfoF,EAAQuB,KAAKvJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CqJ,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOwE,KAAKvJ,OAAOiB,KAAKhB,WAC/DkgC,EAAa52B,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GAC5D,IAAK7D,oBAAkBuI,KAAK40C,mBACxB,IAAK,IAAIx9C,EAAI,EAAGA,EAAI4I,KAAK40C,kBAAkBt9C,OAAQF,IAG/C,GAFA6C,EAAQwE,EAAKN,IAAI,SAAUV,GAAK,OAAOA,EAAEm5B,KAAgBp4B,QAAQwB,KAAK40C,kBAAkBx9C,GAAGw/B,IAC3Fn4B,EAAKvB,OAAOjD,EAAO,GAC6B,UAA5C+F,KAAKvJ,OAAOmF,aAAaQ,iBACzBnC,EAAQgC,EAAmBkC,IAAI,SAAUV,GAAK,OAAOA,EAAEm5B,KAClDp4B,QAAQwB,KAAK40C,kBAAkBx9C,GAAGyB,GAAcmH,KAAK40C,kBAAkBx9C,GAAGyB,GAAY+9B,GACrF52B,KAAK40C,kBAAkBx9C,GAAGw/B,KAC3Bn/B,oBAAkBwE,EAAmBhC,KAEtC,IAAK,IADD8a,EAAW9Y,EAAmBhC,GAAOZ,GAChCS,EAAI,EAAGib,GAAYjb,EAAIib,EAASzd,OAAQwC,IACzCib,EAASjb,GAAG88B,KAAgB52B,KAAK40C,kBAAkBx9C,GAAGw/B,IACtD36B,EAAmBhC,GAAOZ,GAAc6D,OAAOpD,EAAG,GAO1E,IAAKrC,oBAAkBuI,KAAKvJ,OAAO2iC,IAAiB,CAChD,IAAIz6B,EAAMqB,KAAKvJ,OAAO2iC,GAAeluB,QAAQ,MAC7ClL,KAAKvJ,OAAO6iC,YAAY36B,GACxBqB,KAAKvJ,OAAO2iC,GAAiB,KAEjC,IAAK3hC,oBAAkBuI,KAAK60C,qBACxB,IAASz9C,EAAI,EAAGA,EAAI4I,KAAK60C,oBAAoBv9C,OAAQF,IACjD,IAAKK,oBAAkBuI,KAAK60C,oBAAoBz9C,GAAGyB,IAAc,CAC7DoB,EAAQgC,EAAmBkC,IAAI,SAAUV,GAAK,OAAOA,EAAEm5B,KAClDp4B,QAAQwB,KAAK60C,oBAAoBz9C,GAAGyB,GAAY+9B,IACrD,IAAIygB,EAA4D,IAA5Cr3C,KAAK60C,oBAAoBz9C,GAAa,MAAU4I,KAAK60C,oBAAoBz9C,GAAa,MACtG4I,KAAK60C,oBAAoBz9C,GAAa,MAAI,EACzCK,oBAAkBwE,EAAmBhC,KACtCgC,EAAmBhC,GAAOZ,GAAc6D,OAAOm6C,EAAe,EAAGr3C,KAAK60C,oBAAoBz9C,IAK1G4I,KAAK40C,kBAAoB50C,KAAK+0C,aAAe/0C,KAAK80C,kBAAoB90C,KAAK/D,sBAC3E+D,KAAK+0C,aAAer7C,EAAYsG,KAAKvJ,OAAOiB,KAAKwE,yBACjD8D,KAAKq2C,WAAa,EAClBr2C,KAAK/D,mBAAqBvC,EAAYsG,KAAKvJ,OAAOiB,KAAKwE,yBACvD8D,KAAK60C,uBACL70C,KAAKvJ,OAAOiB,KAAK4H,aAAagyB,WAElCojB,EAAU93C,UAAU4J,UAAY,SAAUtD,GACtC,GAAsC,UAAlClD,KAAKvJ,OAAOmF,aAAaC,KAAkB,CAC3C,IAAIzE,OAAI,EACJgE,EAAehD,OAAOyE,eAAeC,KAAKoG,EAAM,kBAAoBA,EAAKo0C,eAAiBt3C,KAAKvJ,OAAOsF,kBACtGklB,EAAiB,iBAIjBxiB,EAAQuB,KAAKvJ,OAAOiB,KAAKhB,sBAAsBC,cAC/CqJ,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOwE,KAAKvJ,OAAOiB,KAAKhB,WAC/DuF,EAAqB+D,KAAKvJ,OAAOiB,KAAKwE,wBACtCq7C,EAAev3C,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GAE1Dk8C,EAAap8C,EAAyB,aAEtCH,OAAgB,EAChBD,OAAc,EAEdG,OAAe,EAKnB,GAHIq8C,EAAWlgD,OAAS,GAAiD,WAA5C0I,KAAKvJ,OAAOmF,aAAaQ,gBAClDo7C,EAAW7O,UAEiC,WAA5C3oC,KAAKvJ,OAAOmF,aAAaQ,iBAAgChE,OAAOyE,eAAeC,KAAKoG,EAAM,kBAAmB,CAE7G,GADAzE,EAAKvB,OAAOuB,EAAKnH,OAASkgD,EAAWlgD,OAAQkgD,EAAWlgD,QACpD0I,KAAKvJ,OAAOqF,WAA+B,oBAAK07C,EAAWlgD,SAAWG,oBAAkBuI,KAAKvJ,OAAOqF,WAAwB,aAAI,CAChI,IAAImC,EAAUoW,SAASrU,KAAKvJ,OAAOwjB,kBAAkB7I,uBAAuB,iBAAiB,GAAG/E,aAAa,iBAAkB,IAC/H5N,EAAKvB,OAAOe,EAAS,EAAGu5C,EAAW,IAEvC,GAAKx3C,KAAKvJ,OAAO4b,aAAe5T,EAAKnH,SAAW2E,EAAmB3E,OAK9D,CACD,IAAIijC,EAAe7gC,EAAY+E,GAC/B,GAAI87B,EAAajjC,OAAQ,CACrB,IAAI8jC,EAAab,EAAap8B,IAAI,SAAUV,GAAK,OAAOA,EAAE85C,KACrD/4C,QAAQvC,EAAmB,GAAGs7C,IAC/BE,EAAWrc,EAAap7B,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,SAC1Dv0C,EAAqBs+B,EAAar9B,OAAOk+B,EAAYqc,SAVrDx7C,EAAmB3E,OAASkgD,EAAWlgD,QACvC2E,EAAmBiB,OAAOjB,EAAmB3E,OAASkgD,EAAWlgD,OAAQkgD,EAAWlgD,QAgBhG,IAHsC,IAAlC0I,KAAK80C,kBAAkBx9C,QACvB0I,KAAK80C,kBAAkBv8C,KAAKyH,KAAKvJ,OAAO8G,SAAS2F,EAAKjJ,QAErD7C,EAAI,EAAGA,EAAIogD,EAAWlgD,OAAQF,IAAK,CACpC,IAAI+C,EAAWgC,YAAWq7C,EAAWpgD,IAgCrC,UA/BO+C,EAAStB,kBACTsB,EAASpB,gBACToB,EAASF,aACTE,EAASD,aACTC,EAASf,uBACTe,EAASd,oBACTc,EAASmE,eACX7G,oBAAkB0C,EAASm8C,uBACrBn8C,EAASm8C,cAEpBkB,EAAWpgD,GAAG+C,SAAWA,EACzBgB,EAAe6E,KAAK80C,kBAAkB19C,GAClCK,oBAAkB0D,KAClBA,EAAe6E,KAAK80C,kBAAkB19C,EAAI,IAE1C4I,KAAKjF,kBACAtD,oBAAkB+/C,EAAWpgD,GAAGyB,aACjCuE,EAAgBm6C,EAAcC,EAAWpgD,GAAGyB,WAAY,MAAOmH,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBy8C,EAAWpgD,KAGhHK,oBAAkB0D,KACnBH,EAAcG,EAAalB,OAEiB,QAA5C+F,KAAKvJ,OAAOmF,aAAaQ,gBAAwE,WAA5C4D,KAAKvJ,OAAOmF,aAAaQ,gBAC1E3E,oBAAkB+/C,EAAWpgD,GAAGyB,cAAuC,IAAxBmH,KAAK/E,gBACpDA,GAAiB,EACjBE,EAAe,MAGvBP,GAAaZ,MAAOw9C,EAAWpgD,GAAIiE,OAAQ,OAAS2E,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBC,EAAaC,OA7DvF,EA6DkHE,GAC/HF,EAAgB,KACgC,UAA5C+E,KAAKvJ,OAAOmF,aAAaQ,iBAA+B3E,oBAAkB+/C,EAAWpgD,GAAa,cACjGK,oBAAkBuI,KAAKvJ,OAAOqF,WAAwB,cAAMkE,KAAKjF,iBAIlE,IAAK,IAHD28C,EAAaz7C,EAAmBkC,IAAI,SAAUV,GAAK,OAAOA,EAAE85C,KAC3D/4C,QAAQg5C,EAAWpgD,GAAa,WAAEmgD,IACnCxiC,EAAW9Y,EAAmBy7C,GAAwB,aACjD59C,EAAI,EAAGA,EAAIib,EAASzd,OAAQwC,IAC7Bib,EAASjb,GAAGy9C,KAAkBC,EAAWpgD,GAAGmgD,IAC5Ct7C,EAAmBy7C,GAAwB,aAAEx6C,OAAOpD,EAAG,GAKvE,GAAIsB,EAAa6lB,GAAgB3pB,OAC7B,IAAKF,EAAI,EAAGA,EAAIgE,EAAa6lB,GAAgB3pB,OAAQF,IACjDwD,GAAaZ,MAAOoB,EAAa6lB,GAAgB7pB,GAAIiE,OAAQ,UAAY2E,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBC,EAAaC,OA7EhH,EA6E2IE,GAG5J6E,KAAKvJ,OAAO6G,cACZ,IAAK,IAAIwT,EAAM,EAAGA,EAAMrS,EAAKnH,OAAQwZ,IACjCrS,EAAKqS,GAAU,MAAIA,EACnB2H,WAAS,sBAAwBha,EAAKqS,GAAa,SAAI,SAAUA,EAAK9Q,KAAKvJ,QACtEgI,EAAKqS,GAAU,OAChB9Q,KAAKvJ,OAAO6G,WAAW/E,KAAKkG,EAAKqS,IAI7C9Q,KAAK80C,kBAAoB90C,KAAK40C,kBAAoB50C,KAAK+0C,aAAe/0C,KAAK60C,oBAAsB70C,KAAK/D,uBAE1Gy4C,EAAU93C,UAAUs5C,wBAA0B,SAAUj8C,GACpD,IAAIgO,EAAOjI,KAAKvJ,OAAOiB,KAAK+gC,cAC5B,IAAiD,UAA5Cz4B,KAAKvJ,OAAOmF,aAAaQ,gBAA0E,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,iBAC9E4D,KAAK/E,eAAiB,EAAG,CAC5B,IAAKxD,oBAAkBuI,KAAK+0C,aAAa/0C,KAAKhF,eAAiBgF,KAAK+0C,aAAa/0C,KAAKhF,aAAa9B,SAC/F,GAAI8G,KAAKvJ,OAAOsF,kBAAkBiE,KAAKwW,cAAclf,OAAS,GACvD0I,KAAKvJ,OAAOsF,kBAAkBiE,KAAKihB,gBAAgB3pB,QAEtD,GADA2C,GAASd,EAAoB6G,KAAK+0C,aAAa/0C,KAAKhF,cAAc1D,OAClB,UAA5C0I,KAAKvJ,OAAOmF,aAAaQ,eAA4B,CAErDnC,GADsB+F,KAAKw1C,2BAK/Bv7C,GAASd,EAAoB6G,KAAK+0C,aAAa/0C,KAAKhF,cAAc1D,OAGtE2C,GAASgO,EAAK3Q,SACd2C,EAAQgO,EAAK3Q,OAAS,GAE1B0I,KAAKw2C,iBAAiBx2C,KAAKvJ,OAAOiB,KAAKwE,yBACnC8D,KAAK20C,kBACL16C,GAAS+F,KAAK20C,iBAElB30C,KAAK20C,gBAAkB,EAE3B,OAAO16C,GAEXy6C,EAAU93C,UAAUu4C,qBAAuB,SAAU13C,GACjDA,EAAEyF,KAAKiG,QAAS,EAChB,IAAIitC,EAAUp2C,KAAKvJ,OAAOiB,KAAKqE,kBAC3Bya,KAEApe,OAAOC,KAAK+9C,GAAS9+C,SACrBkf,EAAe4/B,EAAQ5/B,cAE3B,IAAK,IAAIpf,EAAI,EAAGA,EAAIof,EAAalf,OAAQF,IACrCqG,EAAEwK,KAAK/K,OAAOsZ,EAAapf,GAAQ,MAAG,IAG9Cs9C,EAAU93C,UAAUw4C,cAAgB,SAAUlyC,GAG1CA,EAAU,MAAIlD,KAAKvJ,OAAOsnC,kBAAkB,GAAW,UAEpD2W,KC3lBPiD,GAAsB,WAMtB,SAASA,EAAKlhD,GACVuJ,KAAKwW,aAAe,eACpBxW,KAAKihB,eAAiB,iBACtBjhB,KAAK43C,iBAAmB,KACxB53C,KAAK63C,oBAAqB,EAC1Bj1C,OAAKC,OAAOi1C,QACZ93C,KAAKvJ,OAASA,EACduJ,KAAKjF,iBAAmBtD,oBAAkBhB,EAAOuG,iBACjDgD,KAAK+3C,uBAAyB,KAC9B/3C,KAAKg4C,sBACLh4C,KAAKi4C,gBAAkB,IAAIvD,GAAU10C,KAAKvJ,QAC1CuJ,KAAKqK,mBAi+BT,OAz9BAstC,EAAK/6C,UAAUmG,cAAgB,WAC3B,MAAO,QAMX40C,EAAK/6C,UAAUyN,iBAAmB,WAC9BrK,KAAKvJ,OAAO6T,GAAGsU,GAAmB5e,KAAK2F,WAAY3F,MACnDA,KAAKvJ,OAAO6T,GAAGilB,GAAkBvvB,KAAK4F,UAAW5F,MACjDA,KAAKvJ,OAAO6T,GAAG6mB,GAAiBnxB,KAAK6F,SAAU7F,MAC/CA,KAAKvJ,OAAO6T,GAAGsnB,GAA0B5xB,KAAK8F,kBAAmB9F,MACjEA,KAAKvJ,OAAO6T,GAAGylB,GAAiB/vB,KAAK+F,SAAU/F,MAC/CA,KAAKvJ,OAAO6T,GAAGmmB,GAAoBzwB,KAAKmG,YAAanG,MACrDA,KAAKvJ,OAAOiB,KAAK4S,GAAG4tC,GAAmBl4C,KAAKyG,WAAYzG,MACxDA,KAAKvJ,OAAOiB,KAAK4S,GAAG,iBAAkBtK,KAAKm4C,YAAan4C,MACxDA,KAAKvJ,OAAOiB,KAAK4S,GAAG,gBAAiBtK,KAAKo4C,aAAcp4C,MACxDA,KAAKvJ,OAAO6T,GAAG6lB,GAAiBnwB,KAAKiG,SAAUjG,MAC/CA,KAAKvJ,OAAO6T,GAAG,cAAetK,KAAKq4C,iBAAkBr4C,MACrDA,KAAKvJ,OAAO6T,GAAG,iBAAkBtK,KAAKq4C,iBAAkBr4C,MACxDA,KAAKvJ,OAAOiB,KAAK4S,GAAGguC,GAAkBt4C,KAAK8F,kBAAmB9F,MAC9DA,KAAKvJ,OAAOiB,KAAK4S,GAAG,WAAYtK,KAAKu4C,aAAcv4C,MACnDA,KAAKvJ,OAAOiB,KAAK4S,GAAG,cAAetK,KAAKw4C,eAAgBx4C,MACxDA,KAAKvJ,OAAO6T,GAAG,0BAA2BtK,KAAKy4C,wBAAyBz4C,MAExEA,KAAKvJ,OAAOiB,KAAK4S,GAAGouC,GAAwB14C,KAAK8G,gBAAiB9G,MAClEA,KAAKvJ,OAAOiB,KAAK4S,GAAGquC,GAA0B34C,KAAK+G,kBAAmB/G,MACtEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,mBAAoBtK,KAAK44C,eAAgB54C,MAC7DA,KAAKvJ,OAAOiB,KAAK4S,GAAG,mBAAoBtK,KAAK64C,eAAgB74C,OAEjE23C,EAAK/6C,UAAU27C,aAAe,SAAU96C,GACpCuC,KAAK84C,kBAAoBr7C,EAAE8D,QAE/Bo2C,EAAK/6C,UAAUi8C,eAAiB,SAAUE,GACtCA,EAAQ38C,eAAiB4D,KAAKvJ,OAAOmF,aAAaQ,eAClD28C,EAAQ/9C,YAAcgF,KAAKhF,YAC3B+9C,EAAQC,cAAgBh5C,KAAK43C,kBAEjCD,EAAK/6C,UAAUkK,gBAAkB,SAAU5D,GACvClD,KAAKvJ,OAAO2S,QAAQ6nB,EAAoB/tB,IAE5Cy0C,EAAK/6C,UAAUmK,kBAAoB,SAAU7D,GACH,SAAlClD,KAAKvJ,OAAOmF,aAAaC,MACzBmE,KAAKvJ,OAAO2S,QAAQ6R,EAAuB/X,IAOnDy0C,EAAK/6C,UAAU+N,oBAAsB,WAC7B3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI+T,GAAmB5e,KAAK2F,YACxC3F,KAAKvJ,OAAOoU,IAAI0kB,GAAkBvvB,KAAK4F,WACvC5F,KAAKvJ,OAAOoU,IAAIsmB,GAAiBnxB,KAAK6F,UACtC7F,KAAKvJ,OAAOoU,IAAI+mB,GAA0B5xB,KAAK8F,mBAC/C9F,KAAKvJ,OAAOoU,IAAI4lB,GAAoBzwB,KAAKmG,aACzCnG,KAAKvJ,OAAOiB,KAAKmT,IAAIqtC,GAAmBl4C,KAAKyG,YAC7CzG,KAAKvJ,OAAOiB,KAAKmT,IAAI,iBAAkB7K,KAAKm4C,aAC5Cn4C,KAAKvJ,OAAOiB,KAAKmT,IAAI,gBAAiB7K,KAAKo4C,cAC3Cp4C,KAAKvJ,OAAOoU,IAAIslB,GAAiBnwB,KAAKiG,UACtCjG,KAAKvJ,OAAOoU,IAAI,cAAe7K,KAAKq4C,kBACpCr4C,KAAKvJ,OAAOoU,IAAI,iBAAkB7K,KAAKq4C,kBACvCr4C,KAAKvJ,OAAOiB,KAAKmT,IAAI,cAAe7K,KAAKw4C,gBACzCx4C,KAAKvJ,OAAOiB,KAAKmT,IAAIytC,GAAkBt4C,KAAK8F,mBAC5C9F,KAAKvJ,OAAOoU,IAAI,0BAA2B7K,KAAKy4C,yBAChDz4C,KAAKvJ,OAAOiB,KAAKmT,IAAI6tC,GAAwB14C,KAAK8G,iBAClD9G,KAAKvJ,OAAOiB,KAAKmT,IAAI8tC,GAA0B34C,KAAK+G,mBACpD/G,KAAKvJ,OAAOiB,KAAKmT,IAAI,WAAY7K,KAAKu4C,cACtCv4C,KAAKvJ,OAAOiB,KAAKmT,IAAI,mBAAoB7K,KAAK44C,gBAC9C54C,KAAKvJ,OAAOiB,KAAKmT,IAAI,mBAAoB7K,KAAK64C,kBASlDlB,EAAK/6C,UAAUmN,QAAU,WACrB/J,KAAK2K,uBAOTgtC,EAAK/6C,UAAUq8C,oBAAsB,SAAUngB,GAC3C94B,KAAKvJ,OAAOiB,KAAKoE,WAAWm9C,oBAAoBngB,IAEpD6e,EAAK/6C,UAAUy7C,iBAAmB,SAAUn1C,GACxC,IAAIg2C,EAAY5gD,YAAU,aAAc4K,GACpCgkB,EAAY5uB,YAAU,OAAQ4gD,GAC9BC,EAAUn5C,KAAKvJ,OACfG,EAAUuiD,EAAQziD,WAAWE,QACjC,IAAKJ,EAAa2iD,IAAYviD,aAAmB+vB,sBAClB,SAA1BuyB,EAAUt5C,aAA+C,QAArBs5C,EAAU79C,SACN,UAAxC89C,EAAQv9C,aAAaQ,gBAAsE,UAAxC+8C,EAAQv9C,aAAaQ,gBAC1B,UAAxC+8C,EAAQv9C,aAAaQ,gBAC5B,GAAkB,gBAAd8qB,EAA6B,CAC7B,IAAIrd,EAAWpS,oBAAkByhD,EAAUv6C,OAASvG,OAAOC,KAAK6gD,EAAUv6C,KAAKrH,OAAS0I,KAAK/E,cACzFi+C,EAAUv6C,IAAIkL,SAAW,EACzBuvC,EAAY3hD,oBAAkBoS,KAA2B,IAAdA,GACwC,EAAnFsvC,EAAQj9C,wBAAwB2N,GAAUsvC,EAAQ79C,0BAA0B,IAChF69C,EAAQzhD,KAAK8f,MAAMM,UAAU,gBAAiBshC,QAE7C,GAAkB,mBAAdlyB,EAEL,IAAK,IADDmyB,EAAeF,EAAQzhD,KAAK8f,MAAMG,OAAOrgB,OACpCF,EAAI,EAAGA,EAAIiiD,EAAcjiD,IACW,kBAArC+hD,EAAQzhD,KAAK8f,MAAMG,OAAOvgB,GAAGQ,KAC7BuhD,EAAQzhD,KAAK8f,MAAMG,OAAOza,OAAO9F,GAK7C4I,KAAKvJ,OAAOolB,yBAAyC,mBAAdqL,GACvClnB,KAAKs5C,kBAAkBJ,GAEW,UAAlCl5C,KAAKvJ,OAAOmF,aAAaC,MAA8C,WAA1Bq9C,EAAUt5C,aACvDI,KAAKvJ,OAAO0d,OAAO,uBAG3BwjC,EAAK/6C,UAAU08C,kBAAoB,SAAUp2C,GACzC,GAA0B,SAArBA,EAAKtD,aAA0C,QAAhBsD,EAAK7H,QAA0C,WAArB6H,EAAKtD,YAA0B,CACzF,GAAgD,QAA5CI,KAAKvJ,OAAOmF,aAAaQ,iBAAoD,IAAxB4D,KAAK/E,eACjC,SAArBiI,EAAKtD,aAA0C,QAAhBsD,EAAK7H,OAAmB,CAC3D,IAAIk+C,EAAav5C,KAAKvJ,OAAOiB,KAAKge,gBAC9B8jC,EAAeD,EAAWr8C,OAAO,EAAG,GAAG,GACvCu8C,EAAoBz5C,KAAKhF,YACzBwhB,EAAcxc,KAAKvJ,OAAOyF,wBACkB,UAA5C8D,KAAKvJ,OAAOmF,aAAaQ,gBAA0E,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,iBAChFq9C,GAAqBtgD,EAAoBqjB,EAAYi9B,EAAoB,IAAIniD,QAEjFmiD,EAAgE,UAA5Cz5C,KAAKvJ,OAAOmF,aAAaQ,eAA6Bq9C,EAAoB,EAAIA,EAClGF,EAAWr8C,OAAOu8C,EAAmB,EAAGD,GACxC,IAAIE,EAAYl9B,EAAYtf,OAAO,EAAG,GAAG,GACzCsf,EAAYtf,OAAOu8C,EAAmB,EAAGC,GACzC15C,KAAK25C,8BAA8BD,EAAW15C,KAAKhF,aAEvD,IAAImV,EAAcnQ,KAAKvJ,OAAOiB,KAAKykC,iBAC/Byd,EAAoB55C,KAAKvJ,OAAOiB,KAAKmiD,uBACrCC,EAAU95C,KAAKvJ,OAAOk0B,uBAAuBovB,YAC5CD,IACDE,gBAAch6C,KAAKvJ,OAAOiB,KAAMsI,KAAKvJ,OAAOiB,KAAKge,gBAAiB1V,KAAKvJ,OAAOiB,KAAKmH,UAAW,GAC9FmB,KAAKi6C,YAAYj6C,KAAKvJ,OAAOiB,KAAKhB,WAAYsJ,KAAKvJ,OAAOoI,UAAWmB,KAAKvJ,OAAOyF,2BAEhF49C,GAAW95C,KAAKvJ,OAAOwI,mBAAqB,IAC7C+6C,gBAAch6C,KAAKvJ,OAAOiB,KAAMkiD,EAAmBzpC,EAAa,GAChEnQ,KAAKi6C,YAAYj6C,KAAKvJ,OAAOiB,KAAKhB,WAAYyZ,EAAanQ,KAAKvJ,OAAOyF,4BAInFy7C,EAAK/6C,UAAU+8C,8BAAgC,SAAUD,EAAWQ,GAChE,IAAI3yC,EAAQvH,KAGR2wC,EAAOh3B,KAAKC,KAAKsgC,EAAcl6C,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,UAC7Dn0B,EAAOs0B,EAAO,EAAIA,EAAO,EACzBwJ,EAAYD,GAAgB79B,EAAO,GAAKrc,KAAKvJ,OAAO6b,aAAak+B,SACjE4J,EAA0Bp6C,KAAKvJ,OAAOiB,KAAK2iD,qBAAiC,wBAChFD,EAAwB,GAAGl9C,OAAO,EAAG,GACrC,IAAIuB,EAAO27C,EAAwB/9B,GAC9B5kB,oBAAkBuI,KAAK7E,gBACxBsD,EAAKjB,OAAO,SAAUC,EAAGxD,GACjBwD,EAAE1E,WAAawO,EAAMpM,aAAapC,WAClCohD,EAAYlgD,MAGhB+F,KAAK7E,aAAa/B,iBAAmB4G,KAAK7E,aAAa9B,aAAa/B,QACxB,UAA5C0I,KAAKvJ,OAAOmF,aAAaQ,gBAA0E,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,kBAChF+9C,GAAahhD,EAAoB6G,KAAK7E,cAAc7D,SAGxD6iD,GAAan6C,KAAKvJ,OAAO6b,aAAak+B,WAEtC/xC,EAAO27C,EADP/9B,GAAQ,GAER89B,EAAYA,EAAYn6C,KAAKvJ,OAAO6b,aAAak+B,UAAY,EAAI2J,EAAYn6C,KAAKvJ,OAAO6b,aAAak+B,SAAW,GAErH2J,EAAwD,UAA5Cn6C,KAAKvJ,OAAOmF,aAAaQ,eAA6B+9C,EAAY,EAAIA,EAClF17C,EAAKvB,OAAOi9C,EAAW,EAAGT,GAC1B15C,KAAKvJ,OAAOiB,KAAK2iD,qBAA0C,yBAE/D1C,EAAK/6C,UAAUkJ,kBAAoB,SAAU5C,GACzC,IAAI3B,EAAS2B,EAAK3B,OAClB,IAAI9J,oBAAkB8J,EAAO2J,QAAQ,kBAG/BlL,KAAKvJ,OAAOiB,KAAKkE,aAAyB,eAAKoE,KAAKvJ,OAAOiB,KAAKy6B,OAAtE,CAGA,IAAIzyB,EAASM,KAAKvJ,OAAOiB,KAAKk+C,kBAAkBr0C,EAAO2J,QAAQ,gBAAgBmB,aAAa,kBAC5F,GAAsC,SAAlCrM,KAAKvJ,OAAOmF,aAAaC,OAAoBmE,KAAKs6C,WAAa56C,IAAWA,EAAO0E,cACjFpE,KAAKvJ,OAAOmF,aAAaqE,cAAgBP,EAAOO,eAAkBsB,EAAOgH,UAAUC,SAAS,sBAC5FjH,EAAOgH,UAAUC,SAAS,uBAA0BxI,KAAKvJ,OAAOmF,aAAamV,oBAAqB,CAGlG,GAFA/Q,KAAKs6C,WAAY,EACjBt6C,KAAKvJ,OAAOiB,KAAK+I,eAAgB4qB,iBAAkBnoB,EAAK2G,WAAY,GAChE7J,KAAKvJ,OAAO2H,qBAAsB,CAClC,IAAI+Q,EAAKnE,eAAa9H,EAAK3B,OAAQ,SACnCvB,KAAK43C,iBAAmBzoC,EAAG9C,aAAa,iBACxC8C,EAAGjC,aAAa,gBAAiBiC,EAAGtF,SAAW,IAEnD7J,KAAKu6C,mBAAmB,YAGhC5C,EAAK/6C,UAAU29C,mBAAqB,SAAU1+C,GAC1CmE,KAAKvJ,OAAOiB,KAAK+I,eAAgB7E,cAAgBC,KAAMA,KAAU,GAC9CvD,YAAU,gBAAiB0H,KAAKvJ,OAAOiB,KAAKoE,YAClDoG,MAAMlC,KAAKvJ,OAAOiB,KAAKoE,YACpCkE,KAAKvJ,OAAOiB,KAAKy6B,QAAS,GAE9BwlB,EAAK/6C,UAAUg8C,eAAiB,WACxB54C,KAAKvJ,OAAO2H,sBAA0D,SAAlC4B,KAAKvJ,OAAOmF,aAAaC,OAC7DmE,KAAKs6C,WAAY,EACjBt6C,KAAKu6C,mBAAmB,YAGhC5C,EAAK/6C,UAAU6J,WAAa,SAAUvD,GAC9BlD,KAAKs6C,YACLt6C,KAAKw6C,SAAWt3C,EAAK7H,QAEL,OAAhB6H,EAAK7H,QACL2E,KAAK8F,kBAAkB5C,GAEP,WAAhBA,EAAK7H,QACL2E,KAAKvJ,OAAO69B,aAGpBqjB,EAAK/6C,UAAUw6C,eAAiB,SAAUp9C,UAE/BgG,KAAKvJ,OAAe,yBAAEuD,UAEtBgG,KAAKvJ,OAAS,mBAAEuD,IAE3B29C,EAAK/6C,UAAUqJ,SAAW,SAAU/C,GAChC,IAAIqE,EAAQvH,KAERy6C,EAAOv3C,EAAY,QAoBvB,UAnBOA,EAAY,QACflD,KAAKvJ,OAAO2H,uBAAyB3G,oBAAkBuI,KAAK43C,mBAA+C,OAA1B53C,KAAK43C,mBACtF10C,EAAKvE,IAAIuO,aAAa,gBAAiBlN,KAAK43C,kBAC5C53C,KAAK43C,sBAAmBpiC,GAEN,UAAlBxV,KAAKw6C,UACLx6C,KAAKvJ,OAAO2S,QAAQ+mB,GAAiBjtB,EAAM,SAAUw3C,GAC5CA,EAAavxC,QAA6C,SAAnC5B,EAAM9Q,OAAOmF,aAAaC,KAG7C6+C,EAAavxC,QAA6C,SAAnC5B,EAAM9Q,OAAOmF,aAAaC,OACtD0L,EAAM+yC,WAAY,EAClB/yC,EAAMgzC,mBAAmB,WAJzBhzC,EAAM2uB,mBAAmB,QAMxBz+B,oBAAkBgjD,IACnBA,EAAKxrB,QAAQyrB,KAIrB16C,KAAK84C,oBAAsB94C,KAAK84C,kBAAkBvwC,UAAUC,SAAS,qBACrExI,KAAK84C,kBAAkBvwC,UAAUC,SAAS,uBAAyBxI,KAAK84C,kBAAkBvwC,UAAUC,SAAS,kBAG7G,OAFAtF,EAAKiG,QAAS,OACdnJ,KAAK84C,kBAAoB,MAGS,SAAlC94C,KAAKvJ,OAAOmF,aAAaC,OACH,QAAlBmE,KAAKw6C,UAAwC,aAAlBx6C,KAAKw6C,SAChCx6C,KAAKw6C,SAAW,KAEO,UAAlBx6C,KAAKw6C,WACVt3C,EAAKiG,QAAS,EACdnJ,KAAKw6C,SAAW,KAChB/hC,WAAS,kBAAkB,EAAOzY,KAAKvJ,SAEtCyM,EAAKyyC,aAAa11C,eACnBiD,EAAKiG,QAAS,KAO1BwuC,EAAK/6C,UAAUs5B,mBAAqB,SAAUoL,GAC1C,IAAK7pC,oBAAkBuI,KAAKvJ,OAAOiB,KAAKmyB,eAAgB,CACpD,IAAI8wB,EAAY36C,KAAKvJ,OAAO0a,QAAQ8D,GAAK,gBACzCjV,KAAKvJ,OAAOiB,KAAKmyB,cAAcuM,aAAaukB,EAAY,MAAOA,EAAY,OAAQA,EAAY,UAAuB,SAAZrZ,GAC1GthC,KAAKvJ,OAAOiB,KAAKmyB,cAAcuM,aAAaukB,EAAY,SAAUA,EAAY,UAAuB,SAAZrZ,KAGjGqW,EAAK/6C,UAAUuJ,YAAc,WACzB,GAAsC,SAAlCnG,KAAKvJ,OAAOmF,aAAaC,KAAiB,CAC1C,IAAI++C,EAAcv8C,WAAS,yBAA0B2B,KAAKvJ,OAAOiB,KAAKoE,YAClE++C,EAAW76C,KAAKvJ,OAAO2f,iBAAiBwkC,EAAY/wC,SAAU7J,KAAKvJ,OAAO2I,iBAC9EY,KAAKvJ,OAAO6I,aAAaC,YACrBd,KAAMm8C,EAAYhvC,QAClBpM,KAAMq7C,EACNn7C,OAAQM,KAAKvJ,OAAOiB,KAAKiI,aAAaK,KAAKvJ,OAAO2I,mBAEtDY,KAAKu6C,mBAAmB,UACxBv6C,KAAKs6C,WAAY,EAEiB,UAAlCt6C,KAAKvJ,OAAOmF,aAAaC,MACzBmE,KAAKvJ,OAAO0d,OAAO,yBAG3BwjC,EAAK/6C,UAAU47C,eAAiB,SAAUt1C,GAClChM,EAAgB8I,KAAKvJ,SAA6C,SAAlCuJ,KAAKvJ,OAAOmF,aAAaC,MAAmC,SAAhBqH,EAAK7H,SACjF2E,KAAK61B,WAAW3yB,EAAMA,EAAK2G,UAC3B7J,KAAK86C,cAAc53C,EAAMA,EAAKvE,IAAKuE,EAAK2G,YAGhD8tC,EAAK/6C,UAAUmJ,SAAW,SAAU7C,GAChC,IAAIqE,EAAQvH,KACZ,GAAsC,SAAlCA,KAAKvJ,OAAOmF,aAAaC,MAAmBmE,KAAKvJ,OAAO0a,QAAQlG,cAAc,QAAS,CACvF/H,EAAKiG,QAAS,EAEdsP,WAAS,UAAU,EAAOzY,KAAKvJ,OAAOiB,MACtC+gB,WAAS,kBAAkB,EAAMzY,KAAKvJ,QACtCyM,EAAK0I,QAAQ1I,EAAKhI,YAAcgI,EAAKlJ,MACrC,IAAIyrB,EAEAA,EADAhuB,oBAAkByL,EAAK1D,MACfQ,KAAKvJ,OAAOiB,KAAKoE,WAAqB,WAAEi/C,KAAKz1B,cAAc2gB,WAG3D/iC,EAAK1D,KAAKymC,WAEtB,IAAI+U,EACAC,EAAgBj7C,KAAKvJ,OAAO6E,0BAChC,GAAI7D,oBAAkBguB,GAClBzlB,KAAKvJ,OAAOiB,KAAKwE,wBAAwBsB,OAAO,SAAUC,EAAGrG,GACrDqG,EAAEw9C,EAAc,MAAQ/3C,EAAK0I,QAAQqvC,EAAc,MACnDD,EAAa5jD,SAKpB,CACD,IAAIiZ,EAAUrQ,KAAKvJ,OAAO6Z,4BAA8B,GACpDtQ,KAAKvJ,OAAO8Z,6BAA+B,EAGvCyqC,EAFJ3qC,GAC8C,IAA1CrQ,KAAKvJ,OAAOoI,UAAUL,QAAQinB,GACjBzlB,KAAKvJ,OAAOoI,UAAUL,QAAQinB,IAEe,IAArDzlB,KAAKvJ,OAAO+Z,qBAAqBhS,QAAQinB,GACjCzlB,KAAKvJ,OAAO+Z,qBAAqBhS,QAAQinB,GAGzCzlB,KAAKvJ,OAAO0lC,iBAAiB39B,QAAQinB,IAIE,IAA1CzlB,KAAKvJ,OAAOoI,UAAUL,QAAQinB,IAAkBzlB,KAAKvJ,OAAOwI,mBAAqB,EAC3Fe,KAAKvJ,OAAOiB,KAAKykC,iBAAiB39B,QAAQinB,GAASzlB,KAAKvJ,OAAOoI,UAAUL,QAAQinB,GAG7F,IAAI8W,KAMJ,GALApgC,SAAOogC,EAAKr5B,GACZq5B,EAAIpzB,QAAS,EACbozB,EAAIp5B,KAAO,OACXsiB,EAAQzlB,KAAKvJ,OAAOiB,KAAKmH,UAAU4mB,EAAM5b,UACzC7J,KAAKvJ,OAAO2S,QAAQ6nB,EAAoBsL,GACnCA,EAAIpzB,OAiCLnJ,KAAKvJ,OAAOiB,KAAKy6B,QAAS,OA7B1B,GAHK1M,EAAM5b,WAAa7J,KAAKvJ,OAAOyF,wBAAwB5E,OAAS,GAAwB,QAAlB0I,KAAKw6C,WAC5Ex6C,KAAKk7C,cAAe,GAEnB1kD,EAAawJ,KAAKvJ,SACjBuJ,KAAKvJ,OAAOC,sBAAsBC,eAAeqJ,KAAKvJ,OAAOC,WAAWE,mBAAmB+vB,qBAa5F,GAAInwB,EAAawJ,KAAKvJ,SACtBuJ,KAAKvJ,OAAOC,sBAAsBC,eAAeqJ,KAAKvJ,OAAOC,WAAWE,mBAAmB+vB,oBAAoB,CAChH,IAAInP,EAAQxX,KAAKvJ,OAAOiB,KAAK8f,MAEtBxX,KAAKvJ,OAAOiB,KAAKhB,WAAWykD,OAAOF,EAAc,GAAI/3C,EAAK0I,QAAS4L,EAAM4jC,UAAW5jC,EAAOtU,EAAKm4C,eAClGjjC,KAAK,SAAU3a,GACXhG,oBAAkBgG,KACnByF,EAAK0I,QAAQ1I,EAAKhI,YAAcuC,EAAEyF,EAAKhI,aAE3CqM,EAAMsuB,WAAW3yB,EAAM83C,GACvBzzC,EAAMuzC,cAAc53C,EAAMuiB,EAAOu1B,WAtBrC,GAAI9jD,EAAgB8I,KAAKvJ,QAAS,CAC9B,IACI6kD,GAAa17C,YAAa,OAAQnB,KAAMyE,EAAK0I,QAASvQ,OAAQ,OAAQsD,IAAK8mB,EAC3E5b,SAAUmxC,EAAYpvC,QAAS1I,EAAK0I,QAAS1Q,WAAYgI,EAAKhI,WAC9DqgD,kBAAmB,KAAMC,oBAAqB,MAClDx7C,KAAKvJ,OAAOiB,KAAK+iB,gBAA4B,aAAE6gC,EAAUt7C,KAAKvJ,OAAOiB,KAAK8f,YAG1ExX,KAAK61B,WAAW3yB,EAAM83C,GACtBh7C,KAAK86C,cAAc53C,EAAMuiB,EAAOu1B,KAsBpDrD,EAAK/6C,UAAUk+C,cAAgB,SAAU53C,EAAMvE,EAAKkL,GAChD,IAAI4xC,EACAz7C,KAAKvJ,OAAOiB,KAAKgkD,iBACjB17C,KAAKvJ,OAAOiB,KAAKgkD,gBAAgBpqB,QAAQpuB,EAAK0I,SAElD5L,KAAKvJ,OAAOiB,KAAKoE,WAAW6/C,gBAAgB37C,KAAKvJ,OAAOiB,KAAK68B,iBAAiBrxB,EAAKhI,cACnF8E,KAAKvJ,OAAOiB,KAAKoE,WAAW8/C,QAAQ7xC,UACd,QAAlB/J,KAAKw6C,UAAwC,aAAlBx6C,KAAKw6C,WAChCx6C,KAAKu6C,mBAAmB,UACxBv6C,KAAKs6C,WAAY,GAErBt6C,KAAKk2B,mBAAmB,QACVl2B,KAAKvJ,OAAO6Z,4BAA8B,GACpDtQ,KAAKvJ,OAAO8Z,6BAA+B,GAGvCkrC,EADAv4C,EAAK1D,KAAK0L,QAAQ,0BAA4BhI,EAAK1D,KAAK0L,QAAQ,0BACzDlL,KAAKvJ,OAAOiB,KAAKmH,UAAUgL,GAE7B3G,EAAK1D,KAAK0L,QAAQ,qBAAuBhI,EAAK1D,KAAK0L,QAAQ,qBACzDlL,KAAKvJ,OAAOiB,KAAKykC,iBAAiBtyB,GAGlC7J,KAAKvJ,OAAOiB,KAAK8Y,qBAAqB3G,GAEjD0D,eAAakuC,IAAQ,cAAe,eACpCluC,cAAYkuC,EAAK/yC,iBAAiB,eAAgB,oBAAqB,iBAElE1I,KAAKvJ,OAAOwI,mBAAqB,IAElCw8C,EADAv4C,EAAK1D,KAAK0L,QAAQ,oBAAsBhI,EAAK1D,KAAK0L,QAAQ,oBACnDlL,KAAKvJ,OAAOiB,KAAKmH,UAAUgL,GAG3B7J,KAAKvJ,OAAOiB,KAAKykC,iBAAiBtyB,GAE7C0D,eAAakuC,IAAQ,cAAe,eACpCluC,cAAYkuC,EAAK/yC,iBAAiB,eAAgB,oBAAqB,iBAE3E6E,eAAa5O,IAAO,cAAe,eACnC4O,cAAY5O,EAAI+J,iBAAiB,eAAgB,oBAAqB,iBAC/B,IAAnC1I,KAAKvJ,OAAwB,iBAC7BuJ,KAAKvJ,OAAOiB,KAAKg/C,YAAYmF,eAEjCjhD,GAAaZ,MAAOkJ,EAAK0I,QAASvQ,OAAQ,QAAU2E,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBiF,KAAKhF,YAAagF,KAAK/E,cAAeiI,EAAKhI,YAC7HyD,EAAIkL,WAAa7J,KAAKvJ,OAAOyF,wBAAwB5E,OAAS,GAAwB,UAAlB0I,KAAKw6C,WAC1Ex6C,KAAKw6C,SAAW,MAEpB,IAAIsB,GACA34C,KAAM,OAAQzD,OAAQM,KAAKvJ,OAAO89B,iBAAiBrxB,EAAKhI,YAAauD,KAAMyE,EAAK0I,QAChFmwC,aAAc74C,EAAKm4C,cAAe18C,IAAKA,EAAK4C,OAAQ2B,EAAK1D,MAEzDQ,KAAKvJ,OAAOykB,WAAW/c,IAAI,SAAUizB,GAAM,OAA+B,IAAxBA,EAAGC,mBAA8B/5B,QACnF0I,KAAKvJ,OAAOiB,KAAK45B,UAErBtxB,KAAKvJ,OAAO2S,QAAQ6R,EAAuB6gC,IAE/CnE,EAAK/6C,UAAUu7C,YAAc,YACpBn4C,KAAKvJ,OAAOiB,KAAKy6B,QAAUnyB,KAAKs6C,WAA+B,QAAlBt6C,KAAKw6C,UAAwD,SAAlCx6C,KAAKvJ,OAAOmF,aAAaC,OAC7FmE,KAAKvJ,OAAOmF,aAAa82B,iBAM1B1yB,KAAKk2B,mBAAmB,SALxBl2B,KAAKu6C,mBAAmB,UACxBv6C,KAAKs6C,WAAY,EACjBt6C,KAAKw6C,SAAW,QAO5B7C,EAAK/6C,UAAUi5B,WAAa,SAAU3yB,EAAM2G,GACxC7J,KAAKvJ,OAAOiB,KAAKoE,WAAW+5B,WAAWhsB,EAAU3G,EAAKhI,WAAYgI,EAAK0I,QAAQ1I,EAAKhI,aACpF8E,KAAKvJ,OAAOiB,KAAKge,gBAAgB7L,GAAUpL,KAAOyE,EAAK0I,SAE3D+rC,EAAK/6C,UAAU+I,WAAa,SAAU9K,EAASK,GAC3CN,EAAWC,EAASmF,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBiF,KAAKhF,YAAagF,KAAK/E,cAAeC,EAAY8E,KAAK7E,cAC9G6E,KAAKvJ,OAAO6G,cAGZ,IAAK,IAFDmB,EAAOuB,KAAKvJ,OAAOiB,KAAKhB,sBAAsBC,cAC9CqJ,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOwE,KAAKvJ,OAAOiB,KAAKhB,WAC1DU,EAAI,EAAGA,EAAIqH,EAAKnH,OAAQF,IAAK,CAClCqH,EAAKrH,GAAG6C,MAAQ7C,EAChB,IAAIQ,EAAMoI,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GACjDT,EAAQb,MAAMpC,KAAS6G,EAAKrH,GAAGQ,IACR,QAAnBiD,EAAQQ,SACRoD,EAAKrH,GAAG8C,MAAQ8F,KAAKg4C,mBAAmB99C,MACxCuE,EAAKrH,GAAG+C,SAAW6F,KAAKg4C,mBAAmB79C,SAC3CsE,EAAKrH,GAAG2B,SAAWiH,KAAKg4C,mBAAmBj/C,SACtCtB,oBAAkBuI,KAAKg4C,mBAAmBn/C,cAC3C4F,EAAKrH,GAAGyB,WAAamH,KAAKg4C,mBAAmBn/C,WAC7C4F,EAAKrH,GAAGkH,eAAiB0B,KAAKg4C,mBAAmB15C,gBAErDG,EAAKrH,GAAGiC,aAAe2G,KAAKg4C,mBAAmB3+C,cAGvDof,WAAS,sBAAwBha,EAAKrH,GAAG2B,SAAW,SAAU3B,EAAG4I,KAAKvJ,QACtE,IAAIG,EAAUoJ,KAAKvJ,OAAOC,WAAWE,SAChCJ,EAAawJ,KAAKvJ,SAAWG,aAAmB+vB,sBACjDlO,WAAS,sBAAwBha,EAAKrH,GAAG2B,SAAU0F,EAAKrH,GAAI4I,KAAKvJ,QAEhEgI,EAAKrH,GAAG8C,OACT8F,KAAKvJ,OAAO6G,WAAW/E,KAAKkG,EAAKrH,IAGlB,QAAnByD,EAAQQ,QAAmD,MAA/B2E,KAAK+3C,yBACjC/3C,KAAKvJ,OAAOgK,eAAgB7E,cAAgBQ,eAAgB4D,KAAK+3C,0BAA4B,GAC7F/3C,KAAK+3C,uBAAyB,OAGtCJ,EAAK/6C,UAAUq9C,YAAc,SAAUx7C,EAAMwJ,EAAMhQ,GAC/C,IAAK,IAAI6B,EAAI,EAAGA,EAAIkG,KAAKvJ,OAAOgiC,cAAcnhC,OAAQwC,IAAK,CACvD,IAAIkiD,EAAQ/jD,EAAQ6B,GACpB,IAAKrC,oBAAkBukD,GAAQ,CAC3B,IAAI/hD,EAAQoE,WAAS,sBAAwB29C,EAAMjjD,SAAW,SAAUiH,KAAKvJ,QAE7E,GADAulD,EAAM/hD,MAAQA,GACTxC,oBAAkBukD,EAAMnjD,YAAa,CACtC,IAAImxC,EAAc3rC,WAAS,sBAAwB29C,EAAMnjD,WAAWE,SAAW,SAAUiH,KAAKvJ,QAC9FulD,EAAMnjD,WAAWoB,MAAQ+vC,IAIrC,IAAIz7B,GAAS,EACT0tC,EAAej8C,KAAKvJ,OAAO2I,gBAC/B,GAAIY,KAAKvJ,OAAOwI,mBAAqB,EAEjC,IAAK,IADDQ,EAAQwI,EAAK,GAAGS,iBAAiB,cAC5BwzC,EAAI,EAAGA,EAAIz8C,EAAMnI,OAAQ4kD,IAC9B,GAAIz8C,EAAMy8C,GAAG3zC,UAAUC,SAAS,yBAA0B,CACtDyzC,EAAeC,EACf,MAIZ,IAAK,IAAIx/C,EAAI,EAAGA,EAAIsD,KAAKvJ,OAAOoI,UAAUvH,OAAQoF,IAAK,CAC9CuL,EAAKvL,GAAG6L,UAAUC,SAAS,gBAC5B+F,IAEJ,IAAI4tC,EAAQlkD,EAAQsW,GACpB,IAAK9W,oBAAkB0kD,GAAQ,CACvBliD,EAAQkiD,EAAMliD,MAAlB,IACIC,EAAQiiD,EAAMjiD,MACdyE,EAAMsJ,EAAKvL,GACVjF,oBAAkB0kD,EAAMtjD,cACzBoB,EAAQoE,WAAS,sBAAwB89C,EAAMtjD,WAAWE,SAAW,SAAUiH,KAAKvJ,SAExF,IAAI6f,EAAW3X,EAAIc,MAAMw8C,GACzB,IAAKxkD,oBAAkB6e,GAAW,CAC9B,IAAS4lC,EAAI,EAAGA,EAAI5lC,EAAS/N,UAAUjR,OAAQ4kD,IAAK,CAChD,IAAIliD,EAAQsc,EAAS/N,UAAU2zC,GAG3B9mC,EAASpb,EAAMuP,MAFN,mBAGTgU,EAAUvjB,EAAMuP,MAFN,yBAGA,MAAV6L,GACA7H,eAAa+I,GAAWtc,GAEb,MAAXujB,GACAhQ,eAAa+I,GAAWtc,GAG3BiO,EAAKvL,GAAG6L,UAAUC,SAAS,eAI5B0I,YAAUoF,GAAW,uBAAyBrc,EAAQ,QAAUC,GAHhEgX,YAAUoF,GAAW,iBAAmBrc,EAAQ,QAAUC,OAS9Ey9C,EAAK/6C,UAAUiJ,SAAW,WACtB,IAAI8vB,EACA17B,EAAQ+F,KAAKhF,YACb/C,EAAU+H,KAAKvJ,OAAOiB,KAAKwE,wBACO,UAAlC8D,KAAKvJ,OAAOmF,aAAaC,OACzB5B,EAAQ+F,KAAKi4C,gBAAgB3C,iBAC7Bt1C,KAAK/E,cAAgB+E,KAAKi4C,gBAAgB1C,oBACtCv1C,KAAKvJ,OAAOsF,kBAAkBiE,KAAKwW,cAAclf,OAAS,GACvD0I,KAAKvJ,OAAOsF,kBAAkBiE,KAAKihB,gBAAgB3pB,UACtDW,EAAU+H,KAAKi4C,gBAAgB5C,oBAGvC,IAAIptC,EAAOjI,KAAKvJ,OAAOiB,KAAK+gC,cACxB2jB,EAAiBn0C,EAAK3Q,QAAU2Q,EAAK,GAAGoE,aAAa,iBAAmB,EACxEgwC,EAAgBp0C,EAAK3Q,QAAU2Q,EAAKA,EAAK3Q,OAAS,GAAG+U,aAAa,iBAAmB,EACrFiwC,EAAct8C,KAAK/E,eAAiBmhD,GAAkBp8C,KAAK/E,eAAiBohD,EAC5EE,EAAmBv8C,KAAKvJ,OAAO2H,sBAAwB4B,KAAKhF,aAAe,GAA+B,OAA1BgF,KAAK43C,iBACzF,GAAsC,WAAlC53C,KAAKvJ,OAAOmF,aAAaC,KAAmB,CAC5C,GAAgD,UAA5CmE,KAAKvJ,OAAOmF,aAAaQ,eACzBu5B,EAAW,cAEV,IAAiD,UAA5C31B,KAAKvJ,OAAOmF,aAAaQ,gBAA0E,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,kBAClF4D,KAAK/E,eAAiB,GAAKshD,IAAqBD,IACpD3mB,EAAW,SACNl+B,oBAAkBQ,EAAQgC,KAAWhC,EAAQgC,GAAOf,UACrD,GAAsC,UAAlC8G,KAAKvJ,OAAOmF,aAAaC,OAAqBmE,KAAKvJ,OAAOsF,kBAAkBiE,KAAKwW,cAAclf,OAAS,GACrG0I,KAAKvJ,OAAOsF,kBAAkBiE,KAAKihB,gBAAgB3pB,SAEtD,GADA2C,GAASd,EAAoBlB,EAAQgC,IAAQ3C,OACG,UAA5C0I,KAAKvJ,OAAOmF,aAAaQ,eAA4B,CAErDnC,GADsB+F,KAAKi4C,gBAAgBzC,2BAK/Cv7C,GAASd,EAAoBlB,EAAQgC,IAAQ3C,OAIzD,IAAK0I,KAAK/E,eAAiB,GAAKshD,IAAqBD,IAC7CriD,GAAsD,UAA5C+F,KAAKvJ,OAAOmF,aAAaQ,gBACY,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,gBAA8B,CAC1DnC,GAASgO,EAAK3Q,OAAS,IACvB2C,EAAQgO,EAAK3Q,OAAS,GAE1B,IACIkiD,EAAex5C,KAAKvJ,OAAOiB,KAAKqkB,cAAe,KAAE,GACjDygC,EAAkB5nB,SAAS6nB,cAC/Bx0C,EAAKhO,EAAQ,GAAG07B,GAAU1tB,EAAK,IAC/BwQ,WAAS,aAAcxe,EAAQ,EAAG+F,KAAKi4C,iBACvC,IAAIhC,EAA6D,UAA5Cj2C,KAAKvJ,OAAOmF,aAAaQ,eAA6BnC,EAAQA,EAAQ,EACrD,UAAlC+F,KAAKvJ,OAAOmF,aAAaC,OACzBmE,KAAKvJ,OAAOiB,KAAKqkB,cAAe,KAAE7e,OAAO,EAAG,GAC5C8C,KAAKvJ,OAAOiB,KAAKqkB,cAAe,KAAE7e,OAAO+4C,EAAgB,EAAGuD,IAEhE,IAAInpC,EAAUrQ,KAAKvJ,OAAO6Z,4BAA8B,GACpDtQ,KAAKvJ,OAAO8Z,6BAA+B,EAC/C,GAAIvQ,KAAKvJ,OAAOuI,YAAcgB,KAAKvJ,OAAOwI,oBAAsBe,KAAKvJ,OAAOwc,eAAiB5C,EAAQ,CACjG,IAAIF,EAAcnQ,KAAKvJ,OAAO4Y,qBAE1BqtC,EAAqB18C,KAAKvJ,OAAOiB,KAAKge,gBAAgB,GAE1D,GADAvF,EAAYlW,EAAQ,GAAG07B,GAAUxlB,EAAY,IACzCE,EAAQ,CACR,IAAIssC,EAAkB38C,KAAKvJ,OAAOynC,yBAClCye,EAAgB1iD,EAAQ,GAAG07B,GAAUgnB,EAAgB,IAEnB,UAAlC38C,KAAKvJ,OAAOmF,aAAaC,OACzBmE,KAAKvJ,OAAOiB,KAAKqkB,cAAmB,WAAE7e,OAAO,EAAG,GAChD8C,KAAKvJ,OAAOiB,KAAKqkB,cAAmB,WAAE7e,OAAO+4C,EAAgB,EAAGyG,IAEpEjkC,WAAS,aAAcxe,EAAQ,EAAG+F,KAAKi4C,iBAE3C,GAAsC,QAAlCj4C,KAAKvJ,OAAOmF,aAAaC,MAAoD,SAAlCmE,KAAKvJ,OAAOmF,aAAaC,KAAiB,CAErF,IAAK,IADD+gD,EAAS58C,KAAKvJ,OAAOiB,KAAKuiB,kBAAkBvR,iBAAiB,gBACxDtR,EAAI,EAAGA,EAAIwlD,EAAOtlD,OAAQF,IAC/BwlD,EAAOxlD,GAAGqxB,SAEdhQ,WAAS,gBAAkBzY,KAAKvJ,OAAOiB,KAAKoE,WAAW8/C,SAEvDW,IACAv8C,KAAK43C,iBAAmB,MAE5B4E,EAAgBK,SAGxB,GAAsC,UAAlC78C,KAAKvJ,OAAOmF,aAAaC,OAAqBpE,oBAAkBuI,KAAKhF,eAAsC,IAAtBgF,KAAKhF,cAC1Ff,EAAQ+F,KAAKi4C,gBAAgB3C,iBAC7Bt1C,KAAK/E,cAAgB+E,KAAKi4C,gBAAgB1C,mBACtCv1C,KAAKvJ,OAAOqF,WAA+B,oBAAG,CAC9C,IAAIoH,GACA7H,OAAQ,MACRoD,KAAMuB,KAAKvJ,OAAOsF,kBAAgC,aAAE,GACpD9B,MAAOA,EACP6iD,WAAY,GAEhB98C,KAAKvJ,OAAOqF,WAAWihD,aAAa75C,GACpClD,KAAKvJ,OAAOqF,WAAWm8C,gBAAmC,kBAAE1/C,KAAKyH,KAAKvJ,OAAOqF,WAAWm8C,gBAA8B,cACtHj4C,KAAKvJ,OAAOqF,WAAWm8C,gBAAmC,kBAAE1/C,KAAK2K,EAAW,QAsBxFy0C,EAAK/6C,UAAUgJ,UAAY,SAAU1C,GACjC,GAAyB,YAArBA,EAAKtD,aAA6BI,KAAKs6C,UACvCp3C,EAAKiG,QAAS,OAGlB,GAAsC,SAAlCnJ,KAAKvJ,OAAOmF,aAAaC,MAAwC,cAArBqH,EAAKtD,YAArD,CAIA,GAAII,KAAK84C,oBAAsB94C,KAAK84C,kBAAkBvwC,UAAUC,SAAS,qBACrExI,KAAK84C,kBAAkBvwC,UAAUC,SAAS,uBAAyBxI,KAAK84C,kBAAkBvwC,UAAUC,SAAS,YAG7G,OAFAtF,EAAKiG,QAAS,OACdnJ,KAAK84C,kBAAoB,MAG7B,GAAyB,WAArB51C,EAAKtD,YAA0B,CAC/B,IAAIg8B,EAAS14B,EAAKzE,KAClB,GAAIhH,oBAAkByL,EAAKzE,KAAK,GAAG1F,UAU/B,IAAK,IATDikD,EAAgBh9C,KAAKvJ,OAAO6E,0BAC5BqB,EAAU,SAAUvF,GACpB2jC,EAAOtkC,OAAO8G,SAASC,OAAO,SAAUC,GAChCA,EAAEu/C,EAAc,MAAQ95C,EAAKzE,KAAKrH,GAAG4lD,EAAc,MACnDphB,EAAOxkC,GAAKqG,MAIpBs9B,EAAS/6B,KACJ5I,EAAI,EAAGA,EAAIwkC,EAAOtkC,OAAQF,IAC/BuF,EAAQvF,GAGhB,IAASA,EAAI,EAAGA,EAAIwkC,EAAOtkC,OAAQF,IAAK,CACpC4I,KAAKo3C,eAAexb,EAAOxkC,GAAG2B,UAE9B,IAAK,IADD89C,EAAS19C,EAAoByiC,EAAOxkC,IAC/BqK,EAAI,EAAGA,EAAIo1C,EAAOv/C,OAAQmK,IAC/BzB,KAAKo3C,eAAeP,EAAOp1C,GAAG1I,UAElCmK,EAAKzE,KAAOyE,EAAKzE,KAAKnF,OAAOu9C,IAGrC,GAAyB,QAArB3zC,EAAKtD,aAA0BI,KAAK63C,qBAAuB73C,KAAKvJ,OAAO2H,sBAAwB4B,KAAKvJ,OAAOolB,yBAA2B,CAKtI,KAJ6C,IAAvC7b,KAAKvJ,OAAOiB,KAAK2zB,kBAA2BrrB,KAAK63C,oBAChD30C,EAAKjJ,QAAU+F,KAAKvJ,OAAOiB,KAAK2zB,mBAAmC,IAAfnoB,EAAKjJ,QAC5D+F,KAAK/E,cAAgB+E,KAAKvJ,OAAOiB,KAAK2zB,kBAEtCrrB,KAAKvJ,OAAO2H,qBAAsB,CAClC,IAAI6+C,EAAW,yBAA2Bj9C,KAAK/E,cAAgB,KAC3D0D,OAAM,EACNqB,KAAK/E,eAAiB,GAAiD,QAA5C+E,KAAKvJ,OAAOmF,aAAaQ,gBACR,WAA5C4D,KAAKvJ,OAAOmF,aAAaQ,gBACzB4D,KAAK43C,iBAAmB53C,KAAK/E,cAAc8M,WAC3CpJ,EAAMqB,KAAKvJ,OAAOygC,aAAajsB,cAAcgyC,GAC7Cj9C,KAAKhF,YAAc2D,EAAMA,EAAIkL,SAAW,GAGpC7J,KAAK43C,kBAA8C,OAA1B53C,KAAK43C,kBAC9BqF,EAAW,yBAA2Bj9C,KAAK43C,iBAAmB,KAC9Dj5C,EAAMqB,KAAKvJ,OAAOygC,aAAajsB,cAAcgyC,GAC7Cj9C,KAAKhF,YAAc2D,EAAMA,EAAIkL,SAAW,GAGxC7J,KAAKhF,YAAc,OAKvBgF,KAAK63C,qBAAuB73C,KAAKvJ,OAAO2H,sBAAwB4B,KAAKvJ,OAAOolB,yBAC5E7b,KAAKhF,YAAckI,EAAKjJ,MAGxB+F,KAAKhF,YAAcgF,KAAKvJ,OAAOiB,KAAK2zB,kBAAoB,EAAIrrB,KAAKvJ,OAAOiB,KAAK2zB,iBAAmB,EAGpGrrB,KAAK63C,qBAAuB73C,KAAKvJ,OAAO2H,sBAAwB4B,KAAKvJ,OAAOolB,yBAC5E7b,KAAK7E,aAAe6E,KAAKvJ,OAAO8G,SAAS2F,EAAKjJ,OAG9C+F,KAAK7E,aAAe6E,KAAKvJ,OAAOmS,qBAAqB,GAGzD5I,KAAK63C,oBAAqC,IAAf30C,EAAKjJ,QAChC+F,KAAK7E,aAAe6E,KAAKvJ,OAAO8G,SAAS2F,EAAKjJ,OAC9C+F,KAAKhF,YAAckI,EAAKjJ,OAEoB,UAA5C+F,KAAKvJ,OAAOmF,aAAaQ,gBAA8B3E,oBAAkBuI,KAAK7E,gBAC1E1D,oBAAkBuI,KAAKvJ,OAAOmS,qBAAqB,MACvD5I,KAAK7E,aAAe6E,KAAKvJ,OAAOmS,qBAAqB,IAEzD5I,KAAK63C,oBAAqB,EAC1B30C,EAAOlD,KAAK+8C,aAAa75C,QAnFrBA,EAAKiG,QAAS,GA6FtBwuC,EAAK/6C,UAAU67C,wBAA0B,WACD,OAAhCz4C,KAAK+3C,yBACL/3C,KAAK+3C,uBAAyB/3C,KAAKvJ,OAAOmF,aAAaQ,iBAG/Du7C,EAAK/6C,UAAUmgD,aAAe,SAAU75C,GACpC,IAAIlJ,EAAQkJ,EAAKzE,KACjB,GAAoB,QAAhByE,EAAK7H,OAAkB,CACvB,IAAIzD,EAAMoI,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GACjDq6B,EAAW,KACf37B,EAAMG,SAAW1C,oBAAkBuC,EAAMG,UAAYgC,YAAW+G,EAAKzE,MAAQzE,EAAMG,SACnF,IAAIqiB,EAAcxc,KAAKvJ,OAAOiB,KAAKwE,wBAC/B8D,KAAKvJ,OAAO2H,sBAAuC,IAAf8E,EAAKjJ,QACzC+F,KAAKhF,YAAcgF,KAAKvJ,OAAOiB,KAAKwE,wBAAwBsC,QAAQwB,KAAK7E,cACzE6E,KAAK/E,cAAgBoZ,SAASrU,KAAKvJ,OAAOoI,UAAUmB,KAAKhF,aAAaqR,aAAa,iBAAkB,KAEzG,IAAIpS,EAAQ+F,KAAKhF,YACjBhB,EAAMjB,SAAW2gB,SAAO1Z,KAAKvJ,OAAO0a,QAAQ8D,GAAK,UACjDwD,WAAS,sBAAwBze,EAAMjB,SAAUiB,EAAOgG,KAAKvJ,QAC7D,IAAIyD,EAAQ,EACR+C,OAAY,EACZqB,OAAiB,EACjBzF,OAAa,EACbmE,OAAkB,EAClBu/C,EAAmBv8C,KAAKvJ,OAAO2H,sBAAwB4B,KAAKhF,aAAe,GAA+B,OAA1BgF,KAAK43C,iBACrF3vC,EAAOjI,KAAKvJ,OAAOoI,UACnBu9C,EAAiBn0C,EAAK3Q,OAASklB,EAAYhe,QAAQge,EAAY,IAAM,EACrE6/B,EAAgBp0C,EAAK3Q,QAAU2Q,EAAKA,EAAK3Q,OAAS,GAAG+U,aAAa,iBAAmB,EACrFiwC,EAAct8C,KAAK/E,eAAiBmhD,GAAkBp8C,KAAK/E,eAAiBohD,EAShF,GARI7/B,EAAYllB,SACZ2F,EAAYuf,EAAYxc,KAAKhF,aAAagF,KAAKvJ,OAAOwG,WACtDD,EAAkBwf,EAAYxc,KAAKhF,aAAagF,KAAKvJ,OAAOuG,iBACxDwf,EAAYxc,KAAKhF,aAAanC,aAC9ByF,EAAiBke,EAAYxc,KAAKhF,aAAanC,WAAWE,UAE9DF,EAAa2jB,EAAYxc,KAAKhF,aAAanC,YAEC,QAA5CmH,KAAKvJ,OAAOmF,aAAaQ,gBAA4BogB,EAAYllB,OAAQ,CAEzE,GADA4C,EAAQsiB,EAAYxc,KAAKhF,aAAad,MACU,UAA5C8F,KAAKvJ,OAAOmF,aAAaQ,eACzBu5B,EAAW,SACX17B,EAAQuiB,EAAYxc,KAAKhF,aAAaf,WAErC,GAAgD,UAA5C+F,KAAKvJ,OAAOmF,aAAaQ,eAA4B,CAC1Du5B,EAAW,QACX,IAAI4gB,EAAmBp9C,EAAoBqjB,EAAYxc,KAAKhF,cAAc1D,OACtEy+C,EAAmBv5B,EAAYxc,KAAKhF,aAAaf,MACrDA,EAASs8C,EAAmB,EAAMR,EAAmBQ,SAEpD,GAAgD,UAA5Cv2C,KAAKvJ,OAAOmF,aAAaQ,eAA4B,CAC1Du5B,EAAW,SACN31B,KAAK/E,eAAiB,GAAKshD,IAAqBD,IACjDtiD,EAAMnB,WAAasD,YAAWqgB,EAAYxc,KAAKhF,cAC/ChB,EAAMsE,eAAiBtE,EAAMnB,WAAWE,gBACjCiB,EAAMnB,WAAWQ,oBACjBW,EAAMnB,WAAWmH,KAAKvJ,OAAO0G,eAExC,IAAI+/C,EAAoB/jD,EAAoBqjB,EAAYxc,KAAKhF,cAAc1D,OACvE6lD,EAAoB3gC,EAAYxc,KAAKhF,aAAaf,MAClD+F,KAAK/E,eAAiB,IACtBjB,EAAME,MAAQA,EAAQ,GAE1BD,EAASijD,EAAoB,EAAMC,EAAoBD,IACnDl9C,KAAKjF,kBACLf,EAAMG,SAAS6F,KAAKvJ,OAAOuG,iBAAmBhD,EAAMgG,KAAKvJ,OAAOuG,iBAAmBC,EAC9ExF,oBAAkBuC,EAAMnB,aACzBuE,EAAgBxF,EAAKoC,EAAMnB,WAAY,MAAOmH,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBf,IAsB7F,GAlBgD,UAA5CgG,KAAKvJ,OAAOmF,aAAaQ,gBAA0E,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,kBAC3E4D,KAAK/E,eAAiB,GAAKshD,IAAqBriD,GAASoiD,IAC1DtiD,EAAMsE,eAAiBA,EACvBtE,EAAMnB,WAAasD,YAAWtD,UACvBmB,EAAMnB,WAAWQ,oBACjBW,EAAMnB,WAAWmH,KAAKvJ,OAAO0G,eAExCnD,EAAME,MAAQA,EACV8F,KAAKjF,kBACLf,EAAMG,SAAS6F,KAAKvJ,OAAOuG,iBAAmBhD,EAAMgG,KAAKvJ,OAAOuG,iBAAmBA,EAC9EvF,oBAAkBuC,EAAMnB,aACzBuE,EAAgBxF,EAAKoC,EAAMnB,WAAY,MAAOmH,KAAKvJ,OAAQuJ,KAAKjF,gBAAiBf,KAI7E,MAAZ27B,IAAqB31B,KAAK/E,eAAiB,GAAKshD,IAAqBD,IACrEp5C,EAAKjJ,MAAqB,WAAb07B,EAAwB17B,EAAQA,EAAQ,GAET,WAA5C+F,KAAKvJ,OAAOmF,aAAaQ,eAA6B,CACtD,IAAI1F,EAAcsJ,KAAKvJ,OAAOiB,KAAKhB,sBAAsBC,cACrDqJ,KAAKvJ,OAAOiB,KAAKhB,WAAWA,WAAW8E,KAAOwE,KAAKvJ,OAAOiB,KAAKhB,WACnEwM,EAAKjJ,MAAQvD,EAAWY,QAG5BG,oBAAkBuC,EAAME,SACxBF,EAAME,MAAQA,GAElBF,EAAMZ,iBAAkB,EACxBY,EAAMX,gBACNW,EAAMC,MAAQ,EAOlB,GALoB,QAAhBiJ,EAAK7H,SACL2E,KAAKg4C,oBAAuB99C,MAAOF,EAAME,MAAOrB,WAAYmB,EAAMnB,WAAYE,SAAUiB,EAAMjB,SAC1FoB,SAAUH,EAAMG,SAAUmE,eAAgB7G,oBAAkBuC,EAAMnB,iBAAc2c,EAAYxb,EAAMnB,WAAWE,SAC7GM,aAAcW,EAAMX,eAEH,WAArB6J,EAAKtD,YAEL,IAAK,IADDw9C,EAAgBl6C,EAAKzE,KAChBrH,EAAI,EAAGA,EAAIgmD,EAAc9lD,OAAQF,IACtC,GAAIgmD,EAAchmD,GAAGyB,WAAY,CACzBA,EAAaC,EAAckH,KAAKvJ,OAAQ2mD,EAAchmD,GAAGyB,WAAWE,UACxE,IAAKtB,oBAAkBoB,IAAeA,EAAWO,gBAAiB,CAC9D,IAAIywC,EAAahxC,EAAWQ,aAAamF,QAAQ4+C,EAAchmD,IAC/DyB,EAAWQ,aAAa6D,OAAO2sC,EAAY,IAK3D,OAAO3mC,GAOXy0C,EAAK/6C,UAAU84B,UAAY,SAAUj3B,EAAMxE,EAAO07B,GAI9C,GAHI31B,KAAKvJ,OAAOmF,aAAaQ,iBAAmB4D,KAAK+3C,wBAA0D,OAAhC/3C,KAAK+3C,yBAChF/3C,KAAK+3C,uBAAyB/3C,KAAKvJ,OAAOmF,aAAaQ,gBAEtD4D,KAAKjF,iBAAoBtD,oBAAkBgH,KAASrG,OAAOyE,eAAeC,KAAK2B,EAAMuB,KAAKvJ,OAAO0G,cAiB9FsB,GACIxE,GAAS,GACT+F,KAAK/E,cAAgBhB,EACrB+F,KAAKhF,YAAcf,IAGnB+F,KAAK/E,cAAgB+E,KAAKvJ,OAAO40B,iBACjCrrB,KAAKhF,YAAcgF,KAAKvJ,OAAO40B,kBAE/BsK,GACA31B,KAAKvJ,OAAOgK,eAAgB7E,cAAgBQ,eAAgBu5B,KAAc,GAE9E31B,KAAKvJ,OAAOiB,KAAKoE,WAAW45B,UAAUj3B,EAAMxE,IAG5C+F,KAAKvJ,OAAOiB,KAAKoE,WAAW45B,UAAUj3B,EAAMxE,OAhCiE,CACjH,IAAIu9C,KACA6F,EAAmBr9C,KAAKvJ,OAAOmF,aAAaC,KAC5CyhD,EAAuBt9C,KAAKvJ,OAAOiB,KAAKkE,aAAaC,KACzD27C,EAAWj/C,KAAKkG,GAChBuB,KAAKvJ,OAAOgK,eAAgB7E,cAAgBC,KAAM,WAAa,GAC/DmE,KAAKvJ,OAAOiB,KAAK+I,eAAgB7E,cAAgBC,KAAM,WAAa,GAC/DpE,oBAAkBk+B,IACnB31B,KAAKvJ,OAAOgK,eAAgB7E,cAAgBQ,eAAgBu5B,KAAc,GAE9E,IAAI2hB,GAAmB9gC,aAAcghC,EAAYx2B,kBAAoBC,mBACrEjhB,KAAKvJ,OAAO0d,OAAO0K,IAAoBy4B,eAAgBA,EAAgBr9C,MAAOA,IAC9E+F,KAAKvJ,OAAOgK,eAAgB7E,cAAgBC,KAAMwhD,KAAsB,GACxEr9C,KAAKvJ,OAAOiB,KAAK+I,eAAgB7E,cAAgBC,KAAMyhD,KAA0B,GACjFt9C,KAAKvJ,OAAO66B,YA2BpBqmB,EAAK/6C,UAAU2gD,iBAAmB,WAC9B,OAAOv9C,KAAKvJ,OAAOiB,KAAKoE,WAAWyhD,oBAMvC5F,EAAK/6C,UAAU4gD,YAAc,WACzBx9C,KAAKvJ,OAAOiB,KAAKoE,WAAW0hD,eAEhC7F,EAAK/6C,UAAUw7C,aAAe,SAAU36C,GAC/BhG,oBAAkBgG,EAAEyF,KAAKtD,cACY,WAAlCnC,EAAEyF,KAAKtD,YAAYmI,YAA6D,SAAlCtK,EAAEyF,KAAKtD,YAAYmI,aAC3B,UAAlC/H,KAAKvJ,OAAOmF,aAAaC,MAAsD,cAAlC4B,EAAEyF,KAAKtD,YAAYmI,cACxE/H,KAAKi6C,YAAYj6C,KAAKvJ,OAAOiB,KAAKhB,WAAYsJ,KAAKvJ,OAAOoI,UAAWmB,KAAKvJ,OAAOyF,0BAC7E8D,KAAKvJ,OAAOuI,YAAcgB,KAAKvJ,OAAOwI,oBAAsBe,KAAKvJ,OAAOwc,gBACpEjT,KAAKvJ,OAAOiB,KAAKhB,WAAWY,SAAW0I,KAAKvJ,OAAO4Y,qBAAqB/X,QACxE0I,KAAKi6C,YAAYj6C,KAAKvJ,OAAOiB,KAAKhB,WAAYsJ,KAAKvJ,OAAO4Y,qBAAsBrP,KAAKvJ,OAAOyF,2BAU5Gy7C,EAAK/6C,UAAUq5B,SAAW,SAAUpsB,EAAUqK,GACJ,SAAlClU,KAAKvJ,OAAOmF,aAAaC,MAAqD,UAAlCmE,KAAKvJ,OAAOmF,aAAaC,OAC/B,UAAlCmE,KAAKvJ,OAAOmF,aAAaC,OACzBmE,KAAKs6C,WAAY,EACjBt6C,KAAKu6C,mBAAmB,UAE5Bv6C,KAAKvJ,OAAOiB,KAAKoE,WAAWm6B,SAASpsB,EAAUqK,KAGhDyjC,KCx/BP8F,GAA+B,WAC/B,SAASA,EAAchnD,GACnBmM,OAAKC,OAAO66C,iBACZ19C,KAAKvJ,OAASA,EAoBlB,OAZAgnD,EAAc7gD,UAAUmG,cAAgB,WACpC,MAAO,iBAQX06C,EAAc7gD,UAAUmN,QAAU,aAG3B0zC,KCpBPE,GAA2B,WAC3B,SAASA,EAAUlnD,GACfmM,OAAKC,OAAO+6C,aACZ59C,KAAKvJ,OAASA,EACduJ,KAAKqK,mBAyGT,OA9FAszC,EAAU/gD,UAAUmG,cAAgB,WAChC,MAAO,aAEX46C,EAAU/gD,UAAUyN,iBAAmB,WACnCrK,KAAKvJ,OAAO6T,GAAG,eAAgBtK,KAAKgQ,aAAchQ,MAClDA,KAAKvJ,OAAO6T,GAAG,kBAAmBtK,KAAK69C,gBAAiB79C,MACxDA,KAAKvJ,OAAOiB,KAAK4S,GAAG,yBAA0BtK,KAAK89C,oBAAqB99C,MACxEA,KAAKvJ,OAAO6T,GAAG,iBAAkBtK,KAAK+9C,eAAgB/9C,MACtDA,KAAKvJ,OAAO6T,GAAG,oBAAqBtK,KAAK+P,kBAAmB/P,MAC5DA,KAAKvJ,OAAO6T,GAAG,iBAAkBtK,KAAKg+C,eAAgBh+C,OAM1D29C,EAAU/gD,UAAU+N,oBAAsB,WAClC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,eAAgB7K,KAAKgQ,cACrChQ,KAAKvJ,OAAOoU,IAAI,kBAAmB7K,KAAK69C,iBACxC79C,KAAKvJ,OAAOoU,IAAI,iBAAkB7K,KAAK+9C,gBACvC/9C,KAAKvJ,OAAOoU,IAAI,oBAAqB7K,KAAK+P,mBAC1C/P,KAAKvJ,OAAOoU,IAAI,iBAAkB7K,KAAKg+C,gBACvCh+C,KAAKvJ,OAAOiB,KAAKmT,IAAI,yBAA0B7K,KAAK89C,uBAExDH,EAAU/gD,UAAUkhD,oBAAsB,SAAU56C,GAEhDA,EAAY,SAAI,GAEpBy6C,EAAU/gD,UAAUoT,aAAe,WAI/B,IAAK,IAHDiuC,EAAYj+C,KAAKvJ,OAAOoI,UAAUrB,OAAO,SAAUC,GACnD,OAAQA,EAAE8K,UAAUC,SAAS,iBAExBpR,EAAI,EAAGA,EAAI6mD,EAAU3mD,OAAQF,IAAK,CACvC,IAAI8mD,EAAWD,EAAU7mD,GAAGga,uBAAuB,uBAC/C+sC,EAAan+C,KAAKvJ,OAAOiB,KAAKiZ,oBAAoBstC,EAAU7mD,GAAGiV,aAAa,aAC5ExT,EAAaP,YAAU,aAAc0H,KAAKvJ,OAAOiB,KAAKwE,wBAAwB9E,KAC9EK,oBAAkBoB,KAAgBpB,oBAAkBoB,IACpDL,EAAgBwH,KAAKvJ,OAAQ0nD,EAAW1/C,KAAMuB,KAAKvJ,OAAOiB,KAAKwE,2BAC/D8D,KAAKvJ,OAAOiB,KAAK6iB,gBAAgB7G,OAAOwqC,EAAS,MAI7DP,EAAU/gD,UAAUmhD,eAAiB,SAAU76C,GAC3C,IAAIk7C,EAAmBl7C,EAAKvE,IAAIyS,uBAAuB,uBAClD3Z,oBAAkB2mD,EAAiB,KACpCp+C,KAAKvJ,OAAOiB,KAAK6iB,gBAAgB7G,OAAO0qC,EAAiB,KAGjET,EAAU/gD,UAAUmT,kBAAoB,SAAU7M,GAC9C,IAAI1M,EAAawJ,KAAKvJ,QAGtB,IAAK,IAAIW,EAAI,EAAGA,EAAI8L,EAAKuN,WAAWnZ,OAAQF,IACxC8L,EAAKuN,WAAWrZ,GAAGmD,MAAMG,QAAUwI,EAAK7H,QAGhDsiD,EAAU/gD,UAAUihD,gBAAkB,SAAU36C,GAC5C,IAAIzE,EAAOyE,EAAKzE,KACZE,EAAMuE,EAAKm7C,cAAc/4B,cAAcg5B,gBAEvCC,EAAc,kBADL9mD,oBAAkBgH,EAAK5F,YAAsC4F,EAAKxE,MAA7BwE,EAAK5F,WAAWoB,OACrB,QAAUwE,EAAKvE,MACxDskD,EAAY7/C,EAAIsM,cAAc,IAAMszC,GAAah2C,UACjDk2C,KAAch2C,MAAM3L,KAAK0hD,GAAWhhD,OAAO,SAAUkhD,GAAa,OAAQA,IAAcH,IACxFI,EAAQF,EAAS,GAAGnnD,OAEpBsnD,EAAc,eADDH,EAAS12C,WAAWU,MAAM,EAAGk2C,GAE9CztC,YAAUhO,EAAKm7C,cAAc/4B,eAAgBs5B,IAEjDjB,EAAU/gD,UAAUohD,eAAiB,SAAU96C,GAC3C,GAAyB,cAArBA,EAAKtD,aAAoD,QAArBsD,EAAKtD,YAAuB,CAChE,IAAIi/C,EAAS37C,EAAKvE,IAAI+J,iBAAiB,eAAe,GAAG2D,aAAa,WAElEyyC,GADQzqC,SAASwqC,EAAO,IAAM,GACX92C,WACvB7E,EAAKvE,IAAI+J,iBAAiB,eAAe,GAAGwE,aAAa,UAAW4xC,GAGxE,IAAK,IADDC,EAAe/+C,KAAKvJ,OAAOiB,KAAKqkB,cAAcld,UACzCzH,EAAI,EAAGA,EAAI2nD,EAAaznD,OAAQF,IACrC2nD,EAAa3nD,GAAGqI,MAAM,GAAGs5B,SAAU,EAErBzgC,YAAU,cAAe0H,KAAKvJ,OAAOiB,MAErC,eAAE,EAApBg/C,EAA4BzuC,KAAMjI,KAAKvJ,OAAOiB,KAAKqkB,cAAcld,aAQrE8+C,EAAU/gD,UAAUmN,QAAU,WAC1B/J,KAAK2K,uBAEFgzC,KCtHP/8C,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GAqBxC89C,GAA4C,SAAU/8C,GAEtD,SAAS+8C,EAA2BvoD,EAAQwoD,GACxC,IAAI13C,EAAQtF,EAAOnF,KAAKkD,KAAMvJ,EAAQwoD,IAAYj/C,KAalD,OAZAuH,EAAM23C,kBAAmB,EACzB33C,EAAM43C,WAAa,EACnB53C,EAAM63C,SAAW,EACjB73C,EAAM83C,aAAc,EAEpB93C,EAAM6zB,YAAc,EACpB7zB,EAAMkwC,UAAY,EAClBlwC,EAAM+3C,aAAe,EACrB/3C,EAAMg4C,gBAAiB,EAEvBh4C,EAAM2sB,qBAAsB,EAC5B3sB,EAAM8C,mBACC9C,EA0bX,OAzcA3G,GAAUo+C,EAA4B/8C,GAiBtC+8C,EAA2BpiD,UAAU4iD,kBAAoB,WACrD,OAAO,IAAIlV,GAA6BtqC,KAAKvJ,SAEjDuoD,EAA2BpiD,UAAUgC,cAAgB,SAAU3E,GAC3D,OAAO+F,KAAKvJ,OAAOgiC,cAAcj7B,OAAO,SAAUC,GAAK,OAAO4W,SAAS5W,EAAE4O,aAAa,iBAAkB,MAAQpS,IAAU,IAE9H+kD,EAA2BpiD,UAAUyN,iBAAmB,WACpDrK,KAAKvJ,OAAO6T,GAAGm1C,GAA0Bz/C,KAAK0/C,mBAAoB1/C,MAClEA,KAAKvJ,OAAO6T,GAAGq1C,GAAsB3/C,KAAK6G,cAAe7G,OAE7Dg/C,EAA2BpiD,UAAU8iD,mBAAqB,SAAUx8C,GAC5DA,EAAK08C,QACL5/C,KAAKm/C,WAAa,EAClBn/C,KAAKo7B,WAAa,EAClBp7B,KAAKy3C,SAAWz3C,KAAKvJ,OAAO6b,aAAak+B,SAAW,GAE/CttC,EAAKg8C,mBACVl/C,KAAKk/C,kBAAmB,IAGhCF,EAA2BpiD,UAAUiK,cAAgB,SAAU3D,GAC3D,IAAI8iC,EAAUhmC,KAAKvJ,OAAOygC,aAAajsB,cAAc,cACrD,GAAIjL,KAAKq/C,aAAer/C,KAAKo7B,YAAc,GAAKp7B,KAAKy3C,UAAY,EAAG,CAChE,GAAIz3C,KAAKy3C,SAAWv0C,EAAKqL,MAAQvO,KAAKvJ,OAAO6b,aAAak+B,SAAU,CAChE,IAAIqP,KAAqB7Z,EAAQ7L,UAAYn6B,KAAKvJ,OAAO2jC,gBACrD0lB,EAAYD,EAAkB7/C,KAAKvJ,OAAOoI,UAAUvH,OACpDwoD,EAAY58C,EAAKqL,QACjBuxC,EAAYD,GACP38C,EAAKqL,MAAQsxC,IAEtB7/C,KAAKo7B,WAAa0kB,EAAY9/C,KAAKvJ,OAAOoI,UAAUvH,OACpD0I,KAAKy3C,SAAWqI,OAGhB9/C,KAAKo7B,YAAc,EACnBp7B,KAAKy3C,UAAY,EAErBz3C,KAAKq/C,aAAc,EAEnBr/C,KAAKk0B,sBACLl0B,KAAKo7B,WAAa,EAClBp7B,KAAKy3C,SAAWz3C,KAAKvJ,OAAO6b,aAAak+B,SAAW,GAExDttC,EAAKk4B,WAAap7B,KAAKo7B,WACvBl4B,EAAKu0C,SAAWz3C,KAAKy3C,UAEzBuH,EAA2BpiD,UAAUu3B,cAAgB,SAAU94B,GAC3D,IAAIkM,EAAQvH,KACNA,KAAKvJ,OAAOC,sBAAsBC,oBAAyD6e,IAA1CxV,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAClFjrC,KAAKvJ,OAAOC,WAAWA,WAAWgwB,SAAqD,KAA1C1mB,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAAgB/zC,EAAgB8I,KAAKvJ,QAuBvHwL,EAAOrF,UAAUu3B,cAAcr3B,KAAKkD,KAAM,OAtB1CA,KAAKvJ,OAAO4E,GAAQ,aAAc2E,KAAK+/C,YAAa//C,MACpDA,KAAKvJ,OAAO4E,GAAQ,wBAAyB2E,KAAKggD,mBAAoBhgD,MACtEA,KAAK4a,GAAK,WACNrT,EAAM04C,UAAUC,SAAS,SAAUC,GAAc,OAAO54C,EAAM64C,gBAAgBD,IAAgB54C,EAAM84C,mBACpG94C,EAAM9Q,OAAOoU,IAAI,gBAAiBtD,EAAMqT,KAE5C5a,KAAKvJ,OAAO4T,iBAAiB,YAAarK,KAAKsgD,eAAetiC,KAAKhe,OACnEA,KAAKvJ,OAAO4T,iBAAiB,cAAerK,KAAKugD,iBAAiBviC,KAAKhe,OACvEA,KAAKvJ,OAAO4E,GAAQ,qBAAsB2E,KAAKwgD,mBAAoBxgD,MACnEA,KAAKvJ,OAAO6T,GAAG,gBAAiBtK,KAAK4a,GAAI5a,MACzCA,KAAKvJ,OAAO4T,iBAAiB4Q,EAAuBjb,KAAKygD,iBAAiBziC,KAAKhe,OAC/EA,KAAKvJ,OAAO4E,GAAQ,mCAAoC2E,KAAK4F,UAAW5F,MACxEA,KAAKvJ,OAAO4E,GAAQ,kCAAmC2E,KAAK6F,SAAU7F,MACtEA,KAAKvJ,OAAO4E,GAAQ,8BAA+B2E,KAAK0gD,mBAAoB1gD,MAC5EA,KAAKvJ,OAAO4E,GAAQ,aAAc2E,KAAK2gD,iBAAkB3gD,MACzDA,KAAKvJ,OAAO4E,GAAQ,mBAAoB2E,KAAK2qC,QAAS3qC,MACtDA,KAAKvJ,OAAO4E,GAAQ,6BAA8B2E,KAAK4gD,WAAY5gD,MACnEA,KAAKvJ,OAAO4E,GAAQ,6BAA8B2E,KAAK6gD,yBAA0B7gD,MACjFA,KAAKvJ,OAAO4E,GAAQ,iCAAkC2E,KAAK8gD,YAAa9gD,MACxEA,KAAKvJ,OAAO4E,GAAQ,qBAAsB2E,KAAK+gD,UAAW/gD,QAMlEg/C,EAA2BpiD,UAAUmkD,UAAY,SAAUtjD,GAEvDwE,EAAOrF,UAA0B,iBAAEE,KAAKkD,KAAMvC,IAElDuhD,EAA2BpiD,UAAUmjD,YAAc,SAAUtiD,GACzDwE,EAAOrF,UAAUmjD,YAAYjjD,KAAKkD,KAAMvC,GAClCuC,KAAKvJ,OAAOC,sBAAsBC,oBAAyD6e,IAA1CxV,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAClFjrC,KAAKvJ,OAAOC,WAAWA,WAAWgwB,SAAqD,KAA1C1mB,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAAgB/zC,EAAgB8I,KAAKvJ,UAClHgB,oBAAkBgG,EAAE8Q,SACrBvO,KAAKu6B,aAAe98B,EAAE8Q,MACjBvO,KAAKvJ,OAAOyc,4BACb7U,WAAS,aAAc2B,MAAMghD,iBAAiBhhD,KAAKvJ,OAAO2jC,eAAiB38B,EAAE8Q,MAAO,WAGtF9W,oBAAkBgG,EAAEmC,cAA6C,gBAA7BnC,EAAEmC,YAAYmI,YAAkC/H,KAAKk0B,sBAA4C,IAArBl0B,KAAKo7B,cACvHp7B,KAAKihD,SAAS9mB,UAAY,EAC1Bn6B,KAAKk0B,qBAAsB,KAIvC8qB,EAA2BpiD,UAAUw3B,YAAc,WAC/CnyB,EAAOrF,UAAUw3B,YAAYt3B,KAAKkD,MAC5BA,KAAKvJ,OAAOC,sBAAsBC,oBAAyD6e,IAA1CxV,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAClFjrC,KAAKvJ,OAAOC,WAAWA,WAAWgwB,SAAqD,KAA1C1mB,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAAgB/zC,EAAgB8I,KAAKvJ,UACvH4H,WAAS,WAAY2B,MAAMD,QAAQmhD,eAAgB,EACnDlhD,KAAKigD,UAAY,IAAIkB,GAAyB9iD,WAAS,WAAY2B,MAAMmR,QAAS9S,WAAS,WAAY2B,MAAMD,SAC7GC,KAAKihD,SAAWjhD,KAAKohD,WAAWp0C,aAGxCgyC,EAA2BpiD,UAAUykD,cAAgB,SAAUC,EAAMC,EAASzW,EAAM0W,GAChF,OAAKxhD,KAAKvJ,OAAOC,sBAAsBC,oBAAyD6e,IAA1CxV,KAAKvJ,OAAOC,WAAWA,WAAWu0C,MAChFjrC,KAAKvJ,OAAOC,WAAWA,WAAWgwB,SAAqD,KAA1C1mB,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAAe/zC,EAAgB8I,KAAKvJ,QACnHuJ,KAAKu/C,gBACLv/C,KAAKu/C,gBAAiB,EACfv/C,KAAKs/C,eAGZt/C,KAAKs/C,aAAer9C,EAAOrF,UAAUykD,cAAcvkD,KAAKkD,KAAMshD,EAAMC,EAASzW,EAAM0W,GAC5Ev/C,EAAOrF,UAAUykD,cAAcvkD,KAAKkD,KAAMshD,EAAMC,EAASzW,EAAM0W,IAInEv/C,EAAOrF,UAAUykD,cAAcvkD,KAAKkD,KAAMshD,EAAMC,EAASzW,EAAM0W,IAG9ExC,EAA2BpiD,UAAU0jD,eAAiB,WAClD,IACImB,EAAgB,gBACpB,GAAIzhD,KAAKvJ,OAAOoI,UAAUvH,SAAW0I,KAAKyhD,KAAmBhqD,oBAAkBuI,KAAKvJ,OAAOmI,cAAc,IAAK,CAC1G,IAAIqkC,EAASjjC,KAAKvJ,OAAOmI,cAAc,GAAGkoC,wBAAwBvD,IAC9Dme,EAAU1hD,KAAKvJ,OAAO0a,QAAQ21B,wBAAwBvD,IAEtDvjC,KAAKyhD,GADLxe,EAAS,EACajjC,KAAKvJ,OAAOmI,cAAc,GAAGkoC,wBAAwBvD,IAAMme,EAG3D1hD,KAAKgmC,QAAQc,wBAAwBvD,IACvDvjC,KAAKvJ,OAAOmI,cAAc,GAAGkoC,wBAAwBxd,OAGjErnB,EAAOrF,UAAsB,UAAEE,KAAKkD,OAExCg/C,EAA2BpiD,UAAU2jD,iBAAmB,SAAUr9C,GAE9DjB,EAAOrF,UAAqB,YAAEE,KAAKkD,KAAMkD,IAE7C87C,EAA2BpiD,UAAU4jD,mBAAqB,SAAUt9C,GAChE,IAAIlD,KAAKvJ,OAAO07B,OAAhB,CAGA,IACIwvB,EAAgB,gBAChBlqD,oBAAkBuI,KAAK4hD,SAASD,MAChC3hD,KAAK4hD,SAASD,GAAiB3hD,KAAKigD,UAAU0B,KAE9ClqD,oBAAkBuI,KAAKvJ,OAAwB,gBAAEiR,eAAe5L,aAAsC,IAAvBoH,EAAKjI,eACpFxD,oBAAkBuI,KAAKvJ,OAAwB,gBAAEiR,eAAe5L,WAAwB,eACxFmG,EAAOrF,UAA0B,iBAAEE,KAAKkD,KAAMkD,KAGtD87C,EAA2BpiD,UAAUkkD,YAAc,SAAU/S,GACzDA,EAAOtuC,MAAQO,KAAK6hD,iBAExB7C,EAA2BpiD,UAAUilD,cAAgB,WAEjD,IAAK,IADDpiD,KACKrI,EAAI,EAAGA,EAAI4I,KAAKvJ,OAAOY,QAAQC,OAAQF,IAC5CqI,EAAMlH,KAAKyH,KAAK8hD,aAAa9hD,KAAKvJ,OAAOY,QAAQD,KAErD,OAAOqI,GAEXu/C,EAA2BpiD,UAAUklD,aAAe,SAAU51C,EAAK61C,EAAOC,EAAUC,EAASC,EAAQC,GACjG,IAAI59C,GACAw0B,QAAW7sB,EAAI6sB,QACfqpB,YAAe3qD,oBAAkByU,EAAIgI,OAAShI,EAAIyI,UAClD0tC,YAAe5qD,oBAAkByU,EAAIyI,UACrC2tC,MAASP,EACTriD,OAAUwM,EACV81C,SAAavqD,oBAAkBuqD,GAAuB/hC,WAASsiC,KAApBP,EAC3CC,QAAWA,EACX35B,SAAYpc,EAAIoc,SAChBk6B,aAAgBt2C,EAAIu2C,iBAAmBv2C,EAAIu2C,kBAC3CN,eAAkBj2C,EAAIu2C,iBAAmBv2C,EAAIu2C,mBAAqBpkD,WAAS6N,EAAIgI,MAAOiuC,IAK1F,OAHI59C,EAAI69C,YAAkC,aAApB79C,EAAI7E,OAAOyD,MAAuBoB,EAAI+jB,YACxD/jB,EAAItK,MAAQioD,GAET,IAAIQ,OAAKn+C,IAEpBy6C,EAA2BpiD,UAAUgJ,UAAY,SAAUnI,GACvD,IAAIw/C,EAAW,yBAA2Bx/C,EAAExD,MAAQ,KAChDA,EAAQ+F,KAAKvJ,OAAOygC,aAAajsB,cAAcgyC,GAAUpzC,SACzD+B,EAAU5L,KAAKvJ,OAAOyF,wBAAwBjC,GAClDwD,EAAEgB,KAAOmN,GAEbozC,EAA2BpiD,UAAUiJ,SAAW,SAAU3C,GACtD,IAEI61C,GAAY38C,eAAgB4D,KAAK2iD,YAAa3nD,YAAagF,KAAKhF,YAAag+C,aAAch5C,KAAKg5C,cACpGh5C,KAAKvJ,OAAO0d,OAAO,mBAAoB4kC,GACvC/4C,KAAK2iD,YAAc5J,EAAQ38C,eAC3B4D,KAAKhF,YAAc+9C,EAAQ/9C,YAC3BgF,KAAKg5C,aAAeD,EAAQC,aAC5B,IAAI/wC,EAAOjI,KAAKvJ,OAAOoI,UACnBu9C,EAAiBn0C,EAAK3Q,QAAU2Q,EAAK,GAAGoE,aAAa,iBAAmB,EACxEgwC,EAAgBp0C,EAAK3Q,QAAU2Q,EAAKA,EAAK3Q,OAAS,GAAG+U,aAAa,iBAAmB,EACrFu2C,EAAc5iD,KAAKvJ,OAAO40B,kBAAoB+wB,GAAkBp8C,KAAKvJ,OAAO40B,kBAAoBgxB,EACzE,QAArBr8C,KAAK2iD,aAA8C,WAArB3iD,KAAK2iD,cACrC3iD,KAAU,OAAI,GAEO,QAArBA,KAAK2iD,aAA8C,WAArB3iD,KAAK2iD,cAChC3iD,KAAKhF,cAAqC,IAAtBgF,KAAKhF,cAA0D,IAAlCgF,KAAKvJ,OAAO40B,kBAA4Bu3B,IAC5F3gD,EAAOrF,UAAmB,eAAEE,KAAKkD,KAAMkD,IAG/C87C,EAA2BpiD,UAAUimD,iBAAmB,WAEpD5gD,EAAOrF,UAAqB,YAAEE,KAAKkD,OAEvCg/C,EAA2BpiD,UAAU+jD,iBAAmB,WAGpD3gD,KAAKvJ,OAAO0d,OAAO,uBACO,QAArBnU,KAAK2iD,aAA8C,WAArB3iD,KAAK2iD,cAA6B3iD,KAAU,OAC3EiC,EAAOrF,UAAqB,YAAEE,KAAKkD,OAG3Cg/C,EAA2BpiD,UAAU8jD,mBAAqB,WACtD,IACI1a,EAAUhmC,KAAKvJ,OAAOygC,aAAajsB,cAAc,cACjDjL,KAAU,OAAKgmC,EAAQ/6B,cAAc,iBACrCjL,KAAKq/C,aAAc,IAG3BL,EAA2BpiD,UAAUgkD,WAAa,SAAU19C,GAExDjB,EAAOrF,UAAoB,WAAEE,KAAKkD,KAAMkD,IAE5C87C,EAA2BpiD,UAAUikD,yBAA2B,SAAU39C,GAEtEjB,EAAOrF,UAAgC,uBAAEE,KAAKkD,KAAMkD,IAExD87C,EAA2BpiD,UAAUkmD,cAAgB,WACjD,IACI9c,EAAUhmC,KAAKvJ,OAAOygC,aAAajsB,cAAc,cACjDjL,KAAU,QAAMgmC,EAAQ/6B,cAAc,iBACtCjL,KAAKvJ,OAAO07B,QAAS,EACrBnyB,KAAKvJ,OAAOi/B,cAGpBspB,EAA2BpiD,UAAU+tC,QAAU,SAAUlsC,GAErDwD,EAAOrF,UAAwB,eAAEE,KAAKkD,KAAMvB,IAEhDugD,EAA2BpiD,UAAU6jD,iBAAmB,SAAUv9C,GAC9D,GAAyB,QAArBA,EAAKtD,YAAuB,CAC5B,IAAIm5C,GAAY38C,eAAgB4D,KAAK2iD,YAAa3nD,YAAagF,KAAKhF,YAAag+C,aAAch5C,KAAKg5C,cACpGh5C,KAAKvJ,OAAO0d,OAAO,mBAAoB4kC,GACvC/4C,KAAK2iD,YAAc5J,EAAQ38C,eAC3B4D,KAAKhF,YAAc+9C,EAAQ/9C,YAC3BgF,KAAKg5C,aAAeD,EAAQC,aAGhC/2C,EAAOrF,UAAwB,eAAEE,KAAKkD,KAAMkD,IAEhD87C,EAA2BpiD,UAAUyjD,gBAAkB,WACnD,IAAI94C,EAAQvH,KACZ,OAAO,SAAUmR,EAASoQ,EAAStD,EAAWxgB,EAAGslD,EAASx/C,GAEtD,IAAKgE,EAAM9Q,OAA0B,oBAAG,CAEhC4S,UAAQ25C,OAASD,GAAWx/C,IAAUgE,EAAkB,cACxDA,EAAM9Q,OAAOokB,cAEjB,IAAIooC,EAAyB,MAAjB1hC,EAAQ2hC,KAChB3sB,EAAIhvB,EAAM47C,gBAAgBF,EAAQ17C,EAAM67C,WAAWC,mBAAmB,GAAK,EAAI97C,EAAM0U,SAASqnC,cAAc,GAC1G,GACN,GAAIL,EAAO,CACP,IAAI5gB,EAAMjqC,OAAOC,KAAKkP,EAAM67C,WAAWG,UAAUjsD,OAASiQ,EAAM0U,SAASqnC,cAAchsD,OACnFksD,EAAUj8C,EAAM67C,WAAWG,SAASlhB,EAAM,GAC9C9L,EAAIA,EAAIitB,EAAUA,EAAUjtB,EAEhChvB,EAAMk8C,WAAWC,YAAYntB,EAAGhvB,EAAM43C,YAClC53C,EAAM9Q,OAAOyc,4BACb3L,EAAMo8C,OAAOF,WAAWC,YAAYntB,EAAG,MAKvDyoB,EAA2BpiD,UAAUwjD,gBAAkB,SAAUD,GAC7D,IAAIrV,EAAOqV,EAAWyD,SAClBC,EAAY7jD,KAAKvJ,OAAO6b,aAAak+B,SAAW72B,KAAKC,KAAK5Z,KAAKvJ,OAAO6b,aAAak+B,SAAW,GAC9FxK,EAAUhmC,KAAKvJ,OAAOygC,aAAajsB,cAAc,cACjD+rB,EAAe6sB,EAAY7jD,KAAKvJ,OAAO2jC,eACvC0pB,EAAY3D,EAAW4D,OAAOxgB,IAAMvjC,KAAKm/C,WAAc,EACvD6E,EAAarqC,KAAKC,KAAKumC,EAAW4D,OAAOxgB,IAAMvjC,KAAKm/C,aAAenoB,EACnE3L,EAAmB,mBACvB,GAAIy4B,GAAsC,UAAzB3D,EAAWliC,WAAkD,SAAzBkiC,EAAWliC,UAAuB,CACnF,IAAIgmC,IAAYjkD,KAAKvJ,OAAO6yB,OAAOvhB,WAAWvJ,QAAQ,KAAO,EAAIwB,KAAKvJ,OAAO6yB,OACzEtpB,KAAKvJ,OAAO0a,QAAQ21B,wBAAwBxd,QAC5CrvB,KAAY+rC,EAAQ7L,UAAYn6B,KAAKvJ,OAAO2jC,gBAC1CzgB,KAAKC,KAAKqqC,EAAUjkD,KAAKvJ,OAAO2jC,gBAChCp6B,KAAKvJ,OAAO6b,aAAak+B,SAO/B,GANAv2C,EAASA,EAAQ,EAAKA,EAAQ,EACzBxC,oBAAkBuI,KAAKqrB,MAAkD,IAA5BrrB,KAAKqrB,IAA4BpxB,IAAU+F,KAAKqrB,KAC9FpxB,EAAQ+F,KAAKqrB,IAEjBrrB,KAAKo7B,WAAanhC,EAClB+F,KAAKy3C,SAAWx9C,EAAQ+F,KAAKvJ,OAAO6b,aAAak+B,SAC7CxwC,KAAKy3C,SAAWz3C,KAAKu6B,aAAc,CACnC,IAAI2pB,EAAUlkD,KAAKu6B,aAAe,EAC9B4pB,EAAUnkD,KAAKy3C,SAAWyM,EAC9BlkD,KAAKy3C,SAAWyM,EAChBlkD,KAAKo7B,WAAcp7B,KAAKo7B,WAAa+oB,EAAW,EAAI,EAAKnkD,KAAKo7B,WAAa+oB,EAG/E,IAAIC,EAAQzqC,KAAKC,KAAKumC,EAAW4D,OAAOxgB,IAAMvjC,KAAKvJ,OAAO2jC,gBAC1DgqB,GAAgBpkD,KAAKvJ,OAAO6b,aAAak+B,SACzC,IAAI6T,EAAa,EACjB,IAAK5sD,oBAAkBuI,KAAKvJ,OAAOoI,UAAUulD,MACxC3sD,oBAAkBuI,KAAKvJ,OAAOygC,aAAaxuB,iBAAiB,iBAAiB07C,IAAS,CAGvFC,GAFWrkD,KAAKvJ,OAAOygC,aAAaxuB,iBAAiB,iBAAiB07C,GACjEn5C,cAAc,MAAMoB,aAAa,SAG1C,GAAmB,IAAfg4C,EACArkD,KAAKm/C,WAAagB,EAAW4D,OAAOxgB,QAEnC,CACD,IAAIja,EAAStpB,KAAKvJ,OAAO2jC,eACzBp6B,KAAKm/C,WAAcgB,EAAW4D,OAAOxgB,IAAOsgB,EAAYv6B,EAAU,EAC9D62B,EAAW4D,OAAOxgB,IAAOsgB,EAAYv6B,EAAU,GAAK,QAG3D,GAAI06B,GAAwC,UAAzB7D,EAAWliC,WAAkD,SAAzBkiC,EAAWliC,UAAuB,CAC1F,IAAI4hC,KAAqB7Z,EAAQ7L,UAAYn6B,KAAKvJ,OAAO2jC,gBACrDkqB,IAAetkD,KAAKqrB,GAAoBrrB,KAAKvJ,OAAO6b,aAAak+B,SAAYxwC,KAAKu6B,cACjF9iC,oBAAkBuI,KAAKqrB,MAAkD,IAA5BrrB,KAAKqrB,IACnDw0B,IAAoB7/C,KAAKqrB,IAAsBi5B,IAC/CzE,EAAkB7/C,KAAKqrB,IAE3B,IAAIy0B,EAAYD,EAAkB7/C,KAAKvJ,OAAO6b,aAAak+B,SACvDsP,EAAY9/C,KAAKu6B,eACjBulB,EAAYD,GACP7/C,KAAKu6B,aAAeslB,IAE7B7/C,KAAKo7B,WAAckpB,EAA8DzE,EAAhDC,EAAY9/C,KAAKvJ,OAAO6b,aAAak+B,SACtExwC,KAAKy3C,SAAWqI,EACZK,EAAW4D,OAAOxgB,IAAOvjC,KAAKvJ,OAAO2jC,eAAiBp6B,KAAKu6B,aAC3Dv6B,KAAKm/C,WAAan/C,KAAKqhD,cAAclB,EAAW4D,OAAOxgB,IAAKyC,EAAQc,wBAAwBxd,QAG5FtpB,KAAKm/C,WAAagB,EAAW4D,OAAOxgB,IAG5C,GAAMygB,GAAe7D,EAAW4D,OAAOxgB,IAAOvjC,KAAKvJ,OAAO2jC,eAAiBp6B,KAAKu6B,iBAChC,UAAzB4lB,EAAWliC,WAAkD,SAAzBkiC,EAAWliC,UAAuB,CACzF,IAAIsmC,EAAWvkD,KAAKgc,YAAc3d,WAAS,kBAAmB2B,MAAMkC,MAAMlC,MAAOmgD,EAAWliC,UAAW6sB,EAAMqV,EAAW4D,SACxH/jD,KAAKwkD,aAAeD,EACpBvkD,KAAKvJ,OAAOguD,uBAAuBzkD,KAAKvJ,OAAOyc,2BAA6BqxC,EAASjB,kBACrF,IAAIjnC,EAAOkoC,EAASroC,WAAaqoC,EAASG,SAAWH,EAASnoC,SAASC,KAAOkoC,EAASloC,KACvFrc,KAAKvJ,OAAOgK,eAAgB6R,cAAgB6J,YAAaE,KAAU,GACtC,UAAzB8jC,EAAWliC,WAAkD,SAAzBkiC,EAAWliC,YAC/CsmC,EAAS9P,MAA2B,0BAAnB8P,EAAS9P,MAAoC,gBAAkB8P,EAAS9P,OAE7Fz0C,KAAKvJ,OAAO0d,OAAOowC,EAAS9P,OAAS70C,YAAa,gBAAiBirC,YAAa0Z,EAAUxF,aAAcoB,EAAWpB,iBAG3HC,EAA2BpiD,UAAU+nD,cAAgB,SAAUpjD,EAAQqjD,EAAUnnD,GAC7E,GAAKuC,KAAKvJ,OAAOC,sBAAsBC,oBAAyD6e,IAA1CxV,KAAKvJ,OAAOC,WAAWA,WAAWu0C,MAChFjrC,KAAKvJ,OAAOC,WAAWA,WAAWgwB,SAAqD,KAA1C1mB,KAAKvJ,OAAOC,WAAWA,WAAWu0C,KAAe/zC,EAAgB8I,KAAKvJ,QACnH4H,WAAS,mBAAoBZ,KAC7BuC,KAAKu/C,gBAAiB,GAE1Bt9C,EAAOrF,UAAU+nD,cAAc7nD,KAAKkD,KAAMuB,EAAQqjD,EAAUnnD,OAE3D,CACD,IAAIqtC,EAAOrtC,EAAEotC,YAAYga,cAAoD,MAApCpnD,EAAEotC,YAAYga,aAAa3B,MAChE7kD,WAAS,cAAe2B,MAAMqc,MAAQhe,WAAS,cAAe2B,MAAMqc,OAAS5e,EAAEotC,YAAYxuB,KAC3Fhe,WAAS,cAAe2B,MAAQvC,EAAEotC,YAClCia,EAAUha,EAAKwY,cAAc,GAAM,EACnCyB,EAAU/kD,KAAKmjD,gBAAgB2B,GAC/Bz3C,OAAQ,EACZ,GAAIrN,KAAKvJ,OAAOyc,2BAA4B,CACxClT,KAAK2jD,OAAOF,WAAWC,YAAYqB,EAAS,GAC5C,IAAIl/B,EAASilB,EAAKwY,cAClBj2C,EAAQrN,KAAKmjD,gBAAgBt9B,EAAOA,EAAOvuB,OAAS,IAAM0I,KAAKmjD,gBAAgBt9B,EAAO,GAAK,GAAK,GAChG7lB,KAAK2jD,OAAOF,WAAWuB,gBAAgB33C,GAE3CrN,KAAKyjD,WAAWuB,gBAAgB33C,EAAQhE,UAAQ25C,MAA8B,SAAtB35C,UAAQyhC,KAAKma,OACrE1jD,EAASvB,KAAKvJ,OAAO+V,cAAc,UAC5BqB,YAAY+2C,GAEnB5kD,KAAKklD,WAAWj6C,cAAc,SAAgB,YAAE1J,GAC3CvB,KAAKk/C,kBAAwC,IAApBl/C,KAAKm/C,WAK/Bn/C,KAAKk/C,kBAAmB,GAJxBl/C,KAAKm/C,WAAan/C,KAAKm/C,WAAa,EAAI,EAAIn/C,KAAKm/C,WACjD9gD,WAAS,aAAc2B,MAAM0jD,YAAYqB,EAAS/kD,KAAKm/C,aAK3D1mC,WAAS,WAAYzY,KAAKwkD,aAAexkD,KAAKwkD,aAAe1Z,EAAM9qC,MAC7C,kBAAlBvC,EAAEmC,aAAuE,MAApCnC,EAAEotC,YAAYga,aAAa3B,MAChEljD,KAAKvJ,OAAO0d,OlClTP,ekCuTTlS,EAAOrF,UAAmB,UAAEE,KAAKkD,KAAMvC,GAEnCuC,KAAU,QAAMA,KAAKvJ,OAAOygC,aAAajsB,cAAc,cAAcA,cAAc,gBACxD,QAArBjL,KAAK2iD,aAA8C,WAArB3iD,KAAK2iD,cACjC3iD,KAAKg5C,cAAgBh5C,KAAKo7B,WAC1Bp7B,KAAK8iD,gBAEA9iD,KAAKhF,aAAegF,KAAKhF,aAAe,IAC7CgF,KAAU,OAAI,EACdA,KAAKvJ,OAAO07B,QAAS,IAIjCnyB,KAAK6iD,mBACL5gD,EAAOrF,UAAoB,WAAEE,KAAKkD,MAClCiC,EAAOrF,UAAmC,0BAAEE,KAAKkD,QAGzDg/C,EAA2BpiD,UAAU+N,oBAAsB,WACnD3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,aAAc7K,KAAK+/C,aACnC//C,KAAKvJ,OAAOoU,IAAI,gBAAiB7K,KAAK4a,IACtC5a,KAAKvJ,OAAOoU,IAAI,qBAAsB7K,KAAKwgD,oBAC3CxgD,KAAKvJ,OAAOoU,IAAI,YAAa7K,KAAKsgD,gBAClCtgD,KAAKvJ,OAAOoU,IAAI,cAAe7K,KAAKugD,kBACpCvgD,KAAKvJ,OAAOoU,IAAI40C,GAA0Bz/C,KAAK0/C,oBAC/C1/C,KAAKvJ,OAAOoU,IAAI80C,GAAsB3/C,KAAK6G,eAC3C7G,KAAKvJ,OAAOoU,IAAI,mCAAoC7K,KAAK4F,WACzD5F,KAAKvJ,OAAOoU,IAAI,kCAAmC7K,KAAK6F,UACxD7F,KAAKvJ,OAAOoU,IAAI,8BAA+B7K,KAAK0gD,oBACpD1gD,KAAKvJ,OAAOoU,IAAI,aAAc7K,KAAK2gD,kBACnC3gD,KAAKvJ,OAAOoU,IAAI,mBAAoB7K,KAAK2qC,SACzC3qC,KAAKvJ,OAAOoU,IAAI,6BAA8B7K,KAAK4gD,YACnD5gD,KAAKvJ,OAAOoU,IAAI,6BAA8B7K,KAAK6gD,0BACnD7gD,KAAKvJ,OAAOoU,IAAI,iCAAkC7K,KAAK8gD,aACvD9gD,KAAKvJ,OAAOoU,IAAI,qBAAsB7K,KAAK+gD,aAExC/B,GACTmG,0BAEEhE,GAA0C,SAAUl/C,GAEpD,SAASk/C,IACL,IAAI55C,EAAmB,OAAXtF,GAAmBA,EAAOC,MAAMlC,KAAM0B,YAAc1B,KAKhE,OAJAuH,EAAM69C,YAAa,EACnB79C,EAAM89C,OAAS,EACf99C,EAAM+9C,QAAU,EAChB/9C,EAAMg+C,MAAQ,EACPh+C,EAqEX,OA5EA3G,GAAUugD,EAA0Bl/C,GASpCk/C,EAAyBvkD,UAAUsjD,SAAW,SAAUsF,EAAUC,GAE9DxjD,EAAOrF,UAAuB,cAAIyB,WAAS,UAAW2B,MAAMwN,UAAUs5B,wBACtEjgB,eAAaha,IAAIxO,WAAS,UAAW2B,MAAMwN,UAAW,SAAUxN,KAAK0lD,sBAAsBF,EAAUC,GAAkBzlD,OAE3HmhD,EAAyBvkD,UAAUuuC,MAAQ,WACvCnrC,KAAKslD,QAAU,MAEnBnE,EAAyBvkD,UAAU8oD,sBAAwB,SAAUF,EAAUC,GAC3E,IAAIl+C,EAAQvH,KACR2lD,EAA8B,WAAtBt8C,UAAQyhC,KAAKma,KAAoB,IAAM,IAC/CllD,EAAU,UAKV6lD,GADeC,WAASL,EAAUG,GACpBE,WAASL,EAAU,KAErC,OADAxlD,KAAKD,GAAS+lD,QAAU9lD,KAAKD,GAASgmD,SAAW,EAC1C,SAAUtoD,GACb,IAAI8lC,EAAMh8B,EAAMxH,GAASimD,iBAAmBz+C,EAAMxH,GAASyN,UAAU2sB,UAAY18B,EAAE8D,OAAO44B,UACtFoM,EAAOh/B,EAAMxH,GAASimD,iBAAmBz+C,EAAMxH,GAASkmD,UAAU9e,WAAa1pC,EAAE8D,OAAO4lC,WACxFlpB,EAAY1W,EAAMxH,GAAS+lD,QAAUviB,EAAM,OAAS,KACxDtlB,EAAY1W,EAAMxH,GAASgmD,WAAaxf,EAAOtoB,EAAY1W,EAAMxH,GAASgmD,SAAWxf,EAAO,QAAU,OACtGh/B,EAAMxH,GAAS+lD,QAAUviB,EACzBh8B,EAAMxH,GAASgmD,SAAWxf,EAC1B,IAAIhlB,EAAUha,EAAMs9C,aAAa5mC,GAC7BioC,EAAQ,EAcZ,GAbA3+C,EAAM89C,OAAS9hB,EACM,MAAjBh8B,EAAM+9C,UACNY,EAAQ3+C,EAAM89C,OAAS99C,EAAM+9C,SAEjC/9C,EAAM+9C,QAAU/9C,EAAM89C,OAClB99C,EAAMg+C,OACNY,aAAa5+C,EAAMg+C,OAEvBh+C,EAAMg+C,MAAQa,WAAW7+C,EAAM4jC,MAAO,IACjC+a,EAAQ,KAAOA,GAAS,MAASzoD,GAAKA,EAAE4oD,iBACzC5oD,EAAE6oD,aAAc,EAChB7oD,EAAE4oD,mBAE6C,IAA/C9+C,EAAMxH,GAASwmD,KAAK/nD,QAAQ+iB,EAAQ2hC,MAAxC,CAGA,IAAI3/C,EAAQgE,EAAMhE,MAAM0a,GASxB,GARIsD,EAAQilC,SAA4B,MAAjBjlC,EAAQ2hC,QACvB37C,EAAgB,YAAoB,UAAd0W,GAAuC,SAAdA,EAI/CwnC,EAAgBl+C,EAAa,QAAGga,EAAStD,GAAaslB,IAAKA,EAAKgD,KAAMA,GAAQh/B,EAAe,UAAGhE,GAHhGkiD,EAAgBl+C,EAAgB,WAAGga,EAAStD,GAAaslB,IAAKA,EAAKgD,KAAMA,GAAQh/B,EAAe,UAAGhE,IAMvGA,EAAO,CAEc,MAAjBge,EAAQ2hC,KACH0C,GACA3nC,UAAWA,EAAW2lC,SAAUriC,EAASwiC,QAAUxgB,IAAKA,EAAKgD,KAAMA,GACpEwY,aAAcnqB,SAAS6nB,gBAG3B+I,GAAWvnC,UAAWA,EAAW2lC,SAAUriC,EAASwiC,QAAUxgB,IAAKA,EAAKgD,KAAMA,GAC1EwY,aAAcnqB,SAAS6nB,gBAGnCl1C,EAAe,WAAI,KAGpB45C,GACTsF,wBChjBE7lD,GAAwC,WACxC,IAAIC,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBzI,OAAO4I,iBAChBC,wBAA2BxE,OAAS,SAAUqE,EAAGC,GAAKD,EAAEG,UAAYF,IACvE,SAAUD,EAAGC,GAAK,IAAK,IAAIrD,KAAKqD,EAAOA,EAAElE,eAAea,KAAIoD,EAAEpD,GAAKqD,EAAErD,MACpDoD,EAAGC,IAE5B,OAAO,SAAUD,EAAGC,GAEhB,SAASG,IAAOlB,KAAKmB,YAAcL,EADnCD,EAAcC,EAAGC,GAEjBD,EAAElE,UAAkB,OAANmE,EAAa3I,OAAOgJ,OAAOL,IAAMG,EAAGtE,UAAYmE,EAAEnE,UAAW,IAAIsE,IAV3C,GA0BxCwlD,GAA+B,WAM/B,SAASA,EAAcjwD,GACnBuJ,KAAK2mD,gBAAkB,EACvB3mD,KAAK4mD,cAAgB,EACrB5mD,KAAKvJ,OAASA,EACdmM,OAAKC,OAAOgkD,IACZ7mD,KAAKqK,mBAyIT,OAvIAq8C,EAAc9pD,UAAUkqD,iBAAmB,SAAU5jD,GACjDA,EAAKzE,KAAOuB,KAAKyqC,YAQrBic,EAAc9pD,UAAUmG,cAAgB,WACpC,MAAO,iBAMX2jD,EAAc9pD,UAAUyN,iBAAmB,WACnCrK,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAO6T,GAAGoxB,EAAiC17B,KAAK+mD,4BAA6B/mD,MAClFA,KAAKvJ,OAAO6T,GAAGkU,EAAsBxe,KAAKgnD,kBAAmBhnD,MAC7DA,KAAKvJ,OAAO6T,GnCsCC,UmCtCkBtK,KAAK+J,QAAS/J,QAMjD0mD,EAAc9pD,UAAU+N,oBAAsB,WACtC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI6wB,EAAiC17B,KAAK+mD,6BACtD/mD,KAAKvJ,OAAOoU,IAAI2T,EAAsBxe,KAAKgnD,mBAC3ChnD,KAAKvJ,OAAOoU,InC0BC,UmC1BmB7K,KAAK+J,WAEzC28C,EAAc9pD,UAAUmqD,4BAA8B,SAAUpoD,GAC5DqB,KAAKvJ,OAAOiB,KAAKyc,OAAOsrC,IAA4BP,kBAAkB,IACtEl/C,KAAKinD,kBAAoBtoD,EAAIlG,OAC7BkG,EAAIlG,OAAOS,SAA0B,aAAfyF,EAAItD,OAC1B,IAAIq0C,GACAt6B,OAAQpV,KAAKvJ,OAAO8G,SACpBoB,IAAKA,EAAIA,IACTtD,OAAQsD,EAAItD,OACZ5C,OAAQkG,EAAIlG,OACZ8V,MAAOvO,KAAKvJ,OAAO8G,SAASjG,SAE5B0I,KAAKvJ,OAAO2H,sBAA+D,SAAvC4B,KAAKvJ,OAAOyR,kBAAkBrM,MAC3B,QAAvCmE,KAAKvJ,OAAOyR,kBAAkBrM,OAAmBmE,KAAKvJ,OAAOyR,kBAAkB2mB,mBAC/E7uB,KAAKvJ,OAAOiB,KAAKguB,iBAErB,IAAI9lB,EAAcvB,WAAS,gBAAiB2B,KAAKvJ,QAAU,cAAgB,UAC3E4H,WAAS,oBAAqB2B,KAAKvJ,QAAQkiB,mBAAmB+2B,GAAO9vC,YAAaA,KAEtF8mD,EAAc9pD,UAAUoqD,kBAAoB,SAAU/W,GAClD,IAAI1oC,EAAQvH,KACRxG,EAAK,IAAI7C,cAAYs5C,EAAe76B,QACpClc,EAAW,IAAI8I,YAAU,WAAY,WAAY,MAAM8uC,GAAG,WAAY,gBAAYt7B,GAClF9c,EAAUc,EAAGyf,cAAa,IAAIxB,SAAQI,MAAM3e,IAC5CuxC,EAAa/xC,EAAQ8E,OAAO,SAAUC,GACtC,OAAOjF,EAAgB+O,EAAM9Q,OAAQgH,EAAG/E,KAE5CsH,KAAKyqC,WAAaA,EAClBzqC,KAAKvJ,OAAOiB,KAAKyc,OAAOo2B,IAAuB9rC,KAAMgsC,IACrD,IAAIyc,GAAW9rB,YAAa,EAAGqc,UAAW,EAAGlpC,MAAO0hC,EAAe1hC,OACnEvO,KAAKvJ,OAAOiB,KAAKyc,OAAOwrC,GAAsBuH,GAC9C,IAAI9rB,EAAa8rB,EAAO9rB,WACpBqc,EAAWyP,EAAOzP,SAEtB,GADAxH,EAAe1hC,MAAQk8B,EAAWnzC,QACd,IAAhB8jC,IAAmC,IAAdqc,EAAiB,CACtC,IAAIjgC,EAAQ,IAAIC,QACZk5B,EAAO3wC,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,SAErCE,EAAOC,GADG3wC,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,YACf,GAC7B3E,EAAQA,EAAMk5B,KAAKA,GAAME,KAAKD,GAC9Bn3C,EAAG9C,WAAW8E,KAAOivC,EACrBwF,EAAe76B,OAAS5b,EAAGyf,aAAazB,OAEvC,CACD,IAAI5X,EAAcqwC,EAAenzB,WAAWld,YAe5C,IAdoB,cAAhBA,GAA+C,gBAAhBA,GAAiD,cAAhBA,GAC/C,YAAhBA,GAA6BI,KAAKvJ,OAAO+b,mBAAqBilC,EAAWhN,EAAWnzC,UACrF8jC,EAAa,EACbqc,EAAWz3C,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,SAAW,EACpDxwC,KAAKvJ,OAAOiB,KAAKw/B,aAAagD,kBAAkBC,UAAY,EAC5Dn6B,KAAKvJ,OAAOiB,KAAKyc,OAAOsrC,IAA4BG,QAAQ,MAI3DnoD,oBAAkBuI,KAAKinD,qBAAiE,kBAA1ChX,EAAenzB,WAAWld,aAC9B,YAA1CqwC,EAAenzB,WAAWld,aAA6Bw7B,IAAep7B,KAAK2mD,iBAC3EvrB,EAAap7B,KAAKvJ,OAAOoI,UAAUvH,QAAUmgD,GAAYrc,EAAap7B,KAAKvJ,OAAOoI,UAAUvH,SAC7F8jC,EAAa,IAEZ3jC,oBAAkBuI,KAAKinD,mBAAoB,CAC5C,IAAIE,EAAgBnnD,KAAKvJ,OAAOoI,UAC5BuoD,EAAS3c,EAAWjsC,QAAQwB,KAAKinD,mBACtBxc,EAAWhiC,MAAM2+C,EAAQA,EAASD,EAAc7vD,QAClDA,OAAS6vD,EAAc7vD,QAAU8vD,GAAU,GAAoB,IAAfhsB,GAGzDA,EADAgsB,GADAA,EAAS3c,EAAWnzC,OAAS6vD,EAAc7vD,QACzB,EAAI8vD,EAAS,EAE/B3P,EAAWhN,EAAWnzC,QAEjB+G,WAAS,gBAAiB2B,KAAKvJ,UACpC2kC,EAAa,EACbqc,EAAWz3C,KAAKvJ,OAAOiB,KAAK4a,aAAak+B,SAAW,EACpDxwC,KAAKvJ,OAAOiB,KAAKyc,OAAOsrC,IAA4BG,QAAQ,MAI/D5/C,KAAKvJ,OAAO+b,oBAAqBxS,KAAKvJ,OAAOwC,oBAAwBxB,oBAAkBuI,KAAKinD,qBACzFhX,EAAe1hC,MAAQvO,KAAKvJ,OAAOoI,UAAU,GAAGioC,wBAAwBxd,OACxE8R,EAAa,EAEPp7B,KAAKvJ,OAAoB,cAC/B2kC,GAAsC,IAAzBp7B,KAAK2mD,eAAwB,EAAI3mD,KAAK2mD,iBAG3D3mD,KAAKinD,kBAAoB,KACzBhX,EAAe76B,OAASq1B,EAAWhiC,MAAM2yB,EAAYqc,GACrDz3C,KAAK2mD,eAAiBvrB,EACtBp7B,KAAK4mD,aAAenP,EAExBz3C,KAAKvJ,OAAO0d,OAAO,eAAgB87B,IAQvCyW,EAAc9pD,UAAUmN,QAAU,WAC9B/J,KAAK2K,uBAEF+7C,KAGPG,GAA6B,SAAU5kD,GAEvC,SAAS4kD,EAAYpwD,EAAQwoD,GACzB,IAAI13C,EAAQtF,EAAOnF,KAAKkD,KAAMvJ,EAAQwoD,IAAYj/C,KAGlD,OAFA3B,WAAS,SAAUkJ,GAAOsD,IAAI,eAAgBxM,WAAS,sBAAuBkJ,GAAQA,GACtFlJ,WAAS,SAAUkJ,GAAO+C,GAAG,eAAgB/C,EAAM8/C,qBAAsB9/C,GAClEA,EA+BX,OApCA3G,GAAUimD,EAAa5kD,GAOvB4kD,EAAYjqD,UAAUmG,cAAgB,WAClC,MAAO,qBAEX8jD,EAAYjqD,UAAUyqD,qBAAuB,WACzC,IAAIC,EAAajpD,WAAS,SAAU2B,MACpC3B,WAAS,SAAU2B,MAAMgD,KAAK,aAAc,kBAAmB,kBAC/D,IAAIukD,EAAWlpD,WAAS,UAAW2B,MAAMwnD,WAAW,mBAChDF,EAAWp0C,4BACX7U,WAAS,cAAekpD,GACnBrlD,MAAMqlD,GAAWE,aAAWC,OAAQ,IAAIC,wBAAsBtpD,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,SAErH3B,WAAS,cAAekpD,GACnBrlD,MAAMqlD,GAAWE,aAAWG,QAAS,IAAI5I,GAA2B3gD,WAAS,SAAU2B,MAAO3B,WAAS,UAAW2B,SAEvHA,KAAK6nD,kBAEThB,EAAYjqD,UAAUirD,eAAiB,WACnC,IAAIP,EAAajpD,WAAS,SAAU2B,MAChCgrB,EAAYs8B,EAAWltB,eACtB3iC,oBAAkB6vD,EAAWh+B,SAA0C,iBAAvBg+B,EAAiB,SAAsD,IAApCA,EAAWh+B,OAAO9qB,QAAQ,OAC9G8oD,EAAWn2C,QAAQ5W,MAAM+uB,OAASg+B,EAAWh+B,QAEjD,IAGIA,EAAqB,MAHXg+B,EAAWh+B,OAAOvhB,WAAWvJ,QAAQ,KAAO,EAAI8oD,EAAWh+B,OACrEg+B,EAAWn2C,QAAQ21B,wBAAwBxd,QAClB0B,GAEzB2lB,EAAO2W,EAAWh1C,aAAak+B,SACnC8W,EAAW7mD,eAAgB6R,cAAgBk+B,SAAUG,EAAOrnB,EAASA,EAASqnB,KAAU,IAErFkW,GACTiB,iBCjNEC,GAA+B,WAM/B,SAASA,EAActxD,GACnBmM,OAAKC,OAAOmlD,iBACZhoD,KAAKvJ,OAASA,EA8BlB,OArBAsxD,EAAcnrD,UAAU05B,kBAAoB,SAAU2xB,EAAGC,GACrD,OAAOloD,KAAKvJ,OAAOiB,KAAK++B,oBAAoBH,kBAAkB2xB,EAAGC,IAQrEH,EAAcnrD,UAAUmN,QAAU,aASlCg+C,EAAcnrD,UAAUmG,cAAgB,WACpC,MAAO,iBAEJglD,KCjCPI,GAAgC,WAMhC,SAASA,EAAe1xD,GACpBuJ,KAAKvJ,OAASA,EACdmM,OAAKC,OAAOulD,kBACZpoD,KAAKqK,mBAqTT,OA7SA89C,EAAevrD,UAAUmG,cAAgB,WACrC,MAAO,kBAMXolD,EAAevrD,UAAUyN,iBAAmB,WACxCrK,KAAKvJ,OAAO6T,GAAGkU,EAAsBxe,KAAKqoD,mBAAoBroD,MAC9DA,KAAKvJ,OAAO6T,GAAG,yBAA0BtK,KAAKsoD,qBAAsBtoD,MACpEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,kBAAmBtK,KAAKuoD,sBAAuBvoD,MACnEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,wBAAyBtK,KAAKwoD,oBAAqBxoD,MACvEA,KAAKvJ,OAAOiB,KAAK4S,GAAG,uBAAwBtK,KAAKyoD,WAAYzoD,MAC7DA,KAAKvJ,OAAOiB,KAAK4S,GAAG,gBAAiBtK,KAAKo4C,aAAcp4C,MACxDA,KAAKvJ,OAAO6T,GAAGoxB,EAAiC17B,KAAK0oD,6BAA8B1oD,OAMvFmoD,EAAevrD,UAAU+N,oBAAsB,WACvC3K,KAAKvJ,OAAOmU,cAGhB5K,KAAKvJ,OAAOoU,IAAI,yBAA0B7K,KAAKsoD,sBAC/CtoD,KAAKvJ,OAAOiB,KAAKmT,IAAI,kBAAmB7K,KAAKuoD,uBAC7CvoD,KAAKvJ,OAAOiB,KAAKmT,IAAI,wBAAyB7K,KAAKwoD,qBACnDxoD,KAAKvJ,OAAOoU,IAAI2T,EAAsBxe,KAAKqoD,oBAC3CroD,KAAKvJ,OAAOiB,KAAKmT,IAAI,uBAAwB7K,KAAKyoD,YAClDzoD,KAAKvJ,OAAOiB,KAAKmT,IAAI,gBAAiB7K,KAAKo4C,cAC3Cp4C,KAAKvJ,OAAOoU,IAAI6wB,EAAiC17B,KAAK0oD,gCAU1DP,EAAevrD,UAAU0rD,qBAAuB,SAAUplD,GAWtD,IAAK,IAVDq2C,EAAav5C,KAAKvJ,OAAOiB,KAAKge,gBAG9BQ,EAAiBlW,KAAKvJ,OAAOiB,KAAK2iD,qBAA4B,eAC9DsO,EAAc,IAAIC,cAAY1yC,EAAgB,KAAMlW,KAAKvJ,OAAOiB,MAChEuQ,EAAOjI,KAAKvJ,OAAOoI,UACnB82B,EAAWzyB,EAAKjJ,QAAUgO,EAAK3Q,OAAS,EAAI,QAAU,SACtDwhC,EAAO94B,KAAKvJ,OAAOiB,KAAKiI,aACxBkpD,EAAkB7oD,KAAKvJ,OAAOiB,KAAK2iD,qBAAiC,aAAEn3C,EAAK8G,UAAW9G,GACtF4lD,KACK1xD,EAAI,EAAGA,EAAIyxD,EAAgBvxD,OAAQF,IACxC0xD,EAAiBvwD,KAAKowD,EAAYhgC,OAAOkgC,EAAgBzxD,GAAI0hC,IAEjEygB,EAAWr8C,OAAOgF,MAAMq3C,GAAar2C,EAAKjJ,MAAQ,EAAG,GAAGX,OAAOuvD,IAC/D,IAASzxD,EAAI,EAAGA,EAAI0xD,EAAiBxxD,OAAQF,IACxB,UAAbu+B,EACA1tB,EAAK/E,EAAKjJ,MAAQ7C,GAAGu+B,GAAUmzB,EAAiB1xD,IAGhD6Q,EAAK/E,EAAKjJ,MAAQ7C,EAAI,GAAGu+B,GAAUmzB,EAAiB1xD,IAExD6Q,EAAK/K,OAAOgG,EAAKjJ,MAAQ,EAAI7C,EAAG,EAAG0xD,EAAiB1xD,IAExD4iD,gBAAch6C,KAAKvJ,OAAOiB,KAAMsI,KAAKvJ,OAAOiB,KAAKge,gBAAiB1V,KAAKvJ,OAAOiB,KAAKmH,UAAW,IAOlGspD,EAAevrD,UAAUw7C,aAAe,WACpC,GAAIp4C,KAAKvJ,OAAOk0B,uBAAuBovB,cAAgBtiD,oBAAkBuI,KAAKvJ,OAAOqF,YAAa,CAE9FkE,KAAKvJ,OAAOqF,WAAsB,YAAEkE,KAAKvJ,OAAOiB,KAAKhB,WAAYsJ,KAAKvJ,OAAOoI,UAAWmB,KAAKvJ,OAAOyF,yBAChG8D,KAAKvJ,OAAOwI,oBACZe,KAAKvJ,OAAOqF,WAAsB,YAAEkE,KAAKvJ,OAAOiB,KAAKhB,WAAYsJ,KAAKvJ,OAAO4Y,qBAAsBrP,KAAKvJ,OAAOyF,2BAI3HisD,EAAevrD,UAAU8rD,6BAA+B,SAAU/pD,GAC9DA,EAAIlG,OAAOS,SAA0B,aAAfyF,EAAItD,OAC1B,IAAIq0C,GACAt6B,OAAQpV,KAAKvJ,OAAO8G,SACpBoB,IAAKA,EAAIA,IACTtD,OAAQsD,EAAItD,OACZ5C,OAAQkG,EAAIlG,OACZ8V,MAAOvO,KAAKvJ,OAAO8G,SAASjG,QAE5BsI,EAAcvB,WAAS,gBAAiB2B,KAAKvJ,QAAU,cAAgB,UAC3E4H,WAAS,oBAAqB2B,KAAKvJ,QAAQkiB,mBAAmB+2B,GAAO9vC,YAAaA,KAWtFuoD,EAAevrD,UAAUyrD,mBAAqB,SAAUpY,GACpD,IAAI1oC,EAAQvH,KACRxG,EAAK,IAAI7C,cAAYs5C,EAAe76B,QACpClc,EAAW,IAAI8I,YAAU,WAAY,WAAY,MAAM8uC,GAAG,WAAY,gBAAYt7B,GAClFuzC,EAAkBvvD,EAAGyf,cAAa,IAAIxB,SAAQI,MAAM3e,IACpDuxC,EAAase,EAAgBvrD,OAAO,SAAUC,GAC9C,OAAOjF,EAAgB+O,EAAM9Q,OAAQgH,EAAGsrD,KAExCjsC,EAAaze,WAAS,aAAc4xC,EAAenzB,YAGnD9jB,IAFUqF,WAAS,UAAW2B,KAAKvJ,OAAOiB,KAAK2iD,sBAC7BhyB,KAAK,SAAUruB,GAAS,OAAOA,IAAU8iB,EAAWld,iBACrCI,KAAKvJ,OAAOuC,cAGjD,GAFAgH,KAAKyqC,WAAaA,EAClBwF,EAAe1hC,MAAQk8B,EAAWnzC,OAC9B+G,WAAS,aAAc4xC,EAAenzB,YACtCmzB,EAAe76B,OAASq1B,MAEvB,CACD,IAAIjzB,EAAQ,IAAIC,QACZqiC,EAAU95C,KAAKvJ,OAAOk0B,uBAAuBovB,YAC7CD,GAAW95C,KAAKvJ,OAAOk0B,uBAAuBq+B,cAAgBhpD,KAAKvJ,OAAOk0B,uBAAuBs+B,YACjGjpD,KAAKvJ,OAAOk0B,uBAAuBq+B,cAAgBhpD,KAAKvJ,OAAOk0B,uBAAuBs+B,WAE1F,IAAItY,EAAO33C,EACPgH,KAAKvJ,OAAO6b,aAAak+B,SAAWxwC,KAAKvJ,OAAOk0B,uBAAuBq+B,cACvEhpD,KAAKvJ,OAAO6b,aAAak+B,SACzBjvB,EAAUvhB,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,YAC5C,GAAK1kB,oBAAkBqlB,GAsBnBtF,EAAQA,EAAM6E,KAAKkF,EAASovB,OAtBI,CAChC,IAAImP,EAAYzhD,WAAS,YAAa2B,KAAKvJ,OAAOiB,KAAK2iD,sBACnD6O,EAAa7qD,WAAS,aAAc2B,KAAKvJ,OAAOiB,KAAK2iD,sBACzD,GAAKP,GAAsC,WAA3Bh9B,EAAWld,YAKlBk6C,GAAsC,WAA3Bh9B,EAAWld,aACC,SAA3Bkd,EAAWld,aAAgD,QAAtBkd,EAAWzhB,OAEjDmc,GADAA,EAAQA,EAAMk5B,KAAKwY,IACLtY,KAAK5wC,KAAKvJ,OAAOk0B,uBAAuBq+B,cAAgBhpD,KAAKvJ,OAAO6b,aAAak+B,WAGlD,WAAxCP,EAAenzB,WAAmB,QAA0D,aAAxCmzB,EAAenzB,WAAmB,QAAmE,IAA9C9c,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,cAC1IoF,EAAU,EACVovB,EAAO3wC,KAAKvJ,OAAO6b,aAAak+B,SAAWxwC,KAAKvJ,OAAOiB,KAAK4a,aAAa6J,aAE7E3E,EAAQA,EAAM6E,KAAKkF,EAASovB,QAfqB,CACjD,IAAID,EAAOoP,EAAYhjC,EAAWre,KAAKnH,OAAS,EAC5Cs5C,EAAO9zB,EAAWre,KAAKnH,OAC3BkgB,EAAQA,EAAMk5B,KAAKA,GAAME,KAAKA,IAkBtCp3C,EAAG9C,WAAW8E,KAAOivC,EAChBqP,GAAYriD,oBAAkBqlB,IAA0C,SAA3BA,EAAWld,aAAgD,QAAtBkd,EAAWzhB,OAI9F40C,EAAe76B,OAAS5b,EAAGyf,aAAazB,GAHxCy4B,EAAe76B,QAAU0H,EAAWre,MAM5CuB,KAAKvJ,OAAO0d,OAAO,eAAgB87B,IAUvCkY,EAAevrD,UAAU4rD,oBAAsB,SAAUtlD,GACrD,IACIk3C,EAA0Bp6C,KAAKvJ,OAAOiB,KAAK2iD,qBAAiC,wBAC5EhiD,EAAOD,OAAOC,KAAK+hD,GACvB,GAA2B,WAAvBl3C,EAAKzF,EAAEmC,aAA4BsD,EAAKkS,OAAO9d,OAAS,EACxD,IAAK,IAAIF,EAAI,EAAGA,EAAI8L,EAAKkS,OAAO9d,OAAQF,IACpCgjD,EAAwB/hD,EAAKA,EAAKf,OAAS,IAAIiB,KAAK2K,EAAKkS,OAAOhe,KAU5E+wD,EAAevrD,UAAU2rD,sBAAwB,SAAUrlD,GACvD,GAAyB,WAArBA,EAAKtD,YAA0B,CAC/B,IAAIqI,EAAOjI,KAAKvJ,OAAOiB,KAAKge,gBACxByzC,EAAUnpD,KAAKvJ,OAAOoI,UACtBJ,EAAOyE,EAAKzE,gBAAgBhC,MAAQyG,EAAKzE,MAAQyE,EAAKzE,MACtD2qD,EAAWppD,KAAKvJ,OAAOiB,KAAK4D,0BAA0B,GAE1D,GADA0E,KAAKqpD,WAAWF,EAASlhD,EAAMxJ,EAAM2qD,GAAU,GAC3CppD,KAAKvJ,OAAOwI,mBAAqB,EAAG,CACpC,IAAIi4C,EAAQl3C,KAAKvJ,OAAOiB,KAAKmiD,uBACzByP,EAAWtpD,KAAKvJ,OAAOiB,KAAKykC,iBAChCn8B,KAAKqpD,WAAWC,EAAUpS,EAAOz4C,EAAM2qD,MAcnDjB,EAAevrD,UAAUysD,WAAa,SAAUF,EAASlhD,EAAMxJ,EAAM2qD,EAAUvqB,GAgB3E,IAAK,IAfDt3B,EAAQvH,KAERrD,EAAU,SAAUvF,GACpB6Q,EAAKzK,OAAO,SAAUC,EAAGxD,GACrB,GAAIwD,EAAEgB,KAAK2qD,KAAc3qD,EAAKrH,GAAGgyD,GAAW,CACxC,GAAIvqB,EAAU,CACV,IAAIxiB,EAAO1C,KAAKC,MAAM3f,EAAQ,GAAKsN,EAAM9Q,OAAOiB,KAAK4a,aAAak+B,UAClEjpC,EAAM9Q,OAAOiB,KAAK2iD,qBAAiD,6BAAEh+B,EAAMpiB,GAE/EgO,EAAK/K,OAAOjD,EAAO,GACnBwuB,SAAO0gC,EAAQlvD,IACfkvD,EAAQjsD,OAAOjD,EAAO,OAIzB7C,EAAI,EAAGA,EAAIqH,EAAKnH,OAAQF,IAC7BuF,EAAQvF,IAMhB+wD,EAAevrD,UAAU6rD,WAAa,SAAUvP,GAC5C,IAKIqQ,EAJAzsC,EAAao8B,EAAUh2C,KAAKzF,EAC5BkB,EAAMu6C,EAAUv6C,IAChBuX,EAAiBlW,KAAKvJ,OAAOiB,KAAK2iD,qBAA4B,eAC9DsO,EAAc,IAAIC,cAAY1yC,EAAgB,KAAMlW,KAAKvJ,OAAOiB,MAEhE8kB,EAAcxc,KAAKvJ,OAAOyF,wBAC1BstD,EAActQ,EAAUuQ,UAAYzpD,KAAKvJ,OAAOiB,KAAKykC,iBACnDn8B,KAAKvJ,OAAOiB,KAAK+gC,cAEnB8wB,EADArQ,EAAUwQ,cACF1pD,KAAKvJ,OAAO0a,QAAQlG,cAAc,2BAA2BA,cAAc,SAG1EjL,KAAKvJ,OAAOiB,KAAKiyD,eAAmEzQ,EAAUuQ,UACjGzpD,KAAKvJ,OAAOiB,KAAKkyD,2BAA2B3+C,cAAc,SAC1DjL,KAAKvJ,OAAOiB,KAAKmyD,0BAA0B5+C,cAAc,SAFpBjL,KAAKvJ,OAAOygC,aAAajsB,cAAc,SAIlFjL,KAAKvJ,OAAOuI,aACZuqD,EAAQrQ,EAAU4Q,cAAsE,QAAtD9pD,KAAKvJ,OAAOiB,KAAK2iD,qBAAqBz6C,cAChEs5C,EAAU4Q,cAAsE,QAAtD9pD,KAAKvJ,OAAOiB,KAAK2iD,qBAAqBz6C,YACjEI,KAAKvJ,OAAOiB,KAAKiyD,eACdzQ,EAAUuQ,UAAYzpD,KAAKvJ,OAAOiB,KAAKqyD,0BAA0B9+C,cAAc,SAC3EiuC,EAAUwQ,cAAgB1pD,KAAKvJ,OAAO0a,QAAQlG,cAAc,0BAA0BA,cAAc,SAChGjL,KAAKvJ,OAAOiB,KAAKsyD,yBAAyB/+C,cAAc,SAHjCjL,KAAKvJ,OAAO2V,mBAAmBnB,cAAc,SAGDs+C,GAKzF,IAAK,IAHD5zB,EAEAukB,EAAcl6C,KAAKvJ,OAAOqF,WAAsB,YAC3C1E,EAAI,EAAGA,EAAIuH,EAAIrH,OAAQF,IAAK,CACjC,IAAI6yD,EAAStB,EAAYhgC,OAAOhqB,EAAIvH,GAAI4I,KAAKvJ,OAAOiB,KAAKiI,cAC1B,SAA3Bmd,EAAWld,aAAgD,QAAtBkd,EAAWzhB,QACW,IAAvDgD,WAAS,gBAAiB2B,KAAKvJ,OAAOqF,aAAkE,QAA5CkE,KAAKvJ,OAAOmF,aAAaQ,eACrC,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,gBAA0E,UAA5C4D,KAAKvJ,OAAOmF,aAAaQ,gBAChFu5B,EAAW,QACXukB,GAAe/gD,EAAoBqjB,EAAY09B,IAAc5iD,OACb,UAA5C0I,KAAKvJ,OAAOmF,aAAaQ,iBACzB89C,GAAe,GAEnBsP,EAAYtP,GAAavkB,GAAUs0B,IAEc,UAA5CjqD,KAAKvJ,OAAOmF,aAAaQ,iBAC9Bu5B,EAAW,SACX6zB,EAAYxpD,KAAKvJ,OAAOqF,WAAsB,aAAG65B,GAAUs0B,IAGd,WAA5CjqD,KAAKvJ,OAAOmF,aAAaQ,eAC9BmtD,EAAM17C,YAAYo8C,GAGlBV,EAAMz8C,aAAam9C,EAAQV,EAAMrvB,mBAGL,WAA3Bpd,EAAWld,aAChB2pD,EAAM17C,YAAYo8C,GAG1B/Q,EAAU/vC,QAAS,GAQvBg/C,EAAevrD,UAAUmN,QAAU,WAC/B/J,KAAK2K,uBAEFw9C,0BrCtUO,oCAIK,wHAYG,4IAcF,sCAID,uCAIC,sJAcA,2BAEC,wCAEY,qSAgCb,kDAIQ,sDAIX,mHAUc,wDAId,4CAIA,yBAEK,sFAUL"}
|