@syncfusion/ej2-querybuilder 25.2.3 → 25.2.7
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 +16 -0
- package/dist/ej2-querybuilder.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es2015.js +19 -9
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +19 -9
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +11 -11
- package/src/query-builder/query-builder-model.d.ts +1 -1
- package/src/query-builder/query-builder.d.ts +1 -1
- package/src/query-builder/query-builder.js +19 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["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 __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\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};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) !== 0)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n var animation = new Animation({ duration: 1000, delay: 0 });\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n childElems[this.groupIndex + 1].parentNode.insertBefore(groupElem, childElems[this.groupIndex + 1]); // clone the element to nxt element\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n if (!this.isImportRules) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isNumInput && typeof args.value === 'number') {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n var numericTextBoxObj = getInstance(args.currentTarget, NumericTextBox);\n numericTextBoxObj.value = value;\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length == 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var value = operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value != '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n var popupElement;\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n index++;\n }\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n rule = {\n 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'isLocked': rule.isLocked\n };\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not, 'isLocked': rule.isLocked };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'isLocked': rule.isLocked };\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n if (isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockRuleTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[this.groupIndex + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^`?([a-zåäö_][a-z0-9åäö_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.getSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempStr = sqlString.replace(matchValue, '');\n // eslint-disable-next-line\n if (isNullOrUndefined(/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(tempStr))) {\n // eslint-disable-next-line\n var parsedValue = /^((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(tempStr)[0];\n matchValue += parsedValue;\n matchValue = this.getSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n var isEmptyOper = false;\n if (rule.operator == \"equal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isempty\";\n isEmptyOper = true;\n }\n else if (rule.operator == \"notequal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isnotempty\";\n isEmptyOper = true;\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n QueryBuilder.prototype.getValueFromParser = function (parser, idx) {\n var value = '';\n var k;\n for (k = idx; k < parser.length; k++) {\n if (parser[k][0] !== 'String' || parser[k][1] === ',' || parser[k][1] === ', ') {\n break;\n }\n else {\n if (value !== '') {\n idx += 1;\n }\n if (parser[k][1] !== null) {\n value += parser[k][1];\n }\n else {\n value = null;\n }\n }\n }\n return { value: value, idx: idx };\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n targetGrpId = target.id.replace(this.element.id + '_', '');\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n addElem[i].disabled = true;\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n addElem[i].disabled = false;\n lockElem[i].disabled = false;\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, max-len\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, max-len\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n if (!isNaN(Date.parse(stringValue))) { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","isNullOrUndefined","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","insertBefore","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","classList","add","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","dropdowntree","DropDownTree","getLabelFromColumn","parseInt","toString","index","custom","splice","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","title","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","args_2","notCondition","undefined","DropDownButton","items","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","contains","currentTarget","dateElement","rbValue","getInstance","NumericTextBox","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","popupElement","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","err","i_3","lockGrpTarget","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","notValue","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","lockRuleTarget","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","checkCondition","getSingleQuoteString","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","getValueFromParser","targetGrpId","filter","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","isArray","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryBuilder","index.QueryLibrary"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-querybuilder.min.js","sources":["../../src/query-builder/query-builder.js","../../src/query-builder/query-library.js","../../src/global.js"],"sourcesContent":["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 __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\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};\n/**\n * Query Builder Source\n */\nimport { Component, NotifyPropertyChanges, getComponent, Browser, compile, append } from '@syncfusion/ej2-base';\nimport { Property, ChildProperty, Complex, L10n, closest, extend, isNullOrUndefined, Collection, cldrData } from '@syncfusion/ej2-base';\nimport { getInstance, addClass, removeClass, rippleEffect, detach, classList } from '@syncfusion/ej2-base';\nimport { Internationalization, getUniqueID, select } from '@syncfusion/ej2-base';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList, CheckBoxSelection, DropDownTree } from '@syncfusion/ej2-dropdowns';\nimport { MultiSelect } from '@syncfusion/ej2-dropdowns';\nimport { Event, EventHandler, getValue, Animation } from '@syncfusion/ej2-base';\nimport { Query, Predicate, DataManager, Deferred } from '@syncfusion/ej2-data';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { compile as templateCompiler } from '@syncfusion/ej2-base';\n/**\n * Defines the Columns of Query Builder\n */\nvar Columns = /** @class */ (function (_super) {\n __extends(Columns, _super);\n function Columns() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Columns.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"values\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"operators\", void 0);\n __decorate([\n Property()\n ], Columns.prototype, \"ruleTemplate\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"template\", void 0);\n __decorate([\n Property({ isRequired: true, min: 0, max: Number.MAX_VALUE })\n ], Columns.prototype, \"validation\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"category\", void 0);\n __decorate([\n Property(null)\n ], Columns.prototype, \"columns\", void 0);\n return Columns;\n}(ChildProperty));\nexport { Columns };\n/**\n * Defines the rule of Query Builder\n */\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Rule.prototype, \"condition\", void 0);\n __decorate([\n Collection([], Rule)\n ], Rule.prototype, \"rules\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"field\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"label\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"operator\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], Rule.prototype, \"not\", void 0);\n __decorate([\n Property(null)\n ], Rule.prototype, \"isLocked\", void 0);\n return Rule;\n}(ChildProperty));\nexport { Rule };\n/**\n * Defines the property for value.\n */\nvar Value = /** @class */ (function (_super) {\n __extends(Value, _super);\n function Value() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Value.prototype, \"numericTextBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"multiSelectModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"datePickerModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"textBoxModel\", void 0);\n __decorate([\n Property(null)\n ], Value.prototype, \"radioButtonModel\", void 0);\n return Value;\n}(ChildProperty));\nexport { Value };\n/**\n * Defines the ruleDelete, groupInsert, and groupDelete options of Query Builder.\n */\nvar ShowButtons = /** @class */ (function (_super) {\n __extends(ShowButtons, _super);\n function ShowButtons() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"cloneGroup\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockRule\", void 0);\n __decorate([\n Property(false)\n ], ShowButtons.prototype, \"lockGroup\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"ruleDelete\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupInsert\", void 0);\n __decorate([\n Property(true)\n ], ShowButtons.prototype, \"groupDelete\", void 0);\n return ShowButtons;\n}(ChildProperty));\nexport { ShowButtons };\nvar QueryBuilder = /** @class */ (function (_super) {\n __extends(QueryBuilder, _super);\n function QueryBuilder(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isReadonly = true;\n _this.fields = { text: 'label', value: 'field' };\n _this.updatedRule = { not: false, condition: 'and', isLocked: false };\n _this.isLocale = false;\n _this.isRefreshed = false;\n _this.isNotified = false;\n _this.isAddSuccess = false;\n _this.isNotValueChange = false;\n _this.isFieldChange = false;\n _this.isFieldClose = false;\n _this.isDestroy = false;\n _this.isGetNestedData = false;\n _this.isCustomOprCols = [];\n _this.groupCounter = 0;\n _this.lockItems = [];\n _this.groupIndex = -1;\n _this.ruleIndex = -1;\n _this.isLastGroup = false;\n _this.cloneGrpBtnClick = false;\n _this.isMiddleGroup = false;\n _this.cloneRuleBtnClick = false;\n MultiSelect.Inject(CheckBoxSelection);\n return _this;\n }\n QueryBuilder.prototype.getPersistData = function () {\n return this.addOnPersist(['rule']);\n };\n /**\n * Clears the rules without root rule.\n *\n * @returns {void}.\n */\n QueryBuilder.prototype.reset = function () {\n this.isImportRules = false;\n var bodyElem = this.element.querySelector('.e-group-body');\n var inputElement = this.element.querySelectorAll('input.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i], 'tooltip').destroy();\n }\n else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n }\n if (bodyElem) {\n bodyElem.innerHTML = '';\n }\n else {\n var grpContainer = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var grpHeader = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBody = this.createElement('div', { attrs: { class: 'e-group-body' } });\n grpContainer.appendChild(grpHeader).appendChild(grpBody);\n this.element.appendChild(grpContainer);\n bodyElem = this.element.querySelector('.e-group-body');\n }\n if (this.headerTemplate && this.isRoot) {\n this.element.innerHTML = '';\n this.isRoot = false;\n }\n if (this.enableNotCondition) {\n removeClass(this.element.querySelectorAll('.e-qb-toggle'), 'e-active-toggle');\n }\n bodyElem.appendChild(this.createElement('div', { attrs: { class: 'e-rule-list' } }));\n this.levelColl[this.element.id + '_group0'] = [0];\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n this.disableRuleCondition(bodyElem.parentElement);\n };\n QueryBuilder.prototype.getWrapper = function () {\n return this.element;\n };\n QueryBuilder.prototype.getModuleName = function () {\n return 'query-builder';\n };\n QueryBuilder.prototype.requiredModules = function () {\n var modules = [];\n modules.push({\n member: 'query-library',\n args: [this]\n });\n return modules;\n };\n QueryBuilder.prototype.GetRootColumnName = function (field) {\n return this.separator ? field.split(this.separator)[0] : field;\n };\n QueryBuilder.prototype.initialize = function () {\n if (this.dataColl.length) {\n var columnKeys = Object.keys(this.dataColl[0]);\n var cols = [];\n var categories = [];\n var type = void 0;\n var groupBy = false;\n var isDate = false;\n var value = void 0;\n var validateObj = { isRequired: true, min: 0, max: Number.MAX_VALUE };\n if (this.columns.length) {\n this.columnSort();\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n this.updateCustomOperator(columns[i], 'initial');\n if (!columns[i].type) {\n if (columnKeys.indexOf(columns[i].field) > -1) {\n value = this.dataColl[0][columns[i].field];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object') {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n columns[i].type = type;\n isDate = false;\n }\n type = 'string';\n }\n if (!columns[i].validation) {\n columns[i].validation = validateObj;\n }\n if (columns[i].category) {\n groupBy = true;\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n if (categories.indexOf(columns[i].category) < 0) {\n categories.push(columns[i].category);\n }\n if (!columns[i].operators ||\n (this.isLocale && this.isCustomOprCols.indexOf(columns[i].field) !== 0)) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n if (groupBy && (categories.length > 1 || categories[0] !== this.l10n.getConstant('OtherFields'))) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n else {\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n value = this.dataColl[0][columnKeys[i]];\n type = typeof value;\n if (type === 'string') {\n isDate = !isNaN(Date.parse(value));\n }\n else if (type === 'object' && !Object.keys(value).length) {\n isDate = value instanceof Date && !isNaN(value.getTime());\n type = 'string';\n }\n cols[i] = { 'field': columnKeys[i], 'label': columnKeys[i], 'type': isDate ? 'date' : type,\n 'validation': validateObj };\n isDate = false;\n cols[i].operators = this.customOperators[cols[i].type + 'Operator'];\n if (type === 'object') {\n this.updateSubFields(value, cols[i]);\n }\n }\n this.columns = cols;\n }\n }\n else if (this.columns.length) {\n var columns = this.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].category) {\n this.fields = { text: 'label', value: 'field', groupBy: 'category' };\n }\n else {\n columns[i].category = this.l10n.getConstant('OtherFields');\n }\n this.updateCustomOperator(columns[i]);\n if (!columns[i].operators || this.isLocale) {\n columns[i].operators = this.customOperators[columns[i].type + 'Operator'];\n }\n }\n this.updateSubFieldsFromColumns(this.columns);\n }\n this.trigger('dataBound', { type: 'dataBound' });\n };\n QueryBuilder.prototype.updateSubFieldsFromColumns = function (col, field) {\n for (var i = 0; i < col.length; i++) {\n if (this.separator !== '' && col[i].field.indexOf(this.separator) < 0) {\n col[i].field = field ? field + this.separator + col[i].field : col[i].field;\n }\n if (col[i].operators) {\n this.updateCustomOperator(col[i]);\n }\n else if (col[i].type && col[i].type !== 'object') {\n col[i].operators = this.customOperators[col[i].type + 'Operator'];\n }\n if (col[i].columns) {\n col[i].type = 'object';\n this.updateSubFieldsFromColumns(col[i].columns, col[i].field);\n }\n }\n };\n QueryBuilder.prototype.updateSubFields = function (value, col, data) {\n var sampCol;\n col.columns = [];\n var columnKeys = Object.keys(value);\n var field;\n var label;\n var type;\n var result;\n data = data ? data : this.dataColl[0];\n for (var i = 0, len = columnKeys.length; i < len; i++) {\n var compField = col.field.split('.');\n if (data) {\n result = data[compField[compField.length - 1]][columnKeys[i]];\n }\n else {\n result = this.dataColl[0][col.field][columnKeys[i]];\n }\n var resData = data[col.field.split(this.separator)[col.field.split(this.separator).length - 1]];\n type = typeof result;\n field = col.field + this.separator + columnKeys[i];\n label = columnKeys[i];\n type = (type === 'object' && !isNaN(Date.parse(result))) ? 'date' : type;\n sampCol = { field: field, label: label, type: type };\n if (type !== 'object') {\n sampCol.operators = this.customOperators[type + 'Operator'];\n }\n col.columns.push(sampCol);\n if (type === 'object') {\n this.updateSubFields(result, sampCol, resData);\n }\n }\n };\n QueryBuilder.prototype.updateCustomOperator = function (column, from) {\n if (column.operators) {\n if (!this.isLocale && from === 'initial' && !isNullOrUndefined(this.isCustomOprCols)) {\n this.isCustomOprCols.push(column.field);\n }\n var _loop_1 = function (j) {\n var sqlIdx = Object.keys(column.operators[j]).indexOf('sqlOperator');\n if (sqlIdx > -1) {\n var operator_1 = column.operators[j];\n var operColl = Object.keys(operator_1);\n var values = operColl.map(function (key) { return operator_1[\"\" + key]; }).join(',').split(',');\n var valueIdx = operColl.indexOf('value');\n this_1.operators[values[valueIdx]] = values[sqlIdx];\n }\n };\n var this_1 = this;\n for (var j = 0; j < column.operators.length; j++) {\n _loop_1(j);\n }\n }\n };\n QueryBuilder.prototype.focusEventHandler = function (event) {\n this.target = event.target;\n };\n QueryBuilder.prototype.clickEventHandler = function (event) {\n var _this = this;\n var target = event.target;\n var args;\n this.isImportRules = false;\n var groupID;\n if (target.tagName === 'SPAN') {\n target = target.parentElement;\n }\n if (target.className.indexOf('e-collapse-rule') > -1) {\n var animation = new Animation({ duration: 1000, delay: 0 });\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n }\n var summaryElem = document.getElementById(this.element.id + '_summary_content');\n var txtareaElem = summaryElem.querySelector('.e-summary-text');\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n var groupElem = this.element.querySelector('.e-group-container');\n groupElem.style.display = 'none';\n txtareaElem.textContent = this.getSqlFromRules(this.rule);\n summaryElem.style.display = 'block';\n txtareaElem.style.height = txtareaElem.scrollHeight + 'px';\n }\n if (target.tagName === 'BUTTON' && target.className.indexOf('e-qb-toggle') < 0) {\n switch (true) {\n case target.className.indexOf('e-removerule') > -1:\n this.actionButton = target;\n this.deleteRule(target);\n break;\n case target.className.indexOf('e-clone-rule-btn') > -1:\n this.actionButton = target;\n this.cloneRuleBtnClick = true;\n this.ruleClone(target);\n break;\n case target.className.indexOf('e-lock-rule-btn') > -1:\n this.actionButton = target;\n this.ruleLock(target);\n break;\n case target.className.indexOf('e-lock-grp-btn') > -1:\n this.actionButton = target;\n this.groupLock(target);\n break;\n case target.className.indexOf('e-clone-grp-btn') > -1:\n this.actionButton = target;\n this.cloneGrpBtnClick = true;\n this.groupClone(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-deletegroup') > -1:\n this.actionButton = target;\n this.deleteGroup(closest(target, '.e-group-container'));\n break;\n case target.className.indexOf('e-edit-rule') > -1:\n var animation = new Animation({ duration: 1000, delay: 0 });\n animation.animate('.e-query-builder', { name: 'SlideLeftIn' });\n document.getElementById(this.element.id + '_summary_content').style.display = 'none';\n if (this.element.querySelectorAll('.e-group-container').length < 1) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not);\n var mRules = extend({}, this.rule, {}, true);\n this.setGroupRules(mRules);\n this.renderSummaryCollapse();\n }\n else {\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem.querySelectorAll('.e-collapse-rule').length < 1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n }\n break;\n }\n }\n else if ((target.tagName === 'LABEL' && target.parentElement.className.indexOf('e-btn-group') > -1) ||\n target.className.indexOf('e-qb-toggle') > -1) {\n var element = closest(target, '.e-group-container');\n if (!this.headerTemplate) {\n var forIdValue = target.getAttribute('for');\n var targetValue = void 0;\n if (forIdValue) {\n targetValue = document.getElementById(forIdValue).getAttribute('value');\n }\n groupID = element.id.replace(this.element.id + '_', '');\n var group = this.getGroup(groupID);\n var ariaChecked = void 0;\n if (this.enableNotCondition) {\n if (target.className.indexOf('e-qb-toggle') > -1) {\n var toggleElem = element.getElementsByClassName('e-qb-toggle')[0];\n if (toggleElem.className.indexOf('e-active-toggle') > -1) {\n removeClass([toggleElem], 'e-active-toggle');\n ariaChecked = false;\n }\n else {\n addClass([toggleElem], 'e-active-toggle');\n ariaChecked = true;\n }\n targetValue = group.condition;\n }\n else {\n ariaChecked = group.not;\n }\n }\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase() };\n if (this.enableNotCondition) {\n args = { groupID: groupID, cancel: false, type: 'condition', value: targetValue.toLowerCase(),\n 'not': ariaChecked };\n }\n }\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.beforeSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.beforeSuccessCallBack(args, target);\n }\n this.target = target;\n }\n };\n QueryBuilder.prototype.beforeSuccessCallBack = function (args, target) {\n if (args && !args.cancel) {\n var element = closest(target, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n var rule = this.getParentGroup(element);\n rule.condition = args.value;\n if (this.enableNotCondition) {\n rule.not = args.not;\n }\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, type: 'condition', value: rule.condition });\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'condition');\n }\n };\n QueryBuilder.prototype.selectBtn = function (target, event) {\n if (event.name === 'beforeOpen') {\n if (this.showButtons.groupInsert || isNullOrUndefined(this.showButtons.groupInsert)) {\n if (this.element.querySelectorAll('.e-group-container').length >= this.maxGroupCount + 1) {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n else {\n removeClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n if (this.enableRtl) {\n addClass([event.element.querySelector('li').parentElement], 'e-rtl');\n }\n }\n else {\n addClass([event.element.querySelector('li span.e-addgroup').parentElement], 'e-button-hide');\n }\n }\n else if (event.element.children[0].className.indexOf('e-addrule') > -1) {\n this.addRuleElement(closest(target, '.e-group-container'), {});\n }\n else if (event.element.children[0].className.indexOf('e-addgroup') > -1) {\n this.addGroupElement(true, closest(target, '.e-group-container'), '', true);\n }\n };\n QueryBuilder.prototype.appendRuleElem = function (target, column, type, parentId, action, rule) {\n var ruleElem;\n var elem;\n var ruleListElem = target.querySelector('.e-rule-list');\n var args;\n if (type === 'change') {\n ruleElem = select('#' + parentId, target);\n }\n else {\n ruleElem = this.createElement('div', { attrs: { class: 'e-rule-container' } });\n ruleElem.setAttribute('id', target.id + '_rule' + this.ruleIdCounter);\n if (this.showButtons.cloneRule && this.cloneRuleBtnClick) {\n if (this.ruleIndex < 0) {\n ruleListElem.appendChild(ruleElem);\n }\n else {\n ruleListElem.insertBefore(ruleElem, ruleListElem.children[this.ruleIndex + 1]); // added clone rule to next position\n }\n this.cloneRuleBtnClick = false;\n }\n else {\n ruleListElem.appendChild(ruleElem);\n }\n this.ruleIdCounter++;\n }\n if (column && column.ruleTemplate && rule) {\n args = { requestType: 'template-initialize', ruleID: ruleElem.id, action: action, fields: this.fields, rule: rule };\n this.trigger('actionBegin', args);\n this.ruleTemplateFn = this.templateParser(column.ruleTemplate);\n var templateID = this.element.id + column.field;\n var template = void 0;\n args.fields = this.fields;\n args.columns = this.columns;\n if (rule.field === '') {\n rule.field = column.field;\n }\n args.operators = this.getOperators(rule.field);\n args.operatorFields = { text: 'key', value: 'value' };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.ruleTemplateFn(args, this, ruleElem.id, templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.ruleTemplateFn(args, this, ruleElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.ruleTemplateFn(args, this, 'Template', templateID);\n elem = template;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(elem, ruleElem);\n ruleElem.children[ruleElem.children.length - 1].className += ' e-rule-field';\n }\n else {\n template = this.ruleTemplateFn(args, this, 'Template', templateID)[0];\n elem = template;\n elem.className += ' e-rule-field';\n ruleElem.appendChild(elem);\n }\n }\n else {\n elem = this.ruleElem.querySelector('.e-rule-field').cloneNode(true);\n ruleElem.appendChild(elem);\n }\n if (this.showButtons.lockGroup) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.lockRule) {\n removeClass(ruleElem.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneGroup) {\n removeClass(ruleElem.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n if (this.showButtons.cloneRule) {\n removeClass(ruleElem.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n if (this.showButtons.ruleDelete) {\n removeClass(ruleElem.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n if (column && column.ruleTemplate && rule) {\n this.renderReactTemplates();\n }\n return ruleElem;\n };\n QueryBuilder.prototype.addRuleElement = function (target, rule, column, action, parentId, isRuleTemplate) {\n var _this = this;\n if (!target) {\n return;\n }\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertRule' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addRuleSuccessCallBack(observedChangeArgs, target, rule, column, action, parentId, isRuleTemplate);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addRuleSuccessCallBack(args, target, rule, column, action, parentId, isRuleTemplate);\n }\n };\n QueryBuilder.prototype.addRuleSuccessCallBack = function (args, trgt, rule, col, act, pId, isRlTmp) {\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ruleID;\n var column = (rule && rule.field) ? this.getColumn(rule.field) : col ? col : this.columns[0];\n var operators;\n var dropDownList;\n var ruleElem;\n var newRule = { 'label': '', 'field': '', 'type': '', 'operator': '' };\n if (!args.cancel) {\n if (column && column.ruleTemplate && rule.field) {\n this.selectedColumn = column;\n operators = this.selectedColumn.operators;\n newRule = { 'label': column.label, 'field': column.field, 'type': column.type, 'operator': operators[0].value };\n var passedRule = Object.keys(rule).length ? rule : newRule;\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field', passedRule);\n var args_1 = { requestType: 'template-create', action: 'insert-rule', ruleID: ruleElem.id,\n fields: this.fields, rule: passedRule };\n this.trigger('actionBegin', args_1);\n }\n else {\n ruleElem = this.appendRuleElem(trgt, column, act, pId, 'field');\n ruleElem.querySelector('.e-filter-input').setAttribute('id', ruleElem.id + '_filterkey');\n var element = ruleElem.querySelector('.e-rule-delete');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n element.textContent = this.l10n.getConstant('Remove');\n addClass([element], 'e-flat');\n addClass([element], 'e-primary');\n }\n else {\n addClass([element], 'e-round');\n addClass([element], 'e-icon-btn');\n element.setAttribute('title', this.l10n.getConstant('DeleteRule'));\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-delete-icon' } });\n ruleElem.querySelector('.e-rule-delete').appendChild(spanElement);\n }\n if (!this.showButtons.ruleDelete) {\n element.classList.add('e-button-hide');\n }\n }\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElem.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElem.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElem.className.indexOf('e-joined-rule') < 0) {\n ruleElem.className += ' e-joined-rule';\n }\n if (ruleElem.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElem.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElem.previousElementSibling && ruleElem.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElem.className.indexOf('e-separate-rule') < 0) {\n ruleElem.className += ' e-separate-rule';\n }\n if (!this.isImportRules) {\n this.updateAddedRule(trgt, rule, newRule, isRlTmp, pId);\n }\n if (!column || (column && !column.ruleTemplate) || !rule.field) {\n if (this.fieldMode === 'Default') {\n var ddlField = void 0;\n var ddlValue = void 0;\n if (this.separator && rule.field) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else if (this.autoSelectField) {\n ddlValue = this.GetRootColumnName(rule.field);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(rule.field) : rule.field;\n }\n ddlField = {\n dataSource: this.columns,\n fields: this.fields, placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), close: this.fieldClose.bind(this, ruleElem.id + '_filterkey'),\n change: this.changeField.bind(this), value: rule ? ddlValue : null, open: this.popupOpen.bind(this, true), cssClass: 'qb-dropdownlist'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleElem.id + '_filterkey');\n var ddlVal = void 0;\n if (this.separator && rule.field) {\n ddlVal = this.GetRootColumnName(rule.field);\n }\n else {\n ddlVal = this.isImportRules ? this.GetRootColumnName(rule.field) : dropDownList.value;\n }\n this.selectedColumn = dropDownList.getDataByValue(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropDownList.element, itemData: this.selectedColumn\n });\n }\n }\n else {\n var ddlField = void 0;\n var ddlValue = this.isImportRules ? rule.field : rule.field;\n this.dummyDropdownTreeDs = extend([], this.columns, [], true);\n this.updateDropdowntreeDS(this.dummyDropdownTreeDs);\n ddlField = {\n fields: { dataSource: this.dummyDropdownTreeDs,\n value: 'field', text: 'label', child: 'columns', expanded: 'expanded', selectable: 'selectable' },\n placeholder: this.l10n.getConstant('SelectField'), showClearButton: false,\n popupHeight: ((this.columns.length > 5) ? height : 'auto'), changeOnBlur: false,\n change: this.changeField.bind(this), value: !isNullOrUndefined(ddlValue) ? [ddlValue] : null,\n open: this.popupOpen.bind(this, false), treeSettings: { expandOn: 'Click' },\n cssClass: 'e-qb-ddt'\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropdowntree = new DropDownTree(ddlField);\n dropdowntree.appendTo('#' + ruleElem.id + '_filterkey');\n if (!isNullOrUndefined(dropdowntree.value)) {\n var value = this.getLabelFromColumn(dropdowntree.value[0]);\n dropdowntree.element.value = value;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlVal = !isNullOrUndefined(rule.field) ?\n this.GetRootColumnName(rule.field) : dropdowntree.value;\n this.selectedColumn = this.getColumn(ddlVal);\n if (Object.keys(rule).length) {\n this.changeRule(rule, {\n element: dropdowntree.element, itemData: this.selectedColumn\n });\n }\n }\n }\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (!this.isImportRules) {\n this.trigger('change', { groupID: trgt.id.replace(this.element.id + '_', ''), ruleID: ruleID, type: 'insertRule' });\n }\n }\n };\n QueryBuilder.prototype.updateDropdowntreeDS = function (columns) {\n for (var i = 0; i < columns.length; i++) {\n if (columns[parseInt(i.toString(), 10)].type === 'object') {\n columns[parseInt(i.toString(), 10)].selectable = false;\n this.updateDropdowntreeDS(columns[parseInt(i.toString(), 10)].columns);\n }\n }\n };\n QueryBuilder.prototype.updateAddedRule = function (target, rule, newRule, isRuleTemplate, pId) {\n var ruleElem;\n var index = 0;\n var groupElem;\n var rules;\n if (isRuleTemplate) {\n ruleElem = select('#' + pId, target);\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index] = rule;\n }\n else {\n groupElem = closest(target, '.e-group-container');\n rules = this.getParentGroup(groupElem);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var custom = rule.custom;\n if (Object.keys(rule).length) {\n if (this.ruleIndex < 0) {\n rules.rules.push({\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[rules.rules.length - 1].custom = custom;\n }\n }\n else {\n rules.rules.splice(this.ruleIndex + 1, 0, {\n 'field': rule.field, 'type': rule.type, 'label': rule.label, 'operator': rule.operator, value: rule.value\n });\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.rules[this.ruleIndex + 1].custom = custom;\n }\n }\n }\n else {\n if (custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newRule.custom = custom;\n }\n if (this.autoSelectField) {\n rule.field = newRule.field = this.rule.rules[0].field;\n }\n rules.rules.push(newRule);\n }\n }\n this.disableRuleCondition(target, rules);\n };\n QueryBuilder.prototype.changeRuleTemplate = function (column, element) {\n var operVal = this.selectedColumn.operators;\n if (column.ruleTemplate) {\n return;\n }\n else {\n var parentGroup = closest(element, '.e-group-container');\n var parentId = closest(element, '.e-rule-container').id;\n if (this.previousColumn && this.previousColumn.ruleTemplate) {\n detach(element.closest('[id=\"' + parentId + '\"]').querySelector('.e-rule-field'));\n this.clearQBTemplate([parentId]);\n }\n if (column) {\n var rule = { field: column.field, label: column.label, operator: operVal[0].value, value: '' };\n this.addRuleElement(parentGroup, rule, column, 'change', parentId, true);\n }\n }\n };\n QueryBuilder.prototype.renderToolTip = function (element) {\n var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'), isSticky: true,\n position: 'BottomCenter', cssClass: 'e-querybuilder-error', afterClose: function () {\n tooltip.destroy();\n }, beforeOpen: function (args) {\n var tooltipCloseElement = args.element.querySelector('.e-tooltip-close');\n if (tooltipCloseElement) {\n tooltipCloseElement.style.display = 'none';\n }\n } });\n tooltip.appendTo(element);\n tooltip.open(element);\n };\n /**\n * Validate the conditions and it display errors for invalid fields.\n *\n * @returns {boolean} - Validation\n */\n QueryBuilder.prototype.validateFields = function () {\n var isValid = true;\n var dropDownTreeObj;\n if (this.allowValidation) {\n var excludeOprs = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n var i = void 0;\n var len = void 0;\n var fieldElem = void 0;\n var indexElem = void 0;\n var valArray = [];\n var groupElem = void 0;\n var index = void 0;\n var dropDownObj = void 0;\n var tempElem = void 0;\n var rule = void 0;\n var ruleElemCln = this.element.querySelectorAll('.e-rule-container');\n for (i = 0, len = ruleElemCln.length; i < len; i++) {\n var validateRule = void 0;\n groupElem = closest(ruleElemCln[i], '.e-group-container');\n rule = this.getParentGroup(groupElem);\n index = 0;\n indexElem = tempElem = ruleElemCln[i];\n if (this.fieldMode === 'DropdownTree') {\n dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');\n if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {\n this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);\n validateRule = this.selectedColumn.validation;\n }\n }\n else {\n dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');\n if (dropDownObj && dropDownObj.value) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;\n }\n }\n fieldElem = tempElem.querySelector('.e-rule-field input.e-control');\n if (validateRule && validateRule.isRequired) {\n while (indexElem && indexElem.previousElementSibling !== null) {\n indexElem = indexElem.previousElementSibling;\n index++;\n }\n fieldElem = tempElem.querySelector('.e-rule-operator .e-control');\n if (!rule.rules[index].operator) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0 && fieldElem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n if (rule.rules[index].value instanceof Array) {\n valArray = rule.rules[index].value;\n }\n if (excludeOprs.indexOf(rule.rules[index].operator) < -1 &&\n (isNullOrUndefined(rule.rules[index].value) &&\n rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||\n (rule.rules[index].value instanceof Array && valArray.length < 1)) {\n var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');\n isValid = false;\n for (var j = 0, jLen = valElem.length; j < jLen; j++) {\n var element = valElem[j];\n var elem = void 0;\n if (element.parentElement.className.indexOf('e-searcher') > -1) {\n elem = closest(element, '.e-multi-select-wrapper');\n if (elem.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(elem);\n }\n }\n else if (valElem[j].parentElement.className.indexOf('e-tooltip') < 0 && valElem[j].className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(valElem[j].parentElement);\n }\n j++;\n }\n }\n }\n else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||\n (dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||\n dropDownTreeObj.value.length < 1))) {\n if (fieldElem.parentElement.className.indexOf('e-tooltip') < 0) {\n this.renderToolTip(fieldElem.parentElement);\n }\n isValid = false;\n }\n }\n }\n return isValid;\n };\n QueryBuilder.prototype.refreshLevelColl = function () {\n this.levelColl = {};\n var groupElem = this.element.querySelector('.e-group-container');\n if (groupElem) {\n this.levelColl[groupElem.id] = [0];\n var obj = { groupElement: groupElem, level: [0] };\n this.refreshLevel(obj);\n }\n };\n QueryBuilder.prototype.refreshLevel = function (obj) {\n var ruleList = obj.groupElement.querySelector('.e-rule-list').children;\n var childElem;\n var groupElem = obj.groupElement;\n var i;\n var iLen = ruleList.length;\n var groupCount = 0;\n for (i = 0; i < iLen; i++) {\n childElem = ruleList[i];\n if (childElem.className.indexOf('e-group-container') > -1) {\n obj.level.push(groupCount);\n this.levelColl[childElem.id] = obj.level.slice();\n groupCount++;\n obj.groupElement = childElem;\n obj = this.refreshLevel(obj);\n }\n }\n var ruleListElem = closest(groupElem, '.e-rule-list');\n obj.groupElement = ruleListElem ? closest(ruleListElem, '.e-group-container') : groupElem;\n obj.level = this.levelColl[obj.groupElement.id].slice();\n return obj;\n };\n QueryBuilder.prototype.groupTemplate = function () {\n var glueElem;\n var inputElem;\n var labelElem;\n var grpActElem;\n var groupBtn;\n var groupElem = this.createElement('div', { attrs: { class: 'e-group-container' } });\n var groupHdrElem = this.createElement('div', { attrs: { class: 'e-group-header' } });\n var grpBodyElem = this.createElement('div', { attrs: { class: 'e-group-body' } });\n var rulesElem = this.createElement('div', { attrs: { class: 'e-rule-list' } });\n groupElem.appendChild(groupHdrElem);\n grpBodyElem.appendChild(rulesElem);\n groupElem.appendChild(grpBodyElem);\n // create button group in OR and AND process\n if (!this.headerTemplate) {\n glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });\n if (this.enableNotCondition) {\n inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n glueElem.appendChild(inputElem);\n }\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-and', value: 'AND' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-and-lbl e-small' },\n innerHTML: this.l10n.getConstant('AND') });\n glueElem.appendChild(labelElem);\n inputElem = this.createElement('input', { attrs: { type: 'radio', class: 'e-btngroup-or', value: 'OR' } });\n glueElem.appendChild(inputElem);\n labelElem = this.createElement('label', { attrs: { class: 'e-lib e-btn e-btngroup-or-lbl e-small' },\n innerHTML: this.l10n.getConstant('OR') });\n glueElem.appendChild(labelElem);\n groupHdrElem.appendChild(glueElem);\n grpActElem = this.createElement('div', { attrs: { class: 'e-group-action' } });\n groupBtn = this.createElement('button', { attrs: { type: 'button', class: 'e-add-btn' } });\n grpActElem.appendChild(groupBtn);\n groupHdrElem.appendChild(grpActElem);\n }\n return groupElem;\n };\n QueryBuilder.prototype.ruleTemplate = function () {\n var tempElem;\n var clsName;\n var cloneClsName;\n var lockClsName;\n var ruleElem = this.createElement('div');\n var fieldElem = this.createElement('div', { attrs: { class: 'e-rule-field' } });\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-filter' } });\n var filterElem = this.createElement('input', { attrs: { type: 'text', class: 'e-filter-input' } });\n tempElem.appendChild(filterElem);\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-operator' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value' } });\n fieldElem.appendChild(tempElem);\n tempElem = this.createElement('div', { attrs: { class: 'e-rule-value-delete' } });\n if (this.showButtons.cloneRule) {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn';\n }\n else {\n cloneClsName = 'e-clone-rule-btn e-clone-rule e-css e-btn e-small e-round e-icon-btn e-button-hide';\n }\n if (this.showButtons.lockRule) {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-rule-btn e-lock-rule e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneRuleBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneRule'), type: 'button', class: cloneClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneRuleBtnElem.appendChild(spanElement);\n var cloneLockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockRule'), type: 'button', class: lockClsName } });\n spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n cloneLockBtnElem.appendChild(spanElement);\n if (this.showButtons.ruleDelete || isNullOrUndefined(this.showButtons.ruleDelete)) {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small';\n }\n else {\n clsName = 'e-removerule e-rule-delete e-css e-btn e-small e-button-hide';\n }\n var delBtnElem = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n tempElem.appendChild(cloneRuleBtnElem);\n tempElem.appendChild(cloneLockBtnElem);\n tempElem.appendChild(delBtnElem);\n fieldElem.appendChild(tempElem);\n ruleElem.appendChild(fieldElem);\n return ruleElem;\n };\n QueryBuilder.prototype.addGroupElement = function (isGroup, target, condition, isBtnClick, not, isRoot, rule) {\n var _this = this;\n var args = { groupID: target.id.replace(this.element.id + '_', ''), cancel: false, type: 'insertGroup' };\n if (!this.isImportRules && !this.isInitialLoad) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.addGroupSuccess(observedChangeArgs, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n });\n }\n else {\n this.isInitialLoad = false;\n this.addGroupSuccess(args, isGroup, target, condition, isBtnClick, not, isRoot, rule);\n }\n };\n QueryBuilder.prototype.addGroupSuccess = function (args, isGroup, eventTarget, condition, isBtnClick, not, isRoot, rule) {\n if (!args.cancel && (this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount)) {\n var target = eventTarget;\n var dltGroupBtn = void 0;\n var groupID = '';\n if (target.className.indexOf('e-group-container') < 0) {\n groupID = target.querySelector('.e-group-container') && target.querySelector('.e-group-container').id;\n }\n else {\n groupID = target.id;\n }\n var groupElem = this.groupElem.cloneNode(true);\n groupElem.setAttribute('id', this.element.id + '_group' + this.groupIdCounter);\n if (this.headerTemplate) {\n if (isRoot) {\n isGroup = false;\n groupElem.setAttribute('id', this.element.id + '_group0');\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n this.groupIdCounter = 0;\n }\n else {\n this.headerTemplateFn(groupElem, not, condition, rule, groupID);\n }\n }\n this.groupIdCounter++;\n if (!this.headerTemplate) {\n var andInpElem = groupElem.querySelector('.e-btngroup-and');\n var orInpElem = groupElem.querySelector('.e-btngroup-or');\n var andLblElem = groupElem.querySelector('.e-btngroup-and-lbl');\n var orLblElem = groupElem.querySelector('.e-btngroup-or-lbl');\n andInpElem.setAttribute('id', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('id', this.element.id + '_or' + this.btnGroupId);\n andInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n orInpElem.setAttribute('name', this.element.id + '_and' + this.btnGroupId);\n andLblElem.setAttribute('for', this.element.id + '_and' + this.btnGroupId);\n orLblElem.setAttribute('for', this.element.id + '_or' + this.btnGroupId);\n this.btnGroupId++;\n }\n if (isGroup) {\n var clsName = void 0;\n if (this.showButtons.groupDelete || isNullOrUndefined(this.showButtons.groupDelete)) {\n clsName = 'e-deletegroup';\n }\n else {\n clsName = 'e-deletegroup e-button-hide';\n }\n dltGroupBtn = this.createElement('button', { attrs: { type: 'button', class: clsName } });\n var button = new Button({ iconCss: 'e-icons e-delete-icon', cssClass: 'e-small e-round' });\n button.appendTo(dltGroupBtn);\n dltGroupBtn.setAttribute('title', this.l10n.getConstant('DeleteGroup'));\n rippleEffect(dltGroupBtn, { selector: '.deletegroup' });\n var ruleList = target.querySelector('.e-rule-list');\n var childElems = ruleList.children;\n var grpLen = 0;\n for (var j = 0, jLen = childElems.length; j < jLen; j++) {\n if (childElems[j].className.indexOf('e-group-container') > -1) {\n grpLen += 1;\n }\n }\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick) {\n if (this.groupIndex === (childElems.length - 1)) {\n ruleList.appendChild(groupElem);\n this.isLastGroup = true;\n }\n else {\n childElems[this.groupIndex + 1].parentNode.insertBefore(groupElem, childElems[this.groupIndex + 1]); // clone the element to nxt element\n this.isMiddleGroup = true;\n }\n }\n else {\n ruleList.appendChild(groupElem);\n }\n var level = this.levelColl[target.id].slice(0);\n level.push(grpLen);\n this.levelColl[groupElem.id] = level;\n if (this.groupIndex > -1) {\n this.refreshLevelColl();\n }\n if (!this.isImportRules) {\n this.isAddSuccess = true;\n this.addGroups([], target.id.replace(this.element.id + '_', ''));\n this.isAddSuccess = false;\n if (isBtnClick && this.addRuleToNewGroups) {\n this.addRuleElement(groupElem, {});\n }\n }\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.cloneGroup) {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-clone-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var cloneBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('CloneGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-copy' } });\n cloneBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(cloneBtnElem);\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var lockSpanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(lockSpanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n groupElem.querySelector('.e-group-action').appendChild(dltGroupBtn);\n }\n }\n else {\n if (!this.headerTemplate) {\n var lockClsName = '';\n if (this.showButtons.lockGroup) {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn';\n }\n else {\n lockClsName = 'e-lock-grp-btn e-css e-btn e-small e-round e-icons e-icon-btn e-button-hide';\n }\n var lockBtnElem = this.createElement('button', { attrs: { title: this.l10n.getConstant('LockGroup'), type: 'button', class: lockClsName } });\n var spanElement = this.createElement('span', { attrs: { class: 'e-btn-icon e-icons e-unlock' } });\n lockBtnElem.appendChild(spanElement);\n groupElem.querySelector('.e-group-action').appendChild(lockBtnElem);\n }\n target.appendChild(groupElem);\n this.levelColl[groupElem.id] = [0];\n }\n if (this.enableNotCondition) {\n if (!this.headerTemplate) {\n var notElem = groupElem.querySelector('.e-qb-toggle');\n var tglBtn = new Button({ content: this.l10n.getConstant('NOT'), cssClass: 'e-btn e-small' });\n tglBtn.appendTo(notElem);\n groupElem.querySelector('.e-btngroup-and-lbl').classList.add('e-not');\n if (this.updatedRule && this.updatedRule.not) {\n addClass([notElem], 'e-active-toggle');\n }\n }\n }\n this.updatedRule = null;\n if (this.headerTemplate) {\n var args_2 = { requestType: 'header-template-create', ruleID: groupElem.id, condition: condition,\n notCondition: this.enableNotCondition ? not : undefined };\n this.trigger('actionBegin', args_2);\n }\n else {\n var groupBtn = groupElem.querySelector('.e-add-btn');\n var btnObj = new DropDownButton({\n items: this.items,\n cssClass: 'e-round e-small e-caret-hide e-addrulegroup',\n iconCss: 'e-icons e-add-icon',\n beforeOpen: this.selectBtn.bind(this, groupBtn),\n select: this.selectBtn.bind(this, groupBtn)\n });\n btnObj.appendTo(groupBtn);\n groupBtn.setAttribute('title', this.l10n.getConstant('AddButton'));\n }\n if (!this.isImportRules) {\n var grpId = target.id.replace(this.element.id + '_', '');\n var chgrpId = groupElem.id.replace(this.element.id + '_', '');\n this.trigger('change', { groupID: grpId, type: 'insertGroup', childGroupID: chgrpId });\n }\n }\n };\n QueryBuilder.prototype.headerTemplateFn = function (groupElem, not, condition, rule, groupID) {\n var template;\n var templateID = this.element.id + '_header';\n var args;\n var groupHdr = groupElem.querySelector('.e-group-header');\n if (this.headerTemplate) {\n args = { requestType: 'header-template-initialize', ruleID: groupElem.id,\n notCondition: this.enableNotCondition ? not : undefined,\n condition: condition, rule: this.getRuleCollection(rule, true), groupID: groupID };\n this.trigger('actionBegin', args);\n this.headerFn = this.templateParser(this.headerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.headerFn(args, this, groupElem.id, templateID)[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.headerFn(args, this, groupElem.id, templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n groupHdr.appendChild(template);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isVue3) {\n template = this.headerFn(args, this, groupElem.id, templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(template, groupHdr);\n }\n else {\n template = this.headerFn(args, this, 'Template', templateID)[0];\n groupHdr.appendChild(template);\n }\n this.renderReactTemplates();\n }\n return groupElem;\n };\n /**\n * Notify the changes to component.\n *\n * @param {string | number | boolean | Date | string[] | number[] | Date[]} value - 'value' to be passed to update the rule value.\n * @param {Element} element - 'element' to be passed to update the rule.\n * @param {string} type - 'type' to be passed to update the rule .\n * @returns {void}.\n */\n QueryBuilder.prototype.notifyChange = function (value, element, type) {\n var grpElement = closest(element, '.e-group-container');\n var rules = this.getParentGroup(grpElement);\n var ruleElement = closest(element, '.e-rule-container');\n var index = 0;\n if (type === 'not') {\n rules.not = value;\n return;\n }\n if (type === 'condition') {\n rules.condition = value;\n return;\n }\n while (ruleElement && ruleElement.previousElementSibling !== null) {\n ruleElement = ruleElement.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n var column = this.getColumn(rule.field);\n var format = this.getFormat(column.format);\n if (column.type === 'date') {\n if (value instanceof Date) {\n value = this.intl.formatDate(value, format);\n }\n else if (value instanceof Array) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] && value[i] instanceof Date) {\n value[i] = this.intl.formatDate(value[i], format);\n }\n }\n }\n }\n if (column.ruleTemplate) {\n this.templateChange(element, value, type);\n }\n else {\n this.isNotified = true;\n this.updateRules(element, value);\n this.isNotified = false;\n }\n };\n QueryBuilder.prototype.templateChange = function (element, value, type) {\n var grpElem = closest(element, '.e-group-container');\n var eventsArgs;\n var rules = this.getParentGroup(grpElem);\n var ruleElem = closest(element, '.e-rule-container');\n var index = 0;\n if (this.allowValidation) {\n this.validateValue(rules, ruleElem);\n }\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var rule = rules.rules[index];\n if (type === 'field') {\n this.selectedColumn = this.getColumn(value);\n }\n else if (rule) {\n this.selectedColumn = this.getColumn(rule.field);\n }\n var operVal;\n this.previousColumn = this.getColumn(rule.field);\n var beforeRules = this.getValidRules(this.rule);\n if (this.selectedColumn) {\n if (this.selectedColumn.operators) {\n operVal = this.selectedColumn.operators;\n }\n else {\n operVal = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n }\n var arrOper = ['in', 'notin', 'between', 'notbetween'];\n var prevOper;\n switch (type) {\n case 'field':\n rule.field = value;\n rule.label = this.selectedColumn.label;\n rule.type = this.selectedColumn.type;\n rule.value = '';\n rule.operator = operVal[0].value;\n break;\n case 'operator':\n prevOper = rule.operator;\n rule.operator = value;\n if (arrOper.indexOf(rule.operator) > -1) {\n rule.value = [];\n }\n else if (arrOper.indexOf(prevOper) > -1) {\n rule.value = '';\n }\n break;\n case 'value':\n rule.value = value;\n }\n this.changeRuleTemplate(this.selectedColumn, element);\n this.filterRules(beforeRules, this.getValidRules(this.rule), type);\n if (this.selectedColumn && this.selectedColumn.ruleTemplate) {\n if (type === 'field' || type === 'operator') {\n var grpEle = closest(element, '.e-rule-container');\n this.destroyControls(grpEle, true);\n detach(grpEle.querySelector('.e-rule-field'));\n var ruleElement = this.appendRuleElem(closest(grpEle, '.e-group-container'), this.selectedColumn, 'change', grpEle.id, type, rule);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleElement.className = 'e-rule-container e-vertical-mode';\n }\n else {\n ruleElement.className = 'e-rule-container e-horizontal-mode';\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-rule-container') > -1) {\n if (ruleElement.className.indexOf('e-joined-rule') < 0) {\n ruleElement.className += ' e-joined-rule';\n }\n if (ruleElement.previousElementSibling.className.indexOf('e-prev-joined-rule') < 0) {\n ruleElement.previousElementSibling.className += ' e-prev-joined-rule';\n }\n }\n if (ruleElement.previousElementSibling && ruleElement.previousElementSibling.className.indexOf('e-group-container') > -1 &&\n ruleElement.className.indexOf('e-separate-rule') < 0) {\n ruleElement.className += ' e-separate-rule';\n }\n var args = { requestType: 'template-create', action: type, ruleID: grpEle.id,\n fields: this.fields, rule: rule };\n eventsArgs = { groupID: grpElem.id.replace(this.element.id + '_', ''), ruleID: grpEle.id.replace(this.element.id + '_', ''),\n value: rule.field, type: 'field' };\n this.trigger('actionBegin', args);\n this.trigger('change', eventsArgs);\n }\n }\n };\n QueryBuilder.prototype.changeValue = function (i, args) {\n var _this = this;\n var element;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isNumInput && typeof args.value === 'number') {\n this.isNumInput = false;\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.element && args.element.classList.contains('e-multiselect')) {\n var multiSelectArgs = args;\n element = multiSelectArgs.element;\n }\n else if (args.event) {\n element = args.event.target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.currentTarget;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element = args.element;\n }\n if (element.className.indexOf('e-day') > -1 || element.className.indexOf('e-today') > -1 || element.className.indexOf('e-cell') > -1) {\n var calenderArgs = args;\n element = calenderArgs.element;\n }\n var groupElem = closest(element, '.e-group-container');\n var ruleElem = closest(element, '.e-rule-container');\n var groupID = groupElem && groupElem.id.replace(this.element.id + '_', '');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var dateElement = args;\n var dropDownObj;\n if (dateElement.element && dateElement.element.className.indexOf('e-datepicker') > -1) {\n element = dateElement.element;\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n if (dropDownObj) {\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n }\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n if (dropDownObj) {\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n }\n var value;\n var rbValue;\n if (element.className.indexOf('e-radio') > -1) {\n // eslint-disable-next-line\n rbValue = parseInt(element.id.split('valuekey')[1], 0);\n if (this.fieldMode === 'Default') {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n if (this.selectedColumn.columns) {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-rule-sub-filter .e-dropdownlist'), 'dropdownlist');\n this.selectedColumn = this.getColumn(dropDownObj.value);\n }\n }\n else {\n dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdowntree');\n this.selectedColumn = this.getColumn(dropDownObj.value[0]);\n }\n if (this.selectedColumn.values) {\n value = this.selectedColumn.values[rbValue];\n }\n else {\n var valColl = [true, false];\n value = valColl[rbValue];\n }\n }\n else if (element.className.indexOf('e-multiselect') > -1) {\n value = getComponent(element, 'multiselect').value;\n }\n else {\n value = args.value;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (args.type === 'input' && args.currentTarget) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value = Number(args.currentTarget.value);\n var numericTextBoxObj = getInstance(args.currentTarget, NumericTextBox);\n numericTextBoxObj.value = value;\n this.isNumInput = true;\n }\n }\n if (args.name === 'input' && this.immediateModeDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setInterval(function () { _this.filterValue(groupID, ruleID, value, i, element); }, this.immediateModeDelay);\n }\n else {\n this.filterValue(groupID, ruleID, value, i, element);\n }\n };\n QueryBuilder.prototype.filterValue = function (grID, rlID, value, i, ele) {\n var _this = this;\n var eventsArgs = { groupID: grID, ruleID: rlID, value: value, cancel: false, type: 'value' };\n window.clearInterval(this.timer);\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.changeValueSuccessCallBack(observedChangeArgs, ele, i, grID, rlID);\n });\n }\n else {\n this.changeValueSuccessCallBack(eventsArgs, ele, i, grID, rlID);\n }\n };\n QueryBuilder.prototype.changeValueSuccessCallBack = function (args, element, i, groupID, ruleID) {\n if (!args.cancel) {\n this.updateRules(element, args.value, i);\n if (!this.isImportRules) {\n this.trigger('change', { groupID: groupID, ruleID: ruleID, value: args.value, cancel: false, type: 'value' });\n }\n }\n };\n QueryBuilder.prototype.fieldClose = function (id) {\n if (this.isFieldChange || this.isDestroy) {\n return;\n }\n this.isFieldClose = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddl = getComponent(id, 'dropdownlist');\n var item = ddl.popupObj.element.querySelector('.e-active');\n var itemData = ddl.getItemData();\n ddl.value = itemData.value;\n var customArgs = { element: ddl.element, value: itemData.value, isInteracted: true,\n previousItemData: this.prevItemData, previousItem: null, item: item, itemData: itemData, event: null, e: null };\n if (ddl.previousValue !== ddl.value) {\n this.changeField(customArgs);\n }\n this.isFieldChange = false;\n };\n QueryBuilder.prototype.changeField = function (args) {\n if (args.isInteracted) {\n if (isNullOrUndefined(args.value)) {\n return;\n }\n this.isFieldChange = true;\n this.prevItemData = args.itemData;\n var fieldElem = closest(args.element, '.e-rule-filter') || closest(args.element, '.e-rule-sub-filter');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(args.value[0]) : this.getColumn(args.value);\n if (this.fieldMode === 'DropdownTree' && fieldElem !== null) {\n var ddtElem = fieldElem.querySelector('.e-dropdowntree.e-control');\n var ddt = getComponent(ddtElem, 'dropdowntree');\n if (column) {\n if (column.type === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.oldValue;\n ddt.dataBind();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (isNullOrUndefined(args.oldValue)) {\n ddtElem.value = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var result = this.getLabelFromColumn(args.oldValue[0]);\n ddtElem.value = result;\n }\n return;\n }\n else {\n if (!isNullOrUndefined(args.value[0])) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ddt.value = args.value[0];\n ddt.dataBind();\n var result = this.getLabelFromColumn(args.value[0]);\n ddtElem.value = result;\n }\n }\n }\n else {\n return;\n }\n }\n this.destroySubFields(fieldElem);\n this.subFieldElem = null;\n this.isNotValueChange = true;\n if (column && column.ruleTemplate) {\n this.templateChange(args.element, column.field, 'field');\n }\n else if (column && column.columns && column.columns[0].ruleTemplate) {\n this.templateChange(args.element, column.columns[0].field, 'field');\n }\n else {\n var groupElem = closest(args.element, '.e-group-container');\n var rules = this.getParentGroup(groupElem);\n var ruleElem = closest(args.element, '.e-rule-container');\n var index = 0;\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n rules.rules[index].value = '';\n this.changeRule(rules.rules[index], args);\n }\n }\n };\n QueryBuilder.prototype.changeRule = function (rule, ddlArgs) {\n if (!ddlArgs.itemData) {\n if (this.fieldMode === 'DropdownTree') {\n var ddt = getComponent(ddlArgs.element, 'dropdowntree');\n if (ddt.value == null) {\n return;\n }\n }\n else {\n return;\n }\n }\n var tempRule = {};\n var filterElem = closest(ddlArgs.element, '.e-rule-filter');\n filterElem = filterElem ? filterElem : closest(ddlArgs.element, '.e-rule-sub-filter');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n if (this.fieldMode === 'DropdownTree' && filterElem !== null) {\n ddlObj = getComponent(ddlArgs.element, 'dropdowntree');\n }\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n this.changeFilter(filterElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n };\n QueryBuilder.prototype.changeFilter = function (flt, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n if (flt) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ddlValue = void 0;\n if (this.fieldMode === 'DropdownTree') {\n ddlValue = (dl.value[0]);\n }\n else {\n ddlValue = this.isImportRules ? this.GetRootColumnName(dl.value) : dl.value;\n }\n this.selectedColumn = this.getColumn(ddlValue);\n var ruleElem = closest(flt, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n var eventsArgs = { groupID: grID, ruleID: ruleID, selectedField: this.fieldMode === 'DropdownTree' ?\n dl.value[0] : dl.value, cancel: false, type: 'field' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.fieldChangeSuccess(observedChangeArgs, tmpRl, flt, rl, dArg);\n });\n }\n else {\n this.fieldChangeSuccess(eventsArgs, tmpRl, flt, rl, dArg);\n }\n }\n else {\n var operatorElem = closest(dArg.element, '.e-rule-operator');\n this.changeOperator(flt, operatorElem, dl, grID, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.changeOperator = function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n flt, opr, dl, grID, rl, tmpRl, dArg) {\n var _this = this;\n var ruleElem;\n var ruleID;\n var eventsArgs;\n if (opr) {\n ruleElem = closest(opr, '.e-rule-container');\n ruleID = ruleElem.id.replace(this.element.id + '_', '');\n eventsArgs = { groupID: grID, ruleID: ruleID, selectedIndex: dl.index, cancel: false, type: 'operator' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', eventsArgs, function (observedChangeArgs) {\n _this.operatorChangeSuccess(observedChangeArgs, flt, tmpRl, rl, dArg);\n });\n }\n else {\n this.operatorChangeSuccess(eventsArgs, flt, tmpRl, rl, dArg);\n }\n }\n else {\n this.changeRuleValues(flt, rl, tmpRl, dArg);\n }\n };\n QueryBuilder.prototype.fieldChangeSuccess = function (args, tempRule, filterElem, rule, ddlArgs) {\n var ruleElem = closest(filterElem, '.e-rule-container');\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var element = closest(ddlArgs.element, '.e-group-container');\n var groupID = element.id.replace(this.element.id + '_', '');\n var ddlObj = getComponent(ddlArgs.element, 'dropdownlist');\n var tooltipElem = ruleElem.querySelectorAll('.e-tooltip.e-input-group');\n for (var i = 0; i < tooltipElem.length; i++) {\n getComponent(tooltipElem[i], 'tooltip').destroy();\n }\n if (!args.cancel) {\n if (isNullOrUndefined(this.selectedColumn)) {\n return;\n }\n tempRule.type = this.selectedColumn.type;\n if (ruleElem.querySelector('.e-template')) {\n rule.value = '';\n }\n if (this.selectedColumn.type === 'object' && this.fieldMode === 'Default') {\n tempRule.type = this.selectedColumn.columns[0].type;\n while (this.selectedColumn.columns) {\n this.createSubFields(filterElem, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.destroySubFields(filterElem);\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n }\n else {\n this.changeOperator(filterElem, operatorElem, ddlObj, groupID, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.destroySubFields = function (filterElem) {\n while (filterElem && filterElem.nextElementSibling.classList.contains('e-rule-sub-filter')) {\n this.destroyControls(filterElem);\n filterElem.nextElementSibling.remove();\n }\n };\n QueryBuilder.prototype.createSubFields = function (filterElem, rule, tempRule, ddlArgs) {\n var subFieldValue = false;\n var fieldElem = closest(filterElem, '.e-rule-field');\n var tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });\n fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));\n var ruleId = closest(tempElem, '.e-rule-container').id;\n var subFieldElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_subfilterkey' + this.subFilterCounter } });\n tempElem.appendChild(subFieldElem);\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var ddlField;\n ddlField = {\n dataSource: this.selectedColumn.columns,\n fields: this.fields,\n placeholder: this.l10n.getConstant('SelectField'),\n popupHeight: ((this.selectedColumn.columns.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: 0,\n open: this.popupOpen.bind(this, false)\n };\n if (this.fieldModel) {\n ddlField = __assign({}, ddlField, this.fieldModel);\n }\n var dropDownList = new DropDownList(ddlField);\n dropDownList.appendTo('#' + ruleId + '_subfilterkey' + this.subFilterCounter);\n if (this.isImportRules || (this.previousColumn && this.previousColumn.ruleTemplate &&\n this.GetRootColumnName(rule.field) === this.GetRootColumnName(this.previousColumn.field))) {\n var subField = this.selectedColumn.columns;\n for (var i = 0; i < subField.length; i++) {\n if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field + this.separator) > -1) {\n dropDownList.value = subField[i].field;\n this.selectedColumn = subField[i];\n subFieldValue = true;\n break;\n }\n }\n }\n this.subFilterCounter++;\n this.subFieldElem = subFieldElem;\n // eslint-disable-next-line\n ddlArgs.itemData = ddlArgs.itemData;\n if (!subFieldValue && this.selectedColumn.columns) {\n if (!subFieldValue && this.isImportRules) {\n dropDownList.value = null;\n }\n this.selectedColumn = this.selectedColumn.columns[0];\n }\n this.previousColumn = this.selectedColumn;\n if (!this.selectedColumn.columns) {\n this.changeRuleValues(tempElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.operatorChangeSuccess = function (eventsArgs, filterElem, tempRule, rule, ddlArgs) {\n if (!eventsArgs.cancel) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var valElem = operatorElem.nextElementSibling;\n var dropDownObj = getComponent(ddlArgs.element, 'dropdownlist');\n var prevOper = rule.operator ? rule.operator.toString().toLowerCase() : '';\n tempRule.operator = dropDownObj.value.toString();\n var currOper = tempRule.operator.toLowerCase();\n if (tempRule.operator.toLowerCase().indexOf('between') > -1 || (tempRule.operator.toLowerCase().indexOf('in') > -1\n && tempRule.operator.toLowerCase().indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n if (tempRule.operator.toLowerCase().indexOf('in') < 0 || prevOper.indexOf('in') < 0) {\n rule.value = [];\n }\n }\n else if (typeof rule.value === 'object' && rule.value !== null) {\n rule.value = rule.value.length > 0 ? rule.value[0] : rule.type === 'number' ? 0 : '';\n }\n if (ddlArgs.previousItemData) {\n var prevValue = ddlArgs.previousItemData.value.toString().toLowerCase();\n if ((prevValue.indexOf('between') > -1 || (prevValue.indexOf('in') > -1 || (prevValue.indexOf('null') > -1)\n || (prevValue.indexOf('empty') > -1)) && prevValue.indexOf('contains') < 0)) {\n filterElem = operatorElem.previousElementSibling;\n tempRule.type = rule.type;\n }\n }\n if ((prevOper.indexOf('in') > -1 && prevOper.indexOf('in') < 5) && (currOper.indexOf('in') > -1\n && currOper.indexOf('in') < 5)) {\n filterElem = null;\n }\n if (tempRule.operator.indexOf('null') > -1 || (tempRule.operator.indexOf('empty') > -1)) {\n var parentElem = operatorElem.parentElement.querySelector('.e-rule-value');\n var tooltipElem = parentElem.querySelector('.e-tooltip.e-input-group');\n if (tooltipElem) {\n getComponent(tooltipElem, 'tooltip').destroy();\n }\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n if (valElem && this.getColumn(rule.field).template) {\n filterElem = operatorElem.previousElementSibling;\n }\n if (valElem.children.length == 0) {\n filterElem = operatorElem.previousElementSibling;\n }\n this.changeRuleValues(filterElem, rule, tempRule, ddlArgs);\n }\n };\n QueryBuilder.prototype.changeRuleValues = function (filterElem, rule, tempRule, ddlArgs) {\n var operatorElem = closest(ddlArgs.element, '.e-rule-operator');\n var isSub;\n var ddlObj;\n var operatorList;\n var oprElem;\n if (filterElem) {\n operatorElem = filterElem.nextElementSibling;\n if (filterElem.classList.contains('e-rule-sub-filter')) {\n tempRule.type = this.selectedColumn.type;\n isSub = operatorElem.classList.contains('e-rule-sub-filter');\n operatorElem = isSub ? operatorElem.nextElementSibling : operatorElem;\n }\n addClass([operatorElem], 'e-operator');\n if (operatorElem.childElementCount) {\n ddlObj = getComponent(operatorElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n tempRule.operator = ddlObj.value;\n var fieldObj = void 0;\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdowntree'), 'dropdowntree');\n }\n else {\n fieldObj = getComponent(filterElem.querySelector('.e-dropdownlist'), 'dropdownlist');\n }\n tempRule.type = this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]).type :\n this.getColumn(fieldObj.value).type;\n var itemData = ddlArgs.itemData;\n if (ddlObj.value !== '') {\n this.renderValues(operatorElem, itemData, ddlArgs.previousItemData, true, rule, tempRule, ddlArgs.element);\n }\n }\n else {\n var ruleId = closest(operatorElem, '.e-rule-container').id;\n oprElem = this.createElement('input', { attrs: { type: 'text', id: ruleId + '_operatorkey' } });\n operatorElem.appendChild(oprElem);\n if (this.selectedColumn.operators) {\n operatorList = this.selectedColumn.operators;\n }\n else if (ddlArgs.itemData) {\n operatorList = this.customOperators[this.selectedColumn.type + 'Operator'];\n }\n var height = (this.element.className.indexOf('e-device') > -1) ? '250px' : '200px';\n var value = operatorList[0].value;\n var ddlIdx = 0;\n if (!this.autoSelectOperator) {\n value = '';\n ddlIdx = -1;\n }\n if (this.isImportRules || (this.ruleIndex > -1 || this.groupIndex > -1)) {\n value = rule ? (rule.operator ? rule.operator : value) : value;\n }\n var ddlOperator = void 0;\n ddlOperator = {\n dataSource: operatorList,\n fields: { text: 'key', value: 'value' },\n placeholder: this.l10n.getConstant('SelectOperator'),\n popupHeight: ((operatorList.length > 5) ? height : 'auto'),\n change: this.changeField.bind(this),\n index: ddlIdx,\n value: value,\n open: this.popupOpen.bind(this, false)\n };\n if (this.operatorModel) {\n ddlOperator = __assign({}, ddlOperator, this.operatorModel);\n }\n var dropDownList = new DropDownList(ddlOperator);\n dropDownList.appendTo('#' + ruleId + '_operatorkey');\n tempRule.operator = (rule && rule.operator !== '' && !isNullOrUndefined(rule.operator)) ? rule.operator : operatorList[0].value;\n if (this.isImportRules) {\n tempRule.type = this.selectedColumn.type;\n tempRule.operator = rule.operator;\n }\n if (!isNullOrUndefined(value) && value !== '') {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n else if (this.autoSelectField && this.autoSelectOperator) {\n this.renderValues(operatorElem, this.selectedColumn, ddlArgs.previousItemData, false, rule, tempRule, ddlArgs.element);\n }\n }\n }\n if (!this.isImportRules) {\n this.updateRules(ddlArgs.element, ddlArgs.item);\n }\n };\n QueryBuilder.prototype.popupOpen = function (isField, args) {\n if (this.enableRtl) {\n addClass([args.popup.element], 'e-rtl');\n }\n if (isField) {\n this.isFieldClose = false;\n }\n };\n QueryBuilder.prototype.destroyControls = function (target, isRuleTemplate) {\n var element = isRuleTemplate ? target : target.nextElementSibling;\n var inputElement = element.querySelectorAll('input.e-control');\n var divElement = element.querySelectorAll('div.e-control:not(.e-handle)');\n var columns = this.columns;\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-textbox')) {\n getComponent(inputElement[i], 'textbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-dropdownlist')) {\n if (this.allowValidation && inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(inputElement[i].parentElement, 'tooltip').destroy();\n }\n getComponent(inputElement[i], 'dropdownlist').destroy();\n }\n else if (inputElement[i].classList.contains('e-radio')) {\n getComponent(inputElement[i], 'radio').destroy();\n }\n else if (inputElement[i].classList.contains('e-numerictextbox')) {\n getComponent(inputElement[i], 'numerictextbox').destroy();\n detach(select('input#' + inputElement[i].id, element));\n }\n else if (inputElement[i].classList.contains('e-datepicker')) {\n getComponent(inputElement[i], 'datepicker').destroy();\n }\n else if (inputElement[i].classList.contains('e-multiselect')) {\n getComponent(inputElement[i], 'multiselect').destroy();\n }\n else if (inputElement[i].className.indexOf('e-template') > -1) {\n var clsName = inputElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], inputElement[i].id);\n break;\n }\n }\n }\n if (document.getElementById(inputElement[i].id)) {\n detach(inputElement[i]);\n }\n }\n for (var i = 0, len = divElement.length; i < len; i++) {\n if (divElement[i].className.indexOf('e-template') > -1) {\n var clsName = divElement[i].className;\n for (var j = 0, jLen = columns.length; j < jLen; j++) {\n if (columns[j].template && clsName.indexOf(columns[j].field) > -1) {\n this.templateDestroy(columns[j], divElement[i].id);\n break;\n }\n }\n }\n detach(divElement[i]);\n }\n var templateElement = element.querySelectorAll('.e-template:not(.e-control)');\n for (var i = 0, len = templateElement.length; i < len; i++) {\n detach(templateElement[i]);\n }\n };\n QueryBuilder.prototype.templateDestroy = function (column, elemId) {\n var template;\n if (typeof column.template !== 'string' || column.template.destroy === undefined) {\n template = column.template;\n }\n else {\n return;\n }\n var temp = template.destroy;\n if (template.destroy) {\n var templateElements = void 0;\n if (document.getElementById(elemId)) {\n templateElements = closest(document.getElementById(elemId), '.e-rule-field').querySelectorAll('.e-template');\n }\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ field: column.field, elementId: elemId, elements: templateElements });\n }\n else {\n template.destroy({ field: column.field, elementId: elemId, elements: templateElements });\n }\n }\n };\n /**\n * Return values bound to the column.\n *\n * @param {string} field - 'field' to be passed to get the field values.\n * @returns {object[]} - Values bound to the column\n */\n QueryBuilder.prototype.getValues = function (field) {\n var original = {};\n var result = [];\n var value;\n var fieldColl = [];\n if (this.separator.length > 0) {\n fieldColl = field.split(this.separator);\n }\n var dataSource = this.dataColl;\n if (this.dataColl[1]) {\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n var data = {};\n if (fieldColl.length > 1) {\n var dataObj = dataSource[i];\n var fieldStr = void 0;\n for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {\n fieldStr = fieldColl[j];\n if (fieldColl.length === (j + 1)) {\n value = dataObj[\"\" + fieldStr];\n if (Number(dataObj[\"\" + fieldStr]) === dataObj[\"\" + fieldStr] && dataObj[\"\" + fieldStr] % 1 !== 0) {\n value = dataObj[\"\" + fieldStr].toString();\n }\n }\n else {\n dataObj = dataObj[\"\" + fieldStr];\n }\n }\n }\n else {\n value = dataSource[i][\"\" + field];\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n }\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (fieldColl.length > 1) {\n this.createNestedObject(data, fieldColl, value);\n }\n else {\n data[\"\" + field] = value;\n }\n result.push(data);\n }\n }\n }\n return result;\n };\n QueryBuilder.prototype.createNestedObject = function (obj, fieldColl, value) {\n var key;\n var lastIndex = fieldColl.length - 1;\n for (var k = 0; k < lastIndex; ++k) {\n key = fieldColl[k];\n if (!(key in obj)) {\n obj[\"\" + key] = {};\n }\n obj = obj[\"\" + key];\n }\n obj[fieldColl[lastIndex]] = value;\n };\n QueryBuilder.prototype.getDistinctValues = function (dataSource, field) {\n var original = {};\n var result = [];\n var nest = [];\n var value = '';\n var isNested = field.indexOf(this.separator);\n var _loop_2 = function (i, iLen) {\n if (isNested === 0) {\n value = dataSource[i][\"\" + field];\n }\n else {\n nest = field.split(this_2.separator);\n // eslint-disable-next-line @typescript-eslint/tslint/config\n nest.forEach(function (element) {\n if (value) {\n value = value[\"\" + element];\n }\n else {\n value = dataSource[i][\"\" + element];\n }\n });\n }\n if (Number(dataSource[i][\"\" + field]) === dataSource[i][\"\" + field] && dataSource[i][\"\" + field] % 1 !== 0) {\n value = dataSource[i][\"\" + field].toString();\n }\n var data = {};\n if (!(value in original)) {\n original[\"\" + value] = 1;\n if (isNested === 0) {\n data[\"\" + field] = value;\n }\n else {\n data[nest[nest.length - 1]] = value;\n }\n result.push(data);\n }\n };\n var this_2 = this;\n for (var i = 0, iLen = dataSource.length; i < iLen; i++) {\n _loop_2(i, iLen);\n }\n return result;\n };\n QueryBuilder.prototype.renderMultiSelect = function (rule, parentId, i, selectedValue, values) {\n var isFetched = false;\n var ds;\n var isValues = false;\n this.isGetNestedData = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(rule.field) > -1) {\n isFetched = true;\n ds = this.getDistinctValues(this.dataColl, rule.field);\n }\n }\n isFetched = rule.columns ? false : isFetched;\n if (!this.dataColl.length && values.length) {\n isValues = true;\n }\n var multiSelectValue;\n multiSelectValue = {\n dataSource: isValues ? values : (isFetched ? ds : this.dataManager),\n query: new Query([rule.field]),\n fields: { text: this.selectedRule.field, value: this.selectedRule.field },\n placeholder: this.l10n.getConstant('SelectValue'),\n value: selectedValue,\n mode: 'CheckBox',\n width: '100%',\n change: this.changeValue.bind(this, i),\n close: this.closePopup.bind(this, i),\n actionBegin: this.multiSelectOpen.bind(this, parentId + '_valuekey' + i),\n open: this.popupOpen.bind(this, false)\n };\n if (this.valueModel && this.valueModel.multiSelectModel) {\n multiSelectValue = __assign({}, multiSelectValue, this.valueModel.multiSelectModel);\n }\n var multiSelectObj = new MultiSelect(multiSelectValue);\n multiSelectObj.appendTo('#' + parentId + '_valuekey' + i);\n this.updateRules(multiSelectObj.element, selectedValue, 0);\n };\n QueryBuilder.prototype.multiSelectOpen = function (parentId, args) {\n if (this.dataSource instanceof DataManager) {\n var element = document.getElementById(parentId);\n var dropDownObj = getComponent(closest(element, '.e-rule-container').querySelector('.e-filter-input'), 'dropdownlist');\n this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);\n var value = this.selectedColumn.field;\n var isFetched = false;\n if (this.dataColl[1]) {\n if (Object.keys(this.dataColl[1]).indexOf(value) > -1) {\n isFetched = true;\n }\n var isNest = value.indexOf(this.separator);\n if (isNest !== 0 && this.isGetNestedData) {\n isFetched = true;\n }\n }\n if (!isFetched) {\n args.cancel = true;\n this.bindMultiSelectData(element, value);\n }\n }\n };\n QueryBuilder.prototype.bindMultiSelectData = function (element, value) {\n this.getMultiSelectData(element, value);\n };\n QueryBuilder.prototype.getMultiSelectData = function (element, value) {\n var _this = this;\n var dummyData;\n var deferred = new Deferred();\n var data = this.dataManager.executeQuery(new Query().select(value));\n var multiselectObj = getComponent(element, 'multiselect');\n multiselectObj.hideSpinner();\n this.createSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n showSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n dummyData = e.actual.result;\n }\n else {\n dummyData = e.result;\n }\n _this.dataColl = extend(_this.dataColl, dummyData, [], true);\n multiselectObj.dataSource = _this.getDistinctValues(_this.dataColl, value);\n _this.isGetNestedData = true;\n hideSpinner(closest(element, '.e-multi-select-wrapper').parentElement);\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.createSpinner = function (element) {\n var spinnerElem = this.createElement('span', { attrs: { class: 'e-qb-spinner' } });\n element.appendChild(spinnerElem);\n createSpinner({ target: spinnerElem, width: Browser.isDevice ? '16px' : '14px' });\n };\n QueryBuilder.prototype.closePopup = function (i, args) {\n var element = document.getElementById(args.popup.element.id.replace('_popup', ''));\n if (element) {\n var value = getComponent(element, 'multiselect').value;\n this.updateRules(element, value, i);\n }\n };\n QueryBuilder.prototype.processTemplate = function (target, itemData, rule, tempRule) {\n var container = closest(target, '.e-rule-container');\n var tempElements = container.querySelectorAll('.e-template');\n var filterElem = container.querySelector('.e-rule-filter .e-filter-input');\n var ddlObj = this.fieldMode === 'DropdownTree' ? getComponent(filterElem, 'dropdowntree')\n : getComponent(container.querySelector('.e-rule-filter .e-filter-input'), 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(ddlObj.value[0]) : this.getColumn(ddlObj.value);\n if (typeof itemData.template === 'string' || itemData.template.write === undefined) {\n var args = { rule: rule, ruleID: container.id, operator: tempRule.operator, field: column.field,\n requestType: 'value-template-create' };\n this.trigger('actionBegin', args);\n }\n else {\n var template = itemData.template;\n if (typeof template.write === 'string') {\n getValue(template.write, window)({ elements: tempElements.length > 1 ? tempElements : tempElements[0], values: rule.value,\n operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n else if (typeof itemData.template !== 'function') {\n itemData.template.write({ elements: tempElements.length > 1 ? tempElements : tempElements[0],\n values: rule.value, operator: tempRule.operator, field: column.field, dataSource: column.values });\n }\n }\n };\n QueryBuilder.prototype.getItemData = function (parentId) {\n var fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdownlist');\n if (this.fieldMode === 'DropdownTree') {\n fieldObj = getComponent(document.getElementById(parentId + '_filterkey'), 'dropdowntree');\n }\n return this.fieldMode === 'DropdownTree' ? this.getColumn(fieldObj.value[0]) : this.getColumn(fieldObj.value);\n };\n QueryBuilder.prototype.setDefaultValue = function (parentId, isArryValue, isNumber) {\n var itemData = this.getItemData(parentId);\n if (isNullOrUndefined(itemData.value)) {\n return isNumber ? isArryValue ? [0, 0] : 0 : isArryValue ? [] : '';\n }\n if (isArryValue) {\n if (!(itemData.value instanceof Array)) {\n return [itemData.value];\n }\n }\n else {\n if (itemData.value instanceof Array) {\n return itemData.value[0];\n }\n }\n return itemData.value;\n };\n QueryBuilder.prototype.renderStringValue = function (parentId, rule, operator, idx, ruleValElem) {\n var selectedVal;\n var columnData = this.getItemData(parentId);\n var selectedValue;\n var isTemplate = (typeof columnData.template === 'string');\n if (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || rule.value != '') {\n selectedValue = rule.value;\n }\n else {\n selectedValue = this.setDefaultValue(parentId, false, false);\n }\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.displayMode === 'Vertical' || this.element.className.indexOf('e-device') > -1) {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.width = null;\n ruleValElem.style.minWidth = '200px';\n }\n }\n else {\n if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n selectedValue = selectedVal.join(',');\n }\n var txtBox = void 0;\n txtBox = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtBox = __assign({}, txtBox, this.valueModel.textBoxModel);\n }\n var inputobj = new TextBox(txtBox);\n inputobj.appendTo('#' + parentId + '_valuekey' + idx);\n inputobj.value = selectedValue;\n inputobj.dataBind();\n }\n };\n QueryBuilder.prototype.renderNumberValue = function (parentId, rule, operator, idx, ruleValElem, itemData, length) {\n var columnData = this.getItemData(parentId);\n var isTemplate = (typeof columnData.template === 'string');\n var selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1 || this.isPublic || isTemplate || typeof rule.value === 'number') ? rule.value : this.setDefaultValue(parentId, false, true);\n if ((operator === 'in' || operator === 'notin') && (this.dataColl.length || columnData.values)) {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n this.renderMultiSelect(columnData, parentId, idx, selectedVal, columnData.values);\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n ruleValElem.style.minWidth = '200px';\n ruleValElem.style.width = null;\n }\n }\n else if (operator === 'in' || operator === 'notin') {\n selectedVal = (this.isImportRules || this.ruleIndex > -1 || this.groupIndex > -1) ? rule.value : this.setDefaultValue(parentId, true, false);\n var selVal = selectedVal.join(',');\n var txtInp = void 0;\n txtInp = {\n placeholder: this.l10n.getConstant('SelectValue'),\n input: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.textBoxModel) {\n txtInp = __assign({}, txtInp, this.valueModel.textBoxModel);\n }\n var input = new TextBox(txtInp);\n input.appendTo('#' + parentId + '_valuekey' + idx);\n input.value = selVal;\n input.dataBind();\n }\n else {\n itemData = columnData;\n var min = (itemData.validation && itemData.validation.min) ? itemData.validation.min : 0;\n var max = (itemData.validation && itemData.validation.max) ? itemData.validation.max : Number.MAX_VALUE;\n var format = itemData.format ? itemData.format : 'n';\n if (length > 1 && rule) {\n selectedVal = rule.value[idx] ? rule.value[idx] : this.setDefaultValue(parentId, true, true);\n }\n var numericTxt = void 0;\n numericTxt = {\n value: (selectedVal instanceof Array) ? selectedVal[idx] : selectedVal,\n format: format, min: min, max: max, width: '100%',\n step: itemData.step ? itemData.step : 1,\n change: this.changeValue.bind(this, idx)\n };\n if (this.valueModel && this.valueModel.numericTextBoxModel) {\n numericTxt = __assign({}, numericTxt, this.valueModel.numericTextBoxModel);\n }\n var numeric = new NumericTextBox(numericTxt);\n numeric.appendTo('#' + parentId + '_valuekey' + idx);\n numeric.element.setAttribute('aria-label', itemData.label + ' ' + 'Value');\n numeric.element.oninput = this.changeValue.bind(this, idx);\n }\n };\n QueryBuilder.prototype.processValueString = function (value, type) {\n var numArr = [];\n var strArr = value.split(',');\n if (type === 'string') {\n return strArr;\n }\n else {\n for (var k = 0, kLen = strArr.length; k < kLen; k++) {\n numArr.push(Number(strArr[k]));\n }\n return numArr;\n }\n };\n QueryBuilder.prototype.parseDate = function (value, format) {\n var formatOpt;\n var selectedValue;\n if (format) {\n var dParser = this.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n formatOpt = this.getFormat(format);\n selectedValue = dParser(value);\n if (isNullOrUndefined(selectedValue)) {\n selectedValue = this.intl.parseDate(value, formatOpt);\n }\n }\n else {\n selectedValue = new Date(value);\n }\n return selectedValue;\n };\n QueryBuilder.prototype.renderControls = function (target, itemData, rule, tempRule, isRendered) {\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-value');\n removeClass([target.parentElement.querySelector('.e-rule-value')], 'e-hide');\n addClass([target.parentElement.querySelector('.e-rule-value')], 'e-show');\n if (itemData.template && (itemData.template.create || isRendered)) {\n this.processTemplate(target, itemData, rule, tempRule);\n }\n else {\n var length_1;\n if (tempRule.type === 'boolean') {\n length_1 = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n length_1 = tempRule.operator && tempRule.operator.toString().toLowerCase().indexOf('between') > -1 ? 2 : 1;\n }\n var parentId = closest(target, '.e-rule-container').id;\n var ruleValElem = void 0;\n var operator = tempRule.operator.toString();\n if (target.className.indexOf('e-rule-operator') > -1 || target.className.indexOf('e-rule-filter') > -1) {\n ruleValElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n ruleValElem.style.width = '100%';\n }\n else {\n if (operator !== 'in' && operator !== 'notin') {\n addClass([ruleValElem], 'e-custom-value');\n }\n else {\n removeClass([ruleValElem], 'e-custom-value');\n }\n }\n for (var i = 0; i < length_1; i++) {\n switch (tempRule.type) {\n case 'string':\n {\n this.renderStringValue(parentId, rule, operator, i, ruleValElem);\n }\n break;\n case 'number':\n {\n this.renderNumberValue(parentId, rule, operator, i, ruleValElem, itemData, length_1);\n }\n break;\n case 'boolean':\n this.processBoolValues(itemData, rule, parentId, i);\n break;\n case 'date':\n {\n var selectedValue = new Date();\n var selVal = void 0;\n var column = void 0;\n var format = itemData.format;\n var datepick = void 0;\n var datePicker = void 0;\n var place = this.l10n.getConstant('SelectValue');\n var isTemplate = (typeof itemData.template === 'string');\n if (rule.value && !isNullOrUndefined(format)) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, format) || new Date();\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!itemData.field && !itemData.key && itemData.value) {\n if (itemData.value instanceof Date) {\n selectedValue = itemData.value;\n }\n else {\n selectedValue = this.parseDate(itemData.value, itemData.format);\n }\n }\n if (!itemData.format && rule && rule.field !== '') {\n column = this.getColumn(rule.field);\n format = column.format;\n }\n if ((this.isImportRules || this.isPublic || isTemplate) && rule) {\n column = this.getColumn(rule.field);\n format = column.format;\n if (rule.value) {\n selVal = (length_1 > 1) ? rule.value[i] : rule.value;\n selectedValue = this.parseDate(selVal, column.format);\n }\n else {\n selectedValue = rule.value;\n }\n }\n if (format) {\n var formatObj = this.getFormat(format);\n if (formatObj.skeleton) {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, format: formatObj, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n else {\n datePicker = {\n value: selectedValue, locale: this.getLocale(), placeholder: place,\n format: formatObj.format, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n }\n else {\n datePicker = {\n locale: this.getLocale(), value: selectedValue,\n placeholder: place, change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.datePickerModel) {\n datePicker = __assign({}, datePicker, this.valueModel.datePickerModel);\n }\n datepick = new DatePicker(datePicker);\n }\n datepick.appendTo('#' + parentId + '_valuekey' + i);\n if (!rule.value) {\n var elem = document.getElementById(parentId + '_valuekey' + i);\n this.updateRules(elem, selectedValue, null, this.isNotValueChange);\n this.isNotValueChange = false;\n }\n }\n break;\n }\n }\n }\n }\n };\n QueryBuilder.prototype.processBoolValues = function (itemData, rule, parentId, i) {\n var isCheck = false;\n var value;\n var orgValue;\n if (isNullOrUndefined(rule.type) && itemData) {\n rule.type = itemData.type;\n }\n var label;\n if (itemData.values) {\n var values = itemData.values;\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n isCheck = true;\n }\n orgValue = value = label = values[i];\n }\n else {\n var values = [true, false];\n if (rule.type === 'boolean' && !isNullOrUndefined(rule.value)) {\n isCheck = values[i].toString().toLowerCase() === rule.value.toString().toLowerCase();\n }\n else if (itemData.value) {\n isCheck = values[i].toString().toLowerCase() === itemData.value.toString().toLowerCase();\n }\n else if (i === 0) {\n if (typeof rule.value === 'boolean') {\n isCheck = rule.value ? true : false;\n }\n else {\n isCheck = true;\n }\n }\n if (typeof rule.value === 'boolean' && i === 1) {\n isCheck = !rule.value ? true : false;\n }\n value = values[i].toString();\n orgValue = values[i];\n label = this.l10n.getConstant(['True', 'False'][i]);\n }\n var radioBtn;\n radioBtn = {\n label: label, name: parentId + 'default', checked: isCheck, value: value,\n change: this.changeValue.bind(this, i)\n };\n if (this.valueModel && this.valueModel.radioButtonModel) {\n radioBtn = __assign({}, radioBtn, this.valueModel.radioButtonModel);\n }\n var radiobutton = new RadioButton(radioBtn);\n radiobutton.appendTo('#' + parentId + '_valuekey' + i);\n if (isCheck) {\n this.updateRules(radiobutton.element, orgValue, 0, true);\n }\n };\n QueryBuilder.prototype.getOperatorIndex = function (ddlObj, rule) {\n var i;\n var dataSource = ddlObj.dataSource;\n var len = dataSource.length;\n for (i = 0; i < len; i++) {\n if (rule.operator === ddlObj.dataSource[i].value) {\n return i;\n }\n }\n return 0;\n };\n QueryBuilder.prototype.getPreviousItemData = function (prevItemData, column) {\n if (this.isFieldClose && prevItemData) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n prevItemData = this.getColumn(prevItemData.value);\n }\n if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {\n prevItemData.template = column.template;\n }\n return prevItemData;\n };\n QueryBuilder.prototype.renderValues = function (target, itemData, prevItemData, isRender, rule, tempRule, element) {\n var subFldElem = target.previousElementSibling;\n var filtElem = subFldElem.getElementsByTagName('input')[0];\n var filtObj = this.fieldMode === 'DropdownTree' ? getComponent(filtElem, 'dropdowntree')\n : getComponent(filtElem, 'dropdownlist');\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(filtObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(filtObj.value);\n this.selectedRule = column;\n var ddlObj = getComponent(target.querySelector('input'), 'dropdownlist');\n if (isRender) {\n itemData = element.id.indexOf('operator') > -1 ? itemData : this.selectedRule;\n if (itemData.operators) {\n ddlObj.value = null;\n ddlObj.dataBind();\n ddlObj.dataSource = itemData.operators;\n ddlObj.index = this.getOperatorIndex(ddlObj, rule);\n ddlObj.value = tempRule.operator = ddlObj.dataSource[ddlObj.index].value;\n if (!this.autoSelectOperator) {\n ddlObj.index = -1;\n tempRule.operator = ddlObj.value = '';\n }\n else {\n ddlObj.dataBind();\n }\n }\n }\n var operator = tempRule.operator.toString();\n var isTempRendered = false;\n if (!(operator.indexOf('null') > -1 || operator.indexOf('isempty') > -1 || operator.indexOf('isnotempty') > -1)) {\n var parentId = closest(target, '.e-rule-container').id;\n prevItemData = this.getPreviousItemData(prevItemData, column);\n if (prevItemData && prevItemData.template === undefined) {\n if (prevItemData.columns) {\n prevItemData = this.getColumn(rule.field);\n }\n }\n else if (this.fieldMode === 'DropdownTree' && prevItemData === undefined) {\n prevItemData = this.getColumn(rule.field);\n }\n if (prevItemData && prevItemData.template) {\n this.templateDestroy(prevItemData, parentId + '_valuekey0');\n var elem = select('#' + parentId + '_valuekey0', target.nextElementSibling);\n if (elem && !elem.classList.contains('e-control')) {\n detach(select('#' + parentId + '_valuekey0', target.nextElementSibling));\n }\n if (typeof prevItemData.template === 'string' || prevItemData.template.create === undefined) {\n if (target.nextElementSibling.classList.contains('e-template-value')) {\n this.clearQBTemplate([parentId]);\n }\n target.nextElementSibling.innerHTML = '';\n }\n }\n if (isRender) {\n this.validateValue(rule, closest(target, '.e-rule-container'));\n this.destroyControls(target);\n }\n if (this.isImportRules || (ddlObj && ddlObj.value !== '')) {\n if (column) {\n itemData.template = column.template;\n }\n if (itemData.template) {\n addClass([target.nextElementSibling], 'e-template-value');\n itemData.template = column.template;\n isTempRendered = this.setColumnTemplate(itemData, parentId, column.field, itemData.value ||\n operator, target, rule);\n }\n if (isTempRendered) {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (this.element.className.indexOf('e-device') > -1 || this.displayMode === 'Vertical') {\n parentElem.style.width = '100%';\n }\n else {\n parentElem.style.width = '200px';\n }\n }\n else {\n removeClass([target.nextElementSibling], 'e-template-value');\n var inputLen = 1;\n if (tempRule.type === 'boolean') {\n inputLen = this.selectedColumn.values ? this.selectedColumn.values.length : 2;\n }\n else {\n inputLen = (operator && operator.toLowerCase().indexOf('between') > -1) ? 2 : 1;\n }\n for (var i = 0; i < inputLen; i++) {\n var valElem = this.createElement('input', { attrs: { type: 'text', id: parentId + '_valuekey' + i } });\n target.nextElementSibling.appendChild(valElem);\n }\n }\n this.renderControls(target, itemData, rule, tempRule, isTempRendered);\n }\n }\n else {\n var parentElem = target.parentElement.querySelector('.e-rule-value');\n if (parentElem) {\n removeClass([parentElem], 'e-show');\n addClass([parentElem], 'e-hide');\n }\n }\n };\n QueryBuilder.prototype.setColumnTemplate = function (itemData, ruleID, field, operator, target, rule) {\n var _this = this;\n var args;\n var isRendered = true;\n if (!itemData.template) {\n return true;\n }\n else {\n if (typeof itemData.template === 'string' || itemData.template.create === undefined) {\n args = { requestType: 'value-template-initialize', ruleID: ruleID, field: field, operator: operator, rule: rule,\n renderTemplate: true };\n this.trigger('actionBegin', args, function (observedActionArgs) {\n isRendered = _this.actionBeginSuccessCallBack(observedActionArgs, itemData, ruleID, field, target);\n });\n return isRendered;\n }\n else {\n var valElem = void 0;\n var template = itemData.template;\n if (typeof template.create === 'string') {\n valElem = getValue(template.create, window)({ field: field, operator: operator });\n }\n else {\n valElem = template.create({ field: field, operator: operator });\n }\n if (valElem instanceof Element) {\n valElem.id = ruleID + '_valuekey0';\n addClass([valElem], 'e-template');\n target.nextElementSibling.appendChild(valElem);\n if (field.indexOf(' ') < 0) {\n addClass([valElem], 'e-' + field);\n }\n }\n else if (valElem instanceof Array) {\n addClass(valElem, 'e-template');\n for (var i = 0, iLen = valElem.length; i < iLen; i++) {\n valElem[i].id = ruleID + '_valuekey' + i;\n target.nextElementSibling.appendChild(valElem[i]);\n }\n }\n addClass([target.nextElementSibling], 'e-template-value');\n return true;\n }\n }\n };\n QueryBuilder.prototype.actionBeginSuccessCallBack = function (args, itemData, ruleID, field, target) {\n if (args.renderTemplate) {\n var valElem = void 0;\n this.columnTemplateFn = this.templateParser(typeof itemData.template === 'function' ? itemData.template : itemData.template);\n var templateID = this.element.id + field;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n valElem = this.columnTemplateFn(args, this, ruleID, templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isAngular) {\n var valElemColl = this.columnTemplateFn(args, this, ruleID, templateID);\n valElem = (valElemColl[0].nodeType === 3) ? valElemColl[1] : valElemColl[0];\n target.nextElementSibling.appendChild(valElem);\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if (this.isVue3) {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n append(valElem, target.nextElementSibling);\n }\n else {\n valElem = this.columnTemplateFn(args, this, 'Template', templateID)[0];\n target.nextElementSibling.appendChild(valElem);\n }\n addClass([target.nextElementSibling], 'e-template-value');\n this.renderReactTemplates();\n return true;\n }\n else {\n return false;\n }\n };\n QueryBuilder.prototype.updateValues = function (element, rule) {\n var idx = 1;\n if (element.className.indexOf('e-template') > -1) {\n idx = 3;\n }\n var controlName = element.className.split(' e-')[idx];\n var i = parseInt(element.id.slice(-1), 2);\n switch (controlName) {\n case 'checkbox':\n // eslint-disable-next-line\n var value = getComponent(element, controlName).value;\n rule.value = (value !== '') ? value : undefined;\n break;\n case 'textbox':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'dropdownlist':\n rule.value = getComponent(element, controlName).value;\n break;\n case 'radio':\n // eslint-disable-next-line\n var radioBtnObj = getComponent(element, controlName);\n if (radioBtnObj.checked) {\n if (typeof rule.value === 'boolean') {\n rule.value = radioBtnObj.value === 'true';\n }\n else {\n if (this.getColumn(rule.field).values) {\n rule.value = radioBtnObj.value;\n }\n else {\n rule.value = radioBtnObj.value === 'true';\n }\n }\n }\n radioBtnObj.refresh();\n break;\n case 'numerictextbox':\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = getComponent(element, controlName).value;\n }\n else {\n rule.value = getComponent(element, controlName).value;\n }\n break;\n case 'datepicker':\n // eslint-disable-next-line\n var column = this.getColumn(rule.field);\n // eslint-disable-next-line\n var format = this.getFormat(column.format);\n // eslint-disable-next-line\n var selectedDate = getComponent(element, controlName).value;\n if (rule.operator.indexOf('between') > -1) {\n if (typeof rule.value === 'string') {\n rule.value = [];\n }\n rule.value[i] = this.intl.formatDate(selectedDate, format);\n }\n else if (isNullOrUndefined(format.format) && selectedDate) {\n rule.value = this.intl.formatDate(selectedDate);\n }\n else if (selectedDate) {\n rule.value = this.intl.formatDate(selectedDate, format);\n }\n else {\n rule.value = selectedDate;\n }\n break;\n case 'multiselect':\n rule.value = getComponent(element, controlName).value;\n break;\n }\n };\n QueryBuilder.prototype.updateRules = function (target, selectedValue, i, isNotTrigger) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var index = 0;\n var dropDownObj;\n var eventsArgs;\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var beforeRules = this.getValidRules(this.rule);\n while (ruleElem && ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var operator = rule.rules[index].operator ? rule.rules[index].operator.toString() : '';\n ruleElem = closest(target, '.e-rule-container');\n var ruleID = ruleElem.id.replace(this.element.id + '_', '');\n if (closest(target, '.e-rule-filter') || closest(target, '.e-rule-sub-filter')) {\n if (this.subFieldElem) {\n target = this.subFieldElem;\n }\n dropDownObj = this.fieldMode === 'DropdownTree' ? getComponent(target, 'dropdowntree') :\n getComponent(target, 'dropdownlist');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n : this.getColumn(dropDownObj.value);\n if (!this.isImportRules && rule.rules[index].field &&\n rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {\n if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)\n || (operator.indexOf('empty') > -1)) {\n rule.rules[index].value = '';\n }\n }\n this.selectedColumn = this.getColumn(this.selectedColumn.field);\n rule.rules[index].field = this.selectedColumn.field;\n rule.rules[index].type = this.selectedColumn.type;\n rule.rules[index].label = this.selectedColumn.label;\n var ruleElement = closest(target, '.e-rule-filter');\n ruleElement = ruleElement ? ruleElement : closest(target, '.e-rule-sub-filter');\n var element = ruleElement.nextElementSibling.querySelector('input.e-control');\n element = element ? element : ruleElement.nextElementSibling.nextElementSibling.querySelector('input.e-control');\n operator = getComponent(element, 'dropdownlist').value.toString();\n rule.rules[index].operator = operator;\n // Value Fields\n var valueContainer = ruleElement.nextElementSibling.nextElementSibling;\n var elementCln = valueContainer.querySelectorAll('input.e-control');\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('div.e-control');\n }\n if (elementCln.length < 1) {\n elementCln = valueContainer.querySelectorAll('.e-template');\n }\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: rule.rules[index].field, type: 'field' };\n for (var i_1 = 0; i_1 < elementCln.length; i_1++) {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n this.updateValues(elementCln[i_1], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n if (this.allowValidation && rule.rules[index].field && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');\n }\n else if (closest(target, '.e-rule-operator')) {\n dropDownObj = getComponent(target, 'dropdownlist');\n rule.rules[index].operator = dropDownObj.value.toString();\n var inputElem = ruleElem.querySelectorAll('.e-rule-value input.e-control');\n eventsArgs = { groupID: groupID, ruleID: ruleID, value: dropDownObj.value, type: 'operator' };\n if (this.allowValidation && rule.rules[index].operator && target.parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(target.parentElement, 'tooltip').destroy();\n }\n if (inputElem.length > 1 && !(inputElem[0].className.indexOf('e-template') > -1)) {\n rule.rules[index].value = [];\n }\n for (var i_2 = 0; i_2 < inputElem.length; i_2++) {\n if (rule.rules[index].operator.indexOf('null') > -1 || rule.rules[index].operator.indexOf('empty') > -1) {\n rule.rules[index].value = null;\n continue;\n }\n else if (inputElem[i_2].classList.contains('e-template')) {\n continue;\n }\n this.updateValues(inputElem[i_2], rule.rules[index]);\n }\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'operator');\n }\n else if (closest(target, '.e-rule-value')) {\n this.ruleValueUpdate(target, selectedValue, rule, index, groupElem, ruleElem, i);\n if (!isNotTrigger) {\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'value');\n }\n }\n };\n QueryBuilder.prototype.filterRules = function (beforeRule, afterRule, type) {\n var beforeRuleStr = JSON.stringify({ condition: beforeRule.condition, not: beforeRule.not, rule: beforeRule.rules });\n var afetrRuleStr = JSON.stringify({ condition: afterRule.condition, not: afterRule.not, rule: afterRule.rules });\n if (beforeRuleStr !== afetrRuleStr) {\n if (!this.isImportRules) {\n this.trigger('ruleChange', { previousRule: beforeRule, rule: afterRule, type: type });\n }\n }\n };\n QueryBuilder.prototype.ruleValueUpdate = function (target, selectedValue, rule, index, groupElem, ruleElem, i) {\n var eventsArgs;\n var oper;\n var arrOperator = ['in', 'between', 'notin', 'notbetween'];\n if (rule.rules[index].operator) {\n oper = rule.rules[index].operator.toString().toLowerCase();\n }\n if (selectedValue !== null) {\n if (target.className.indexOf('e-multiselect') > -1 && rule.rules[index].type === 'number' &&\n !this.isNotified) {\n var selVal = [];\n var dupSelectedValue = selectedValue;\n for (var k = 0, kLen = dupSelectedValue.length; k < kLen; k++) {\n if (typeof dupSelectedValue[k] === 'string') {\n selVal.push(parseFloat(dupSelectedValue[k]));\n }\n }\n if (selVal.length) {\n selectedValue = selVal;\n }\n }\n if (this.isNotified) {\n rule.rules[index].value = selectedValue;\n eventsArgs = { groupID: groupElem.id, ruleID: ruleElem.id, value: rule.rules[index].value, type: 'value' };\n if (!this.isImportRules) {\n this.trigger('change', eventsArgs);\n }\n }\n else if (target.className.indexOf('e-spin') > -1 || target.className.indexOf('e-numeric') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-radio') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-multiselect') > -1) {\n rule.rules[index].value = selectedValue;\n }\n else if (target.className.indexOf('e-textbox') > -1) {\n if (oper === 'in' || oper === 'notin') {\n if (rule.rules[index].type === 'string') {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n else {\n rule.rules[index].value = this.processValueString(selectedValue, rule.rules[index].type);\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else if (target.className.indexOf('e-datepicker') > -1) {\n var format = this.getFormat(this.getColumn(this.selectedColumn.field).format);\n if (format.type) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = this.intl.formatDate(selectedValue, format);\n }\n else {\n rule.rules[index].value = this.intl.formatDate(selectedValue, format);\n }\n }\n }\n this.validateValue(rule, ruleElem, index);\n }\n else {\n if (target.className.indexOf('e-datepicker') > -1) {\n if (arrOperator.indexOf(oper) > -1) {\n if (typeof rule.rules[index].value === 'string') {\n rule.rules[index].value = [];\n }\n rule.rules[index].value[i] = selectedValue;\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n else {\n rule.rules[index].value = selectedValue;\n }\n }\n };\n QueryBuilder.prototype.validateValue = function (rule, ruleElem, index) {\n if (!isNullOrUndefined(index)) {\n rule = rule.rules[index];\n }\n var isObject = typeof (rule.value) === 'object';\n if (this.allowValidation && (isNullOrUndefined(index) || (isObject ? rule.value.length > 0 : rule.value))) {\n var valElem = ruleElem.querySelectorAll('.e-rule-value .e-control');\n if (valElem.length > 0) {\n if (valElem[0].className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0], 'tooltip').destroy();\n }\n else if (valElem[0].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[0].parentElement, 'tooltip').destroy();\n }\n if (valElem[1] && valElem[1].parentElement.className.indexOf('e-tooltip') > -1) {\n getComponent(valElem[1].parentElement, 'tooltip').destroy();\n }\n }\n }\n };\n QueryBuilder.prototype.getFormat = function (format) {\n var formatOptions;\n if (format) {\n if (typeof (format) === 'string') {\n formatOptions = { type: 'dateTime' };\n if (format === 'short' || format === 'yMd') {\n formatOptions.type = 'date';\n formatOptions.skeleton = format;\n }\n else {\n formatOptions.format = format;\n }\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: format.skeleton };\n }\n }\n else {\n formatOptions = { type: 'date', skeleton: 'yMd' };\n }\n return formatOptions;\n };\n QueryBuilder.prototype.findGroupByIdx = function (groupIdx, rule, isRoot) {\n var ruleColl = rule.rules;\n var dupRuleColl = [];\n if (!isRoot) {\n for (var j = 0, jLen = ruleColl.length; j < jLen; j++) {\n rule = ruleColl[j];\n if (rule.rules) {\n dupRuleColl.push(rule);\n }\n }\n return dupRuleColl[groupIdx];\n }\n return rule;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n QueryBuilder.prototype.destroy = function () {\n this.isDestroy = true;\n var queryElement = this.element;\n if (!queryElement) {\n return;\n }\n var element;\n var i;\n var len;\n var tooltip;\n _super.prototype.destroy.call(this);\n var popupElement;\n element = this.element.querySelectorAll('.e-addrulegroup');\n len = element.length;\n for (i = 0; i < len; i++) {\n getComponent(element[i], 'dropdown-btn').destroy();\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-filter .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-filter .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n }\n else {\n getComponent(element[i], 'dropdowntree').destroy();\n }\n detach(element[i]);\n }\n tooltip = this.element.querySelectorAll('.e-rule-operator .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n element = this.element.querySelectorAll('.e-rule-operator .e-control:not(.e-tooltip)');\n len = element.length;\n for (i = 0; i < len; i++) {\n if (getComponent(element[i], 'dropdownlist')) {\n getComponent(element[i], 'dropdownlist').destroy();\n detach(element[i]);\n }\n }\n tooltip = this.element.querySelectorAll('.e-rule-value .e-control.e-tooltip');\n for (i = 0; i < tooltip.length; i++) {\n getComponent(tooltip[i], 'tooltip').destroy();\n }\n this.isImportRules = false;\n this.unWireEvents();\n this.levelColl[this.element.id + '_group0'] = [0];\n this.element.innerHTML = '';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.portals && this.portals.length) {\n this.clearQBTemplate();\n }\n popupElement = document.querySelectorAll('.qb-dropdownlist.e-popup');\n if (popupElement) {\n for (i = 0; i < popupElement.length; i++) {\n popupElement[i].remove();\n }\n }\n classList(this.element, [], ['e-rtl', 'e-responsive', 'e-device']);\n this.isDestroy = false;\n };\n /**\n * Adds single or multiple rules.\n *\n * @param {RuleModel[]} rule - 'rule collection' to be passed to add the rules.\n * @param {string} groupID - 'group id' to be passed to add the rule in groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addRules = function (rule, groupID) {\n groupID = this.element.id + '_' + groupID;\n this.isPublic = true;\n for (var i = 0, len = rule.length; i < len; i++) {\n this.addRuleElement(document.getElementById(groupID), rule[i]);\n }\n this.isPublic = false;\n };\n /**\n * Adds single or multiple groups, which contains the collection of rules.\n *\n * @param {RuleModel[]} groups - 'group collection' to be passed to add the groups.\n * @param {string} groupID - 'group id' to be passed to add the groups.\n * @returns {void}.\n */\n QueryBuilder.prototype.addGroups = function (groups, groupID) {\n if (this.isAddSuccess || this.element.querySelectorAll('.e-group-container').length <= this.maxGroupCount) {\n groupID = this.element.id + '_' + groupID;\n var groupElem = document.getElementById(groupID);\n var rule = this.getParentGroup(groupElem);\n var grouplen = groups.length;\n if (grouplen) {\n this.isPublic = true;\n for (var i = 0, len = groups.length; i < len; i++) {\n this.updatedRule = { isLocked: groups[i].isLocked, condition: groups[i].condition,\n not: groups[i].not };\n this.importRules(groups[i], groupElem, false, groups[i].not);\n }\n this.isPublic = false;\n }\n else {\n var condition = 'and';\n var not = false;\n var isLocked = false;\n if (this.updatedRule) {\n condition = this.updatedRule.condition;\n not = this.updatedRule.not;\n isLocked = this.updatedRule.isLocked;\n }\n if (this.groupIndex < 0) {\n if (this.enableNotCondition) {\n rule.rules.push({ 'condition': condition, 'not': not, rules: [] });\n }\n else {\n rule.rules.push({ 'condition': condition, rules: [] });\n }\n }\n else {\n if (this.enableNotCondition) {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, not: not, rules: [], isLocked: isLocked });\n }\n else {\n rule.rules.splice(this.groupIndex + 1, 0, { condition: condition, rules: [], isLocked: isLocked });\n }\n }\n }\n if (!this.headerTemplate) {\n this.disableRuleCondition(groupElem, rule);\n }\n }\n };\n QueryBuilder.prototype.initWrapper = function () {\n this.isInitialLoad = true;\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n addClass([this.element], 'e-rtl');\n }\n if (this.width) {\n this.element.style.width = this.width;\n }\n if (this.height) {\n this.element.style.height = this.height;\n }\n if (this.rule.rules.length) {\n this.isImportRules = true;\n }\n else {\n this.addGroupElement(false, this.element);\n }\n if (Browser.isDevice || this.displayMode === 'Vertical') {\n if (Browser.isDevice) {\n this.element.style.width = '100%';\n this.element.classList.add('e-device');\n }\n removeClass(this.element.querySelectorAll('.e-rule-container'), 'e-horizontal-mode');\n addClass(this.element.querySelectorAll('.e-rule-container'), 'e-vertical-mode');\n this.displayMode = 'Vertical';\n }\n else {\n this.displayMode = 'Horizontal';\n }\n if (this.summaryView) {\n if (this.isImportRules) {\n this.renderSummary();\n }\n else {\n this.renderSummaryCollapse();\n }\n }\n else {\n if (this.columns.length && this.isImportRules) {\n this.addGroupElement(false, this.element, this.rule.condition, false, this.rule.not, false, this.rule);\n var mRules = extend({}, this.rule, {}, true);\n this.isRefreshed = true;\n this.setGroupRules(mRules);\n this.isRefreshed = false;\n }\n else if (this.columns.length) {\n this.addRuleElement(this.element.querySelector('.e-group-container'), {});\n }\n this.notGroupRtl();\n if (this.readonly) {\n this.enableReadonly();\n }\n var buttons = this.element.querySelectorAll('label.e-btn');\n var button = void 0;\n for (var i = 0; i < buttons.length; i++) {\n button = buttons.item(i);\n rippleEffect(button, { selector: '.e-btn' });\n }\n }\n };\n QueryBuilder.prototype.renderSummary = function () {\n var contentElem = this.createElement('div', {\n attrs: {\n class: 'e-summary-content',\n id: this.element.id + '_summary_content'\n }\n });\n var textElem = this.createElement('textarea', { attrs: { class: 'e-summary-text', readonly: 'true' }, styles: 'max-height:500px' });\n var editElem = this.createElement('button', { attrs: { type: 'button', class: 'e-edit-rule e-css e-btn e-small e-flat e-primary' } });\n var divElem = this.createElement('div', { attrs: { class: 'e-summary-btndiv' } });\n contentElem.appendChild(textElem);\n textElem.textContent = this.getSqlFromRules(this.rule);\n editElem.textContent = this.l10n.getConstant('Edit');\n divElem.appendChild(editElem);\n contentElem.appendChild(divElem);\n this.element.appendChild(contentElem);\n };\n QueryBuilder.prototype.renderSummaryCollapse = function () {\n var collapseElem = this.createElement('div', {\n attrs: {\n class: 'e-collapse-rule e-icons',\n title: this.l10n.getConstant('SummaryViewTitle')\n }\n });\n this.element.querySelector('.e-group-header').appendChild(collapseElem);\n };\n QueryBuilder.prototype.columnSort = function () {\n if (this.sortDirection.toLowerCase() === 'descending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortByDesc('field'));\n }\n else if (this.sortDirection.toLowerCase() === 'ascending') {\n this.columns = new DataManager(this.columns).executeLocal(new Query().sortBy('field'));\n }\n };\n QueryBuilder.prototype.onChangeNotGroup = function () {\n this.element.innerHTML = '';\n this.groupIdCounter = 0;\n if (!this.headerTemplate) {\n if (this.enableNotCondition) {\n if (this.enableNotCondition) {\n var inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });\n this.groupElem.querySelector('.e-btn-group').insertBefore(inputElem, this.groupElem.querySelector('.e-btngroup-and'));\n }\n }\n else {\n this.groupElem.querySelector('.e-qb-toggle').remove();\n }\n }\n this.setProperties({ rule: this.checkNotGroup(this.rule) }, true);\n this.initWrapper();\n };\n QueryBuilder.prototype.notGroupRtl = function () {\n if (this.enableRtl) {\n addClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n else {\n removeClass(this.element.querySelectorAll('.e-btn-group'), 'e-rtl');\n }\n };\n QueryBuilder.prototype.checkNotGroup = function (rule) {\n var orgRule;\n if (rule.rules) {\n for (var i = 0; i < rule.rules.length; i++) {\n orgRule = rule.rules[i];\n orgRule = this.checkNotGroup(orgRule);\n rule.rules[i] = orgRule;\n }\n }\n if (!isNullOrUndefined(rule.not)) {\n if (this.enableNotCondition) {\n rule.not = false;\n }\n delete rule.not;\n }\n else if (this.enableNotCondition && !isNullOrUndefined(rule.condition)) {\n rule.not = false;\n }\n return rule;\n };\n QueryBuilder.prototype.onPropertyChanged = function (newProp, oldProp) {\n var properties = Object.keys(newProp);\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var prop = properties_1[_i];\n switch (prop) {\n case 'summaryView':\n // eslint-disable-next-line\n var groupElem = this.element.querySelector('.e-group-container');\n // eslint-disable-next-line\n var summaryElem = this.element.querySelector('.e-summary-content');\n if (newProp.summaryView) {\n groupElem.style.display = 'none';\n if (this.element.querySelectorAll('.e-summary-content').length < 1) {\n this.renderSummary();\n summaryElem = this.element.querySelector('.e-summary-content');\n }\n else {\n this.element.querySelector('.e-summary-text').textContent = this.getSqlFromRules(this.rule);\n }\n summaryElem.style.display = 'block';\n }\n else {\n if (groupElem.querySelectorAll('.e-collapse-rule').length > -1) {\n this.renderSummaryCollapse();\n }\n groupElem.style.display = 'block';\n summaryElem.style.display = 'none';\n }\n break;\n case 'displayMode':\n this.refresh();\n break;\n case 'showButtons':\n if (!isNullOrUndefined(newProp.showButtons.lockGroup)) {\n if (newProp.showButtons.lockGroup) {\n removeClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.lockRule)) {\n if (newProp.showButtons.lockRule) {\n removeClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-lock-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneGroup)) {\n if (newProp.showButtons.cloneGroup) {\n removeClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-grp-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.cloneRule)) {\n if (newProp.showButtons.cloneRule) {\n removeClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-clone-rule-btn'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.ruleDelete)) {\n if (newProp.showButtons.ruleDelete) {\n removeClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-rule-delete'), 'e-button-hide');\n }\n }\n if (!isNullOrUndefined(newProp.showButtons.groupDelete)) {\n if (newProp.showButtons.groupDelete) {\n removeClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n else {\n addClass(this.element.querySelectorAll('.e-deletegroup'), 'e-button-hide');\n }\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n else {\n removeClass([this.element], 'e-rtl');\n this.notGroupRtl();\n }\n break;\n case 'enablePersistence':\n this.enablePersistence = newProp.enablePersistence;\n break;\n case 'dataSource':\n this.dataSource = newProp.dataSource;\n this.refresh();\n break;\n case 'columns':\n this.columns = newProp.columns;\n this.columnSort();\n this.updateSubFieldsFromColumns(this.columns);\n break;\n case 'sortDirection':\n this.sortDirection = newProp.sortDirection;\n this.columnSort();\n break;\n case 'maxGroupCount':\n this.maxGroupCount = newProp.maxGroupCount;\n break;\n case 'height':\n this.height = newProp.height;\n this.element.style.height = this.height;\n break;\n case 'rule':\n if (this.rule.rules.length === 0 && !isNullOrUndefined(this.rule)) {\n this.reset();\n }\n this.setProperties({ rule: newProp.rule }, true);\n newProp.rule = this.getRuleCollection(this.rule, false);\n this.setRules(this.rule);\n break;\n case 'width':\n this.width = newProp.width;\n this.element.style.width = this.width;\n break;\n case 'locale':\n this.locale = newProp.locale;\n this.intl = new Internationalization(this.locale);\n this.isLocale = true;\n this.refresh();\n this.isLocale = false;\n break;\n case 'enableNotCondition':\n this.onChangeNotGroup();\n break;\n case 'readonly':\n this.isReadonly = newProp.readonly;\n this.enableReadonly();\n break;\n }\n }\n };\n QueryBuilder.prototype.preRender = function () {\n this.element.id = this.element.id || getUniqueID('ej2-querybuilder');\n this.defaultLocale = {\n StartsWith: 'Starts With',\n DoesNotStartWith: 'Does Not Start With',\n EndsWith: 'Ends With',\n DoesNotEndWith: 'Does Not End With',\n Contains: 'Contains',\n DoesNotContain: 'Does Not Contain',\n NotLike: 'Not Like',\n Like: 'Like',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n Between: 'Between',\n NotBetween: 'Not Between',\n In: 'In',\n NotIn: 'Not In',\n Remove: 'REMOVE',\n SelectField: 'Select a field',\n SelectOperator: 'Select operator',\n DeleteRule: 'Remove this condition',\n DeleteGroup: 'Delete group',\n AddGroup: 'Add Group',\n AddCondition: 'Add Condition',\n Edit: 'EDIT',\n ValidationMessage: 'This field is required',\n SummaryViewTitle: 'Summary View',\n OtherFields: 'Other Fields',\n AND: 'AND',\n OR: 'OR',\n NOT: 'NOT',\n SelectValue: 'Enter Value',\n IsEmpty: 'Is Empty',\n IsNotEmpty: 'Is Not Empty',\n IsNull: 'Is Null',\n IsNotNull: 'Is Not Null',\n True: 'true',\n False: 'false',\n AddButton: 'Add Group/Condition',\n CloneGroup: 'Clone Group',\n LockGroup: 'Lock Group',\n CloneRule: 'Clone Rule',\n LockRule: 'Lock Rule',\n UnlockRule: 'Unlock Rule',\n UnlockGroup: 'Unlock Group'\n };\n this.l10n = new L10n('querybuilder', this.defaultLocale, this.locale);\n this.intl = new Internationalization(this.locale);\n this.groupIdCounter = 0;\n this.subFilterCounter = 0;\n this.ruleIdCounter = 0;\n this.btnGroupId = 0;\n this.isImportRules = false;\n this.parser = [];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', key: this.l10n.getConstant('StartsWith') },\n { value: 'notstartswith', key: this.l10n.getConstant('DoesNotStartWith') },\n { value: 'endswith', key: this.l10n.getConstant('EndsWith') },\n { value: 'notendswith', key: this.l10n.getConstant('DoesNotEndWith') },\n { value: 'contains', key: this.l10n.getConstant('Contains') },\n { value: 'notcontains', key: this.l10n.getConstant('DoesNotContain') },\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') },\n { value: 'isempty', key: this.l10n.getConstant('IsEmpty') },\n { value: 'isnotempty', key: this.l10n.getConstant('IsNotEmpty') }\n ],\n dateOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') }\n ],\n booleanOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: [\n { value: 'equal', key: this.l10n.getConstant('Equal') },\n { value: 'greaterthanorequal', key: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'greaterthan', key: this.l10n.getConstant('GreaterThan') },\n { value: 'between', key: this.l10n.getConstant('Between') },\n { value: 'lessthan', key: this.l10n.getConstant('LessThan') },\n { value: 'notbetween', key: this.l10n.getConstant('NotBetween') },\n { value: 'lessthanorequal', key: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', key: this.l10n.getConstant('NotEqual') },\n { value: 'in', key: this.l10n.getConstant('In') },\n { value: 'notin', key: this.l10n.getConstant('NotIn') }\n ]\n };\n this.operators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: 'IN', notin: 'NOT IN',\n lessthanorequal: '<=', startswith: 'LIKE', endswith: 'LIKE', between: 'BETWEEN', notbetween: 'NOT BETWEEN', contains: 'LIKE',\n isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',\n notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'\n };\n this.sqlOperators = {\n equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),\n notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),\n endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),\n notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),\n isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),\n isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),\n notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),\n notcontains: this.l10n.getConstant('NotLike').toUpperCase()\n };\n if (!this.fields) {\n this.fields = { text: 'label', value: 'field' };\n }\n };\n QueryBuilder.prototype.render = function () {\n this.levelColl = {};\n this.items = [\n {\n text: this.l10n.getConstant('AddGroup'),\n iconCss: 'e-icons e-add-icon e-addgroup'\n },\n {\n text: this.l10n.getConstant('AddCondition'),\n iconCss: 'e-icons e-add-icon e-addrule'\n }\n ];\n this.ruleElem = this.ruleTemplate();\n this.groupElem = this.groupTemplate();\n var stringOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n var numberOper = [\n { value: 'isnull', key: this.l10n.getConstant('IsNull') },\n { value: 'isnotnull', key: this.l10n.getConstant('IsNotNull') }\n ];\n this.customOperators['stringOperator'] = this.customOperators['stringOperator'].concat(stringOper); // tslint:disable-line\n this.customOperators['numberOperator'] = this.customOperators['numberOperator'].concat(numberOper); // tslint:disable-line\n if (this.dataSource instanceof DataManager) {\n this.dataManager = this.dataSource;\n this.executeDataManager(new Query().take(1));\n }\n else {\n this.dataManager = new DataManager(this.dataSource);\n this.dataColl = this.dataManager.executeLocal(new Query());\n this.initControl();\n }\n this.renderComplete();\n };\n QueryBuilder.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n QueryBuilder.prototype.executeDataManager = function (query) {\n var _this = this;\n var data = this.dataManager.executeQuery(query);\n var deferred = new Deferred();\n data.then(function (e) {\n if (e.actual && e.actual.result) {\n _this.dataColl = e.actual.result;\n }\n else {\n _this.dataColl = e.result;\n }\n _this.initControl();\n }).catch(function (e) {\n deferred.reject(e);\n });\n };\n QueryBuilder.prototype.initControl = function () {\n this.initialize();\n this.initWrapper();\n this.wireEvents();\n };\n QueryBuilder.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickEventHandler, this);\n EventHandler.add(wrapper, 'focusout', this.focusEventHandler, this);\n EventHandler.add(wrapper, 'focusin', this.focusEventHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n };\n QueryBuilder.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(wrapper, 'click', this.clickEventHandler);\n EventHandler.remove(wrapper, 'focusout', this.focusEventHandler);\n EventHandler.remove(wrapper, 'focusin', this.focusEventHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n };\n QueryBuilder.prototype.getParentGroup = function (target, isParent) {\n var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[\"\" + target];\n var len = isParent ? groupLevel.length - 1 : groupLevel.length;\n var rule = this.rule;\n for (var i = 0; i < len; i++) {\n rule = this.findGroupByIdx(groupLevel[i], rule, i === 0);\n }\n return rule;\n };\n /**\n * Delete the Group\n *\n * @param {Element | string} target - 'target' to be passed to delete the group.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroup = function (target) {\n var _this = this;\n var groupElem = target;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var args = { groupID: groupId, cancel: false, type: 'deleteGroup' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteGroupSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteGroupSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteGroupSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = target;\n var rule = this.getParentGroup(groupElem, true);\n var index = 0;\n var i = void 0;\n var len = void 0;\n var beforeRules = this.getValidRules(this.rule);\n var nextElem = groupElem.nextElementSibling;\n var prevElem = groupElem.previousElementSibling;\n var element = groupElem.querySelectorAll('.e-group-container');\n var valElem = groupElem.querySelectorAll('.e-tooltip');\n len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n for (i = 0, len = element.length; i < len; i++) {\n delete this.levelColl[element[i].id];\n }\n while (groupElem.previousElementSibling !== null) {\n groupElem = groupElem.previousElementSibling;\n index++;\n }\n if (nextElem && nextElem.className.indexOf('e-separate-rule') > -1) {\n removeClass([nextElem], 'e-separate-rule');\n addClass([nextElem], 'e-joined-rule');\n if (prevElem && prevElem.className.indexOf('e-rule-container') > -1) {\n addClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var elem = groupElem.parentElement.parentElement.parentElement;\n var removeString = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n var remRule = rule.rules[index];\n var ruleElemColl = target.querySelectorAll('.e-rule-container');\n if (remRule && remRule.rules) {\n for (var r = 0; r < remRule.rules.length; r++) {\n var column = this.getColumn(remRule.rules[r].field);\n if (ruleElemColl[r]) {\n var isTemplateRendered = ruleElemColl[r].querySelector('.e-template-value');\n if (column && (column.ruleTemplate || (this.isPlatformTemplate(column) && isTemplateRendered))) {\n removeString.push(ruleElemColl[r].id);\n }\n }\n }\n }\n }\n detach(target);\n if (this.headerTemplate) {\n this.clearQBTemplate([target.id]);\n }\n if (removeString.length) {\n this.clearQBTemplate(removeString);\n }\n rule.rules.splice(index, 1);\n delete this.levelColl[args.groupID];\n this.refreshLevelColl();\n this.disableRuleCondition(elem, rule);\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteGroup');\n }\n };\n QueryBuilder.prototype.isPlatformTemplate = function (column) {\n var isTemp = false;\n isTemp = column.template && (typeof column.template === 'string' || column.template.create === undefined);\n return isTemp;\n };\n QueryBuilder.prototype.deleteRule = function (target) {\n var _this = this;\n var groupElem = closest(target, '.e-group-container');\n var groupID = groupElem.id.replace(this.element.id + '_', '');\n var ruleID = closest(target, '.e-rule-container').id.replace(this.element.id + '_', '');\n var args = { groupID: groupID, ruleID: ruleID, cancel: false, type: 'deleteRule' };\n if (!this.isImportRules) {\n this.trigger('beforeChange', args, function (observedChangeArgs) {\n _this.deleteRuleSuccessCallBack(observedChangeArgs, target);\n });\n }\n else {\n this.deleteRuleSuccessCallBack(args, target);\n }\n };\n QueryBuilder.prototype.deleteRuleSuccessCallBack = function (args, target) {\n if (!args.cancel) {\n var groupElem = closest(target, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n var ruleElem = closest(target, '.e-rule-container');\n var beforeRules = this.getValidRules(this.rule);\n var clnruleElem = ruleElem;\n var nextElem = ruleElem.nextElementSibling;\n var prevElem = ruleElem.previousElementSibling;\n var index = 0;\n var valElem = ruleElem.querySelectorAll('.e-tooltip');\n var i = void 0;\n var len = valElem.length;\n for (i = 0; i < len; i++) {\n getComponent(valElem[i], 'tooltip').destroy();\n }\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n var column = this.getColumn(rule.rules[index].field);\n if (column && column.template && clnruleElem.querySelector('.e-template')) {\n this.templateDestroy(column, clnruleElem.querySelector('.e-template').id);\n }\n if (!prevElem || prevElem.className.indexOf('e-rule-container') < 0) {\n if (nextElem) {\n removeClass([nextElem], 'e-joined-rule');\n }\n }\n if (!nextElem || nextElem.className.indexOf('e-rule-container') < 0) {\n if (prevElem) {\n removeClass([prevElem], 'e-prev-joined-rule');\n }\n }\n var isTemplateRendered = clnruleElem.querySelector('.e-template-value');\n // eslint-disable\n try {\n detach(clnruleElem);\n }\n catch (err) {\n // eslint-disable-next-line no-ex-assign\n err = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var error = 'error';\n // eslint-disable-next-line\n err[error] = error;\n }\n // eslint-enable\n if (column && column.ruleTemplate) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n if (column && this.isPlatformTemplate(column) && isTemplateRendered) {\n this.clearQBTemplate([clnruleElem.id]);\n }\n rule.rules.splice(index, 1);\n if (!(rule.rules[0] && rule.rules[0].rules)) {\n this.disableRuleCondition(groupElem, rule);\n }\n var tooltipElem = this.element.querySelectorAll('.e-tooltip');\n for (var i_3 = 0; i_3 < tooltipElem.length; i_3++) {\n getComponent(tooltipElem[i_3], 'tooltip').refresh(tooltipElem[i_3]);\n }\n if (!this.isImportRules) {\n this.trigger('change', args);\n }\n this.filterRules(beforeRules, this.getValidRules(this.rule), 'deleteRule');\n }\n };\n QueryBuilder.prototype.setGroupRules = function (rule, isRoot) {\n if (this.headerTemplate && isRoot) {\n this.isRoot = true;\n }\n this.reset();\n this.groupIdCounter = 1;\n this.ruleIdCounter = 0;\n this.isImportRules = true;\n this.setProperties({ rule: rule }, true);\n rule = this.getRuleCollection(this.rule, false);\n this.importRules(this.rule, this.element.querySelector('.e-group-container'), true, this.rule.not, isRoot);\n if (rule.isLocked) {\n var lockGrpTarget = this.element.querySelector('.e-group-container').querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n this.isImportRules = false;\n };\n QueryBuilder.prototype.keyBoardHandler = function (e) {\n if (this.readonly && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {\n e.preventDefault();\n }\n };\n QueryBuilder.prototype.clearQBTemplate = function (ruleElemColl) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact || this.isAngular) {\n this.clearTemplate(ruleElemColl);\n }\n };\n QueryBuilder.prototype.disableRuleCondition = function (groupElem, rules) {\n if (!this.headerTemplate) {\n if (this.readonly) {\n return;\n }\n var count = groupElem.querySelector('.e-rule-list').childElementCount;\n var andElem = groupElem.querySelector('.e-btngroup-and');\n var orElem = groupElem.querySelector('.e-btngroup-or');\n if (count > 1) {\n andElem.disabled = false;\n orElem.disabled = false;\n if (orElem.nextElementSibling.classList.contains('e-btn-disable') ||\n andElem.nextElementSibling.classList.contains('e-btn-disable')) {\n orElem.nextElementSibling.classList.remove('e-btn-disable');\n andElem.nextElementSibling.classList.remove('e-btn-disable');\n }\n if (rules && rules.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n andElem.checked = false;\n andElem.disabled = true;\n orElem.checked = false;\n orElem.disabled = true;\n if (rules) {\n orElem.nextElementSibling.classList.add('e-btn-disable');\n andElem.nextElementSibling.classList.add('e-btn-disable');\n }\n }\n }\n };\n /**\n * Get the valid rule or rules collection.\n *\n * @param {RuleModel} currentRule - 'currentRule' to be passed to get the valid rules.\n * @returns {RuleModel} - Valid rule or rules collection\n */\n QueryBuilder.prototype.getValidRules = function (currentRule) {\n if (!currentRule) {\n currentRule = this.getRules();\n }\n var ruleCondtion = currentRule.condition;\n var notCondition = currentRule.not;\n var ruleColl = extend([], currentRule.rules, [], true);\n var rule = !isNullOrUndefined(currentRule.isLocked) ?\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition, isLocked: currentRule.isLocked }, true) :\n this.getRuleCollection({ condition: ruleCondtion, rules: ruleColl, not: notCondition }, true);\n return rule;\n };\n QueryBuilder.prototype.getRuleCollection = function (rule, isValidRule) {\n if (isNullOrUndefined(rule)) {\n return null;\n }\n var orgRule;\n if (rule.rules && rule.rules.length && (Object.keys(rule.rules[0]).length > 6 || isValidRule)) {\n var jLen = rule.rules.length;\n for (var j = 0; j < jLen; j++) {\n orgRule = rule.rules[j];\n orgRule = this.getRuleCollection(orgRule, isValidRule);\n rule.rules[j] = orgRule;\n if (Object.keys(orgRule).length < 1 && isValidRule) {\n rule.rules.splice(j, 1);\n j--;\n jLen--;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var customObj = rule.custom;\n if ((rule.field && rule.field !== '') && (isNullOrUndefined(customObj) || (customObj && (customObj.type !== 'question' &&\n customObj.type !== 'answer')))) {\n if (rule.operator) {\n if (rule.operator.toString().indexOf('null') > -1 || rule.operator.toString().indexOf('empty') > -1) {\n rule.value = null;\n }\n }\n if ((this.isRefreshed && this.enablePersistence) || (rule.field !== '' && rule.operator !== '' && (rule.value !== '' &&\n rule.value !== undefined)) || (customObj && customObj.isQuestion)) {\n var condition = rule.condition;\n var lockedRule = rule.isLocked;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value };\n if (!isNullOrUndefined(lockedRule)) {\n rule.isLocked = lockedRule;\n }\n if (condition) {\n rule.condition = condition;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((rule.operator === 'in' || rule.operator === 'notin') && rule.value && rule.value.length === 0) {\n rule = {};\n }\n }\n else {\n rule = {};\n }\n }\n else {\n if (customObj && (customObj.type === 'question' || customObj.type === 'answer')) {\n var notValue = rule.not;\n rule = { 'label': rule.label, 'field': rule.field, 'operator': rule.operator, 'type': rule.type, 'value': rule.value,\n 'condition': rule.condition, 'rules': rule.rules\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n if (this.enableNotCondition) {\n rule.not = notValue;\n }\n }\n else if ((isNullOrUndefined(rule.condition)) && isNullOrUndefined(rule.rules)) {\n rule = {};\n }\n else {\n var isLocked = rule.isLocked;\n if (this.enableNotCondition) {\n rule = { 'condition': rule.condition, 'rules': rule.rules, 'not': rule.not };\n }\n else {\n rule = { 'condition': rule.condition, 'rules': rule.rules };\n }\n if (!isNullOrUndefined(isLocked)) {\n rule.isLocked = isLocked;\n }\n if (customObj) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = customObj;\n }\n if (rule.rules.length === 0) {\n rule = {};\n }\n }\n }\n return rule;\n };\n /**\n * Set the rule or rules collection.\n *\n * @param {RuleModel} rule - 'rule' to be passed to set rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.setRules = function (rule) {\n var mRules = extend({}, rule, {}, true);\n if (this.headerTemplate) {\n this.setGroupRules(mRules, true);\n }\n else {\n this.setGroupRules(mRules);\n }\n };\n /**\n * Gets the rule or rule collection.\n *\n * @returns {object} - Rule or rule collection\n */\n QueryBuilder.prototype.getRules = function () {\n var rule;\n if (this.enableNotCondition) {\n rule = { condition: this.rule.condition, rules: this.rule.rules, not: this.rule.not };\n }\n else {\n rule = { condition: this.rule.condition, rules: this.rule.rules };\n }\n if (!isNullOrUndefined(this.rule.isLocked)) {\n rule.isLocked = this.rule.isLocked;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.rule.custom) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rule.custom = this.rule.custom;\n }\n return rule;\n };\n /**\n * Gets the rule.\n *\n * @param {string | HTMLElement} elem - 'elem' to be passed to get rule.\n * @returns {object} - Rule\n */\n QueryBuilder.prototype.getRule = function (elem) {\n var ruleElem;\n var ruleId;\n var index = 0;\n if (elem instanceof HTMLElement) {\n ruleElem = closest(elem, '.e-rule-container');\n }\n else {\n ruleId = this.element.id + '_' + elem;\n ruleElem = document.getElementById(ruleId);\n }\n if (isNullOrUndefined(ruleElem)) {\n return null;\n }\n var groupElem = closest(ruleElem, '.e-group-container');\n var rule = this.getParentGroup(groupElem);\n while (ruleElem.previousElementSibling !== null) {\n ruleElem = ruleElem.previousElementSibling;\n index++;\n }\n return rule.rules[index];\n };\n /**\n * Gets the group.\n *\n * @param {string | Element} target - 'target' to be passed to get group.\n * @returns {object} -Group\n */\n QueryBuilder.prototype.getGroup = function (target) {\n if (target instanceof Element && target.className.indexOf('e-group-container') < 1) {\n target = closest(target, '.e-group-container');\n }\n var groupId = (target instanceof Element) ? target.id : this.element.id + '_' + target;\n var rule = this.getParentGroup(groupId);\n return rule;\n };\n /**\n * Deletes the group or groups based on the group ID.\n *\n * @param {string[]} groupIdColl - 'groupIdColl' to be passed to delete groups.\n * @returns {void}\n */\n QueryBuilder.prototype.deleteGroups = function (groupIdColl) {\n var i;\n var len = groupIdColl.length;\n var groupID;\n for (i = 0; i < len; i++) {\n groupID = this.element.id + '_' + groupIdColl[i];\n this.deleteGroup(document.getElementById(groupID));\n }\n };\n /**\n * Return the Query from current rules collection.\n *\n * @returns {Promise} - Query from current rules collection\n * @blazorType object\n */\n QueryBuilder.prototype.getFilteredRecords = function () {\n var predicate = this.getPredicate(this.getValidRules(this.rule));\n var dataManagerQuery = isNullOrUndefined(predicate) ? new Query() : new Query().where(predicate);\n return this.dataManager.executeQuery(dataManagerQuery);\n };\n /**\n * Deletes the rule or rules based on the rule ID.\n *\n * @param {string[]} ruleIdColl - 'ruleIdColl' to be passed to delete rules.\n * @returns {void}.\n */\n QueryBuilder.prototype.deleteRules = function (ruleIdColl) {\n var i;\n var len = ruleIdColl.length;\n var ruleID;\n for (i = 0; i < len; i++) {\n ruleID = this.element.id + '_' + ruleIdColl[i];\n this.deleteRule(document.getElementById(ruleID));\n }\n };\n /**\n * Gets the query for Data Manager.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get query.\n * @returns {string} - Query for Data Manager\n */\n QueryBuilder.prototype.getDataManagerQuery = function (rule) {\n var predicate = this.getPredicate(rule);\n var query;\n var fields = [];\n for (var i = 0, len = Object.keys(this.columns); i < len.length; i++) {\n fields.push(this.columns[i].field);\n }\n if (rule.rules.length) {\n query = new Query().select(fields).where(predicate);\n }\n else {\n query = new Query().select(fields);\n }\n return query;\n };\n /**\n * Get the predicate from collection of rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get predicate.\n * @returns {Predicate} - Predicate from collection of rules\n */\n QueryBuilder.prototype.getPredicate = function (rule) {\n var ruleColl = rule.rules;\n var pred;\n var pred2;\n var ruleValue;\n var ignoreCase = false;\n var column;\n if (!ruleColl) {\n return pred;\n }\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var operator = ruleColl[i].operator;\n if (operator === 'notstartswith') {\n operator = 'doesnotstartwith';\n }\n else if (operator === 'notendswith') {\n operator = 'doesnotendwith';\n }\n else if (operator === 'notcontains') {\n operator = 'doesnotcontain';\n }\n var keys = Object.keys(ruleColl[i]);\n ignoreCase = false;\n if (keys.indexOf('rules') > -1 && ruleColl[i].rules) {\n pred2 = this.getPredicate(ruleColl[i]);\n if (pred2) {\n if (pred) {\n if (rule.condition === 'and') {\n pred = pred.and(pred2);\n }\n else {\n pred = pred.or(pred2);\n }\n }\n else {\n pred = pred2;\n }\n }\n }\n else if (!isNullOrUndefined(operator) && !isNullOrUndefined(operator.length)) {\n var oper = ruleColl[i].operator.toLowerCase();\n var isDateFilter = false;\n var dateOperColl = ['equal', 'notequal', 'greaterthan', 'greaterthanorequal', 'lessthan', 'lessthanorequal'];\n if (ruleColl[i].type === 'string') {\n ignoreCase = this.matchCase ? false : true;\n }\n if (ruleColl[i].type === 'date' && dateOperColl.indexOf(oper) > -1) {\n ignoreCase = true;\n }\n column = this.getColumn(ruleColl[i].field);\n if (oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) {\n ruleColl[i].value = null;\n }\n else if (ruleColl[i].type === 'date' && !(ruleColl[i].value instanceof Array)) {\n var format = this.getFormat(column.format);\n if (!isNullOrUndefined(ruleColl[i].value)) {\n ruleValue = this.getDate(ruleColl[i].value, format);\n if (dateOperColl.indexOf(oper) > -1 && !this.isTime(ruleColl[i].value)) {\n isDateFilter = true;\n }\n }\n else {\n ruleValue = null;\n }\n }\n else {\n ruleValue = ruleColl[i].value;\n }\n if (i === 0) {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||\n oper.indexOf('empty') > -1) && (oper.indexOf('contain') < 0)) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :\n this.arrayPredicate(ruleColl[i]);\n }\n else {\n var value = ruleValue;\n if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n else {\n if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 ||\n oper.indexOf('null') > -1 || oper.indexOf('empty') > -1) && oper.indexOf('contain') < 0) {\n pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue, pred, rule.condition) :\n this.arrayPredicate(ruleColl[i], pred, rule.condition);\n }\n else {\n if (rule.condition === 'and') {\n var value = ruleValue;\n if (pred && value !== '') {\n pred\n = pred.and(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n else {\n var value = ruleValue;\n if (pred && value !== '') {\n pred = pred.or(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n else if (value !== '') {\n pred = new Predicate(ruleColl[i].field, operator, ruleValue, ignoreCase);\n }\n }\n }\n }\n }\n }\n if (this.dataSource instanceof DataManager) {\n if (!isNullOrUndefined(pred) && (pred.operator === 'isnull' || pred.operator === 'isnotnull')) {\n pred.operator = pred.operator === 'isnull' ? 'equal' : 'notequal';\n }\n }\n return pred;\n };\n QueryBuilder.prototype.getLocale = function () {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.short';\n var localeString = this.locale;\n var mainVal = 'main.';\n var cultureObj = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n if (!cultureObj) {\n localeString = 'en';\n }\n return localeString;\n };\n QueryBuilder.prototype.getColumn = function (field, col) {\n var columns = this.columns;\n var column;\n columns = col ? col : columns;\n for (var i = 0, iLen = columns.length; i < iLen; i++) {\n if (columns[i].field === field) {\n column = columns[i];\n break;\n }\n else if (columns[i].columns) {\n column = this.getColumn(field, columns[i].columns);\n if (column) {\n break;\n }\n }\n else if (field && field.indexOf(this.separator) > -1) {\n if (this.separator !== '' && columns[i].field === field.split(this.separator)[0]) {\n column = columns[i];\n break;\n }\n }\n }\n return column;\n };\n /* eslint-disable */\n /**\n * Return the operator bound to the column.\n *\n * @returns {[key: string]: Object}[] - Operator bound to the column\n */\n /* eslint-enable */\n QueryBuilder.prototype.getOperators = function (field) {\n var column = this.getColumn(field);\n return column.operators;\n };\n QueryBuilder.prototype.setTime = function (date, isStart) {\n if (isStart) {\n date.setHours(0, 0, 0);\n }\n else {\n date.setHours(23, 59, 59);\n }\n return date;\n };\n QueryBuilder.prototype.datePredicate = function (ruleColl, value, predicate, condition) {\n var pred;\n var startDate = this.setTime(new Date(value.getTime()), true);\n var endDate = this.setTime(value);\n switch (ruleColl.operator) {\n case 'equal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n pred = pred.and(ruleColl.field, 'lessthanorequal', endDate);\n break;\n case 'notequal':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n pred = pred.or(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthan':\n pred = new Predicate(ruleColl.field, 'greaterthan', endDate);\n break;\n case 'greaterthanorequal':\n pred = new Predicate(ruleColl.field, 'greaterthanorequal', startDate);\n break;\n case 'lessthan':\n pred = new Predicate(ruleColl.field, 'lessthan', startDate);\n break;\n case 'lessthanorequal':\n pred = new Predicate(ruleColl.field, 'lessthanorequal', endDate);\n break;\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.arrayPredicate = function (ruleColl, predicate, condition) {\n var value = ruleColl.value;\n var operator = ruleColl.operator.toString();\n var nullValue = ruleColl.value;\n var pred;\n var column = this.getColumn(ruleColl.field);\n var format = this.getFormat(column.format);\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n switch (operator) {\n case 'isnull':\n pred = new Predicate(ruleColl.field, 'isnull', nullValue);\n break;\n case 'isnotnull':\n pred = new Predicate(ruleColl.field, 'isnotnull', nullValue);\n break;\n case 'isempty':\n pred = new Predicate(ruleColl.field, 'equal', '');\n break;\n case 'isnotempty':\n pred = new Predicate(ruleColl.field, 'notequal', '');\n break;\n }\n }\n if (!(operator.indexOf('null') > -1 || operator.indexOf('empty') > -1)) {\n for (var j = 0, jLen = value.length; j < jLen; j++) {\n if (value[j] !== '' || ((operator === 'in' || operator === 'notin') && column.type === 'string')) {\n if (j === 0) {\n var gte = 'greaterthanorequal';\n switch (operator) {\n case 'between':\n if (column.type !== 'date') {\n pred = new Predicate(ruleColl.field, gte, value[j]);\n }\n else {\n pred = new Predicate(ruleColl.field, gte, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format), true)) : null);\n }\n else {\n pred = new Predicate(ruleColl.field, 'lessthan', value[j]);\n }\n break;\n case 'in':\n pred = new Predicate(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = new Predicate(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n else {\n var gt = 'greaterthan';\n switch (ruleColl.operator) {\n case 'between':\n if (column.type === 'date') {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.and(ruleColl.field, 'lessthanorequal', value[j]);\n }\n break;\n case 'notbetween':\n if (column.type === 'date') {\n pred = pred.or(ruleColl.field, gt, value[j] ?\n (this.isTime(value[j]) ? this.getDate(value[j], format) :\n this.setTime(this.getDate(value[j], format))) : value[j]);\n }\n else {\n pred = pred.or(ruleColl.field, 'greaterthan', value[j]);\n }\n break;\n case 'in':\n pred = pred.or(ruleColl.field, 'equal', value[j]);\n break;\n case 'notin':\n pred = pred.and(ruleColl.field, 'notequal', value[j]);\n break;\n }\n }\n }\n }\n }\n if (pred) {\n if (predicate) {\n if (condition === 'and') {\n predicate = predicate.and(pred);\n }\n else if (condition === 'or') {\n predicate = predicate.or(pred);\n }\n }\n else {\n predicate = pred;\n }\n }\n return predicate;\n };\n QueryBuilder.prototype.getDate = function (value, format) {\n var currDate = this.intl.parseDate(value, format);\n if (value.indexOf(':') > -1 && (value.indexOf('/') < 0 && value.indexOf(',') < 0\n && value.indexOf('-') < 0)) {\n currDate = new Date();\n // eslint-disable-next-line\n currDate.setHours(parseInt(value.split(':')[0]));\n // eslint-disable-next-line\n currDate.setMinutes(parseInt(value.split(':')[1]));\n if (value.split(':')[2]) {\n // eslint-disable-next-line\n currDate.setSeconds(parseInt(value.split(':')[2]));\n }\n }\n return currDate;\n };\n QueryBuilder.prototype.isTime = function (value) {\n if (value && value.indexOf(':') > -1) {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.importRules = function (rule, parentElem, isReset, not, isRoot) {\n if (!isReset) {\n parentElem = this.renderGroup(rule, rule.condition, parentElem, not);\n }\n else {\n if (rule.rules.length > 1 && !this.headerTemplate) {\n // enable/disable conditions when rule group is added\n var orElem = parentElem.querySelector('.e-btngroup-or');\n var andElem = parentElem.querySelector('.e-btngroup-and');\n orElem.disabled = false;\n andElem.disabled = false;\n if (rule.condition === 'or') {\n orElem.checked = true;\n }\n else {\n andElem.checked = true;\n }\n }\n else {\n // enable/disable conditions when rule condition is added\n this.disableRuleCondition(parentElem);\n }\n if (this.headerTemplate && isRoot) {\n parentElem = this.renderGroup(rule, rule.condition, this.element, rule.not, isRoot);\n }\n if (this.enableNotCondition && !this.headerTemplate) {\n var tglBtnElem = parentElem.querySelector('.e-qb-toggle');\n if (rule.not) {\n addClass([tglBtnElem], 'e-active-toggle');\n }\n else {\n removeClass([tglBtnElem], 'e-active-toggle');\n }\n }\n }\n if (rule.rules.length === 0 && this.headerTemplate) {\n rule.rules[0] = { 'label': '', 'field': '', 'operator': '', 'type': '', 'value': '' };\n }\n var ruleColl = rule.rules;\n if (!isNullOrUndefined(ruleColl)) {\n for (var i = 0, len = ruleColl.length; i < len; i++) {\n var keys = Object.keys(ruleColl[i]);\n if (!isNullOrUndefined(ruleColl[i].rules) && keys.indexOf('rules') > -1 && (ruleColl[i].rules.length !== 0)) {\n if (this.element.querySelectorAll('.e-group-container').length > this.maxGroupCount) {\n return null;\n }\n parentElem = this.renderGroup(ruleColl[i], ruleColl[i].condition, parentElem, ruleColl[i].not);\n parentElem = this.importRules(ruleColl[i], parentElem, true);\n }\n else {\n this.renderRule(ruleColl[i], parentElem);\n }\n if (!isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockGrpTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-grp-btn');\n this.groupLock(lockGrpTarget);\n }\n if (isNullOrUndefined(ruleColl[i].rules) && ruleColl[i].isLocked) {\n var lockRuleTarget = parentElem.querySelector('.e-rule-list').children[i].querySelector('.e-lock-rule-btn');\n this.ruleLock(lockRuleTarget);\n }\n }\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-rule-list');\n }\n if (parentElem) {\n parentElem = closest(parentElem, '.e-group-container');\n }\n return parentElem;\n };\n QueryBuilder.prototype.renderGroup = function (rule, condition, parentElem, not, isRoot) {\n this.addGroupElement(true, parentElem, condition, false, not, isRoot, rule); //Child group\n var element = parentElem.querySelectorAll('.e-group-container');\n var cloneElem = parentElem.querySelector('.e-rule-list').children;\n if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isMiddleGroup) {\n this.isMiddleGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[this.groupIndex + 1]; // group added in the middle\n }\n else if (this.showButtons.cloneGroup && this.cloneGrpBtnClick && this.isLastGroup) {\n this.isLastGroup = false;\n this.cloneGrpBtnClick = false;\n return cloneElem[cloneElem.length - 1]; // group added in the end\n }\n else {\n return element[element.length - 1];\n }\n };\n QueryBuilder.prototype.renderRule = function (rule, parentElem) {\n if (parentElem.className.indexOf('e-group-container') > -1) {\n this.addRuleElement(parentElem, rule); //Create rule\n }\n else {\n this.addRuleElement(parentElem.querySelector('.e-group-container'), rule); //Create group\n }\n };\n QueryBuilder.prototype.enableReadonly = function () {\n var target = this.element;\n var elem = target.querySelectorAll('.e-dropdownlist, .e-dropdowntree, .e-numerictextbox, .e-textbox, .e-datepicker, .e-multiselect .e-lib, .e-radio');\n for (var i = 0; i < elem.length; i++) {\n if (elem[i].classList.contains('e-dropdownlist')) {\n var dropDownObj = getInstance(elem[i], DropDownList);\n dropDownObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-dropdowntree')) {\n var dropDownTreeObj = getComponent(elem[i], 'dropdowntree');\n dropDownTreeObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-numerictextbox')) {\n var numericTextBoxObj = getInstance(elem[i], NumericTextBox);\n numericTextBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-textbox')) {\n var textBoxObj = getInstance(elem[i], TextBox);\n textBoxObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-datepicker')) {\n var datePickerObj = getInstance(elem[i], DatePicker);\n datePickerObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-multiselect')) {\n var multiSelectObj = getInstance(elem[i], MultiSelect);\n multiSelectObj.readonly = this.isReadonly;\n }\n else if (elem[i].classList.contains('e-radio')) {\n var radioButtonObj = getInstance(elem[i], RadioButton);\n if (!radioButtonObj.checked) {\n if (this.isReadonly) {\n elem[i].parentElement.style.display = 'none';\n }\n else {\n elem[i].parentElement.style.display = 'inherit';\n }\n }\n }\n }\n var deleteGroupElems = this.element.querySelectorAll('.e-deletegroup');\n var addRuleGroupElems = this.element.querySelectorAll('.e-addrulegroup');\n var removeRuleElems = this.element.querySelectorAll('.e-removerule');\n if (!this.isReadonly && this.ruleElem.classList.contains('e-readonly')) {\n this.ruleElem.classList.remove('e-readonly');\n }\n var elems = [deleteGroupElems, addRuleGroupElems, removeRuleElems];\n for (var i = 0; i < elems.length; i++) {\n elems[i].forEach(function (elem) {\n if (elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n }\n this.enableBtnGroup();\n };\n QueryBuilder.prototype.enableBtnGroup = function () {\n var _this = this;\n var elems = this.element.querySelectorAll('.e-btngroup-and-lbl, .e-btngroup-or-lbl, .e-qb-toggle');\n var not = false;\n elems.forEach(function (elem) {\n if (elem.classList.contains('e-qb-toggle') && !elem.classList.contains('e-active-toggle')\n && !elem.classList.contains('e-readonly')) {\n elem.classList.add('e-readonly');\n not = false;\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-not-readonly')) {\n elem.classList.remove('e-not-readonly');\n }\n else if (elem.classList.contains('e-qb-toggle') && elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n }\n else if (elem.classList.contains('e-active-toggle')) {\n elem.classList.add('e-not-readonly');\n not = true;\n }\n else if (elem.previousElementSibling.checked || elem.classList.contains('e-readonly')) {\n elem.classList.remove('e-readonly');\n if (not) {\n if (elem.textContent === 'AND') {\n elem.classList.add('e-readonly-and');\n }\n else {\n elem.classList.add('e-readonly-or');\n }\n }\n else {\n if (elem.textContent === 'AND' && _this.isReadonly) {\n elem.classList.remove('e-not');\n elem.classList.add('e-readonly-and');\n }\n else {\n if (_this.enableNotCondition) {\n elem.classList.add('e-not');\n }\n elem.classList.remove('e-readonly-and');\n }\n if (elem.textContent === 'OR' && _this.isReadonly) {\n elem.classList.add('e-readonly-or-not');\n }\n else {\n elem.classList.remove('e-readonly-or-not');\n }\n }\n }\n else if (elem.classList.contains('e-btn-disable')) {\n // do nothing\n }\n else {\n elem.classList.add('e-readonly');\n }\n });\n };\n QueryBuilder.prototype.isDateFunction = function (value) {\n var dateFunc = ['date', 'time', 'day', 'week', 'month', 'year', 'hour', 'minute', 'second', 'now', 'quarter', 'period', 'extract'];\n for (var i = 0, len = dateFunc.length; i < len; i++) {\n if (value.toLowerCase().indexOf(dateFunc[i]) > -1) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {\n var isRoot = false;\n if (!queryStr && queryStr !== '') {\n queryStr = '';\n isRoot = true;\n }\n else {\n queryStr += '(';\n }\n var condition = rules.condition;\n if (rules.not) {\n var rulesNotCondition = void 0;\n if (isRoot) {\n rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';\n queryStr += rulesNotCondition;\n }\n else {\n rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';\n queryStr += rulesNotCondition;\n }\n }\n if (rules.rules) {\n for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {\n if (rules.rules[j].rules) {\n queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);\n }\n else {\n var rule = rules.rules[j];\n var valueStr = '';\n var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];\n if (rule.value instanceof Array) {\n if (rule.operator.toString().indexOf('between') > -1) {\n var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';\n if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {\n valueStr += '\"' + rule.value[0] + '\"' + ruleCondition + '\"' + rule.value[1] + '\"';\n }\n else {\n valueStr += rule.value[0] + ruleCondition + rule.value[1];\n }\n }\n else {\n if (typeof rule.value[0] === 'string' && rule.value !== null) {\n valueStr += '(\"' + rule.value[0] + '\"';\n for (var k = 1, kLen = rule.value.length; k < kLen; k++) {\n valueStr += ',\"' + rule.value[k] + '\"';\n }\n valueStr += ')';\n }\n else {\n valueStr += '(' + rule.value + ')';\n }\n }\n }\n else {\n if (rule.operator.toString().indexOf('startswith') > -1) {\n valueStr += rule.value ? '(\"' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('endswith') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '\")' : '(' + rule.value + ')';\n }\n else if (rule.operator.toString().indexOf('contains') > -1) {\n valueStr += rule.value ? '(\"%' + rule.value + '%\")' : '(' + rule.value + ')';\n }\n else {\n if (rule.type === 'number' || typeof rule.value === 'boolean' ||\n (rule.value === null && (rule.operator.toString().indexOf('empty') < -1))) {\n valueStr += rule.value;\n }\n else if (rule.operator.toString().indexOf('empty') > -1) {\n valueStr += '\"\"';\n }\n else {\n valueStr += '\"' + rule.value + '\"';\n }\n }\n }\n if (rule.operator.toString().indexOf('null') > -1) {\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + ruleOpertor;\n }\n else {\n var custOper = ruleOpertor;\n if (rule.operator === 'isempty') {\n custOper = '=';\n }\n else if (rule.operator === 'isnotempty') {\n custOper = '!=';\n }\n if (enableEscape) {\n rule.field = '`' + rule.field + '`';\n }\n else {\n if (rule.field.indexOf(' ') > -1) {\n rule.field = '\"' + rule.field + '\"';\n }\n }\n queryStr += rule.field + ' ' + custOper + ' ' + valueStr;\n }\n if (rule.condition && rule.condition !== '') {\n condition = rule.condition;\n }\n }\n if (j !== jLen - 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rule = rules.rules[j];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (condition === '' || (rule && rule.condition !== '' && rule.custom && rule.custom.isCustom)) {\n condition = rule.condition;\n }\n condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();\n queryStr += ' ' + condition + ' ';\n }\n }\n }\n if (!isRoot) {\n queryStr += ')';\n }\n if (rules.not) {\n queryStr += ')';\n }\n return queryStr;\n };\n /**\n * Sets the rules from the sql query.\n *\n * @param {string} sqlString - 'sql String' to be passed to set the rule.\n * @param {boolean} sqlLocale - Optional. Set `true` if Localization for Sql query.\n * @returns {void}\n */\n QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {\n sqlString = sqlString.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n };\n /**\n * Get the rules from SQL query.\n *\n * @param {string} sqlString - 'sql String' to be passed to get the rule.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {object} - Rules from SQL query\n */\n QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {\n this.parser = [];\n this.sqlParser(sqlString, sqlLocale);\n this.setProperties({ rule: { condition: 'and', not: false, rules: [] } }, true);\n var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);\n if (this.enableNotCondition) {\n return { condition: rule.condition, not: rule.not, rules: rule.rules };\n }\n else {\n return { condition: rule.condition, rules: rule.rules };\n }\n };\n /**\n * Gets the sql query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @param {boolean} allowEscape - Set `true` if it exclude the escape character.\n * @param {boolean} sqlLocale - Set `true` if Localization for Sql query.\n * @returns {string} - Sql query from rules.\n */\n QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {\n if (!rule) {\n rule = this.getValidRules();\n }\n rule = this.getRuleCollection(rule, false);\n var sqlString = this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/\"/g, '\\'');\n return sqlString;\n };\n /**\n * Gets the parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the parameter sql string.\n * @returns {ParameterizedSql} – Parameterized SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedSql = function (rule) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n };\n /**\n * Sets the rules from the parameter sql query.\n *\n * @param { ParameterizedSql} sqlQuery – Specifies the parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedSql = function (sqlQuery) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n };\n /**\n * Gets the named parameter SQL query from rules.\n *\n * @param {RuleModel} rule – Specify the rule to be passed to get the named parameter SQL string.\n * @returns {ParameterizedNamedSql} – Parameterized Named SQL query from rules.\n */\n QueryBuilder.prototype.getParameterizedNamedSql = function (rule) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { sql: null };\n this.notify('query-library', { prop: 'getNamedParameterSql', onPropertyChange: false, value: { rule: rule, obj: obj } });\n return obj['sql'];\n };\n /**\n * Sets the rules from the named parameter SQL query.\n *\n * @param { ParameterizedNamedSql } sqlQuery – Specifies the named parameter SQL to be passed to set the rule and load it to the query builder.\n * @returns {void}\n */\n QueryBuilder.prototype.setParameterizedNamedSql = function (sqlQuery) {\n var obj = { sql: null };\n this.notify('query-library', { prop: 'convertNamedParamSqlToSql', onPropertyChange: false, value: { sql: sqlQuery, obj: obj } });\n var sql = obj['sql'];\n if (sql) {\n sql = sql.replace(/`/g, '');\n var ruleModel = this.getRulesFromSql(sql);\n this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });\n }\n };\n /**\n * Set the rules from Mongo query.\n *\n * @param {string} mongoQuery - 'sql String' to be passed to get the rule.\n * @param {boolean} mongoLocale - Set `true` if Localization for Mongo query.\n * @returns {void}\n */\n QueryBuilder.prototype.setMongoQuery = function (mongoQuery, mongoLocale) {\n this.rule = { condition: 'and', not: false, rules: [] };\n this.notify('query-library', { prop: 'mongoParser', onPropertyChange: false, value: { mongoQuery: JSON.parse(mongoQuery), rule: this.rule, mongoLocale: mongoLocale } });\n };\n /**\n * Gets the Mongo query from rules.\n *\n * @param {RuleModel} rule - 'rule' to be passed to get the sql.\n * @returns {object} - Sql query from rules.\n */\n QueryBuilder.prototype.getMongoQuery = function (rule) {\n if (!rule) {\n rule = this.getValidRules();\n }\n var obj = { mongoQuery: null };\n this.notify('query-library', { prop: 'getMongoFromRules', onPropertyChange: false, value: { rule: rule, mongoQuery: '', obj: obj } });\n return obj['mongoQuery'];\n };\n /**\n * Clones the rule based on the rule ID to the specific group.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be cloned.\n * @param {string} groupID - Specifies the groupID in which the rule to be cloned.\n * @param {number} index - Specifies the index to insert the cloned rule inside the group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneRule = function (ruleID, groupID, index) {\n var getRule = this.getRule(ruleID.replace(this.element.id + '_', ''));\n var isCloneRule = this.showButtons.cloneRule;\n groupID = groupID.replace(this.element.id + '_', '');\n this.ruleIndex = index;\n this.cloneRuleBtnClick = true;\n this.showButtons.cloneRule = true;\n this.addRules([{\n 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value\n }], groupID);\n this.ruleIndex = -1;\n this.cloneRuleBtnClick = false;\n this.showButtons.cloneRule = isCloneRule;\n isCloneRule = false;\n };\n /**\n * Clones the group based on the group ID to the specific group.\n *\n * @param {string} groupID - Specifies the groupID that needs to be cloned.\n * @param {string} parentGroupID - Specifies the parentGroupID in which the group to be cloned.\n * @param {number} index - Specifies the index to insert the cloned group inside the parent group.\n * @returns {void}\n */\n QueryBuilder.prototype.cloneGroup = function (groupID, parentGroupID, index) {\n parentGroupID = parentGroupID.replace(this.element.id + '_', '');\n var group = this.getGroup(parentGroupID);\n var isCloneGroup = this.showButtons.cloneGroup;\n groupID = groupID.replace(this.element.id + '_', '');\n this.groupIndex = index;\n this.cloneGrpBtnClick = true;\n this.showButtons.cloneGroup = true;\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupID);\n this.groupIndex = -1;\n this.cloneGrpBtnClick = false;\n this.showButtons.cloneGroup = isCloneGroup;\n isCloneGroup = false;\n };\n /**\n * Locks the rule based on the rule ID.\n *\n * @param {string} ruleID - Specifies the ruleID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockRule = function (ruleID) {\n if (ruleID.indexOf(this.element.id) < 0) {\n ruleID = this.element.id + '_' + ruleID;\n }\n var target = document.getElementById(ruleID).querySelectorAll('.e-lock-rule-btn')[0];\n this.ruleLock(target);\n };\n /**\n * Locks the group based on the group ID\n *\n * @param {string} groupID - Specifies the groupID that needs to be locked.\n * @returns {void}\n */\n QueryBuilder.prototype.lockGroup = function (groupID) {\n if (groupID.indexOf(this.element.id) < 0) {\n groupID = this.element.id + '_' + groupID;\n }\n var target = document.getElementById(groupID).querySelectorAll('.e-lock-grp-btn')[0];\n this.groupLock(target);\n };\n QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {\n var st = 0;\n var str;\n do {\n str = sqlString.slice(st);\n st += this.parseSqlStrings(str, sqlLocale);\n } while (str !== '');\n return this.parser;\n };\n QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {\n var operators = ['=', '!=', '<=', '>=', '<', '>'];\n var conditions;\n if (sqlLocale) {\n conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];\n }\n else {\n conditions = ['AND', 'OR', 'NOT'];\n }\n var subOp;\n if (sqlLocale) {\n subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),\n this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),\n this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),\n this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),\n this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];\n }\n else {\n subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];\n }\n var regexStr;\n var regex;\n var matchValue;\n for (var i = 0, iLen = operators.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(operators[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Operators', operators[i].toLowerCase()]);\n return operators[i].length;\n }\n }\n var lastPasrser = this.parser[this.parser.length - 1];\n if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {\n for (var i = 0, iLen = conditions.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(conditions[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['Conditions', conditions[i].toLowerCase()]);\n return conditions[i].length;\n }\n }\n }\n for (var i = 0, iLen = subOp.length; i < iLen; i++) {\n regexStr = /^\\w+$/.test(subOp[i]) ? '\\\\b' : '';\n // eslint-disable-next-line\n regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');\n if (regex.exec(sqlString)) {\n this.parser.push(['SubOperators', subOp[i].toLowerCase()]);\n return subOp[i].length;\n }\n }\n //Left Parenthesis\n if (/^\\(/.exec(sqlString)) {\n this.parser.push(['Left', '(']);\n return 1;\n }\n //Right Parenthesis\n if (/^\\)/.exec(sqlString)) {\n this.parser.push(['Right', ')']);\n return 1;\n }\n //Boolean\n if (/^(true|false)/.exec(sqlString)) {\n matchValue = /^(true|false)/.exec(sqlString)[0];\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n //Null\n if (/^null/.exec(sqlString)) {\n matchValue = /^null/.exec(sqlString)[0];\n this.parser.push(['String', null]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (/^`?([a-z_][a-z0-9_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^`?([a-zåäö_][a-z0-9åäö_.\\[\\]\\(\\)]{0,}(\\:(number|float|string|date|boolean))?)`?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n // eslint-disable-next-line\n if (this.checkLiteral() && /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'?([a-z_][a-z0-9 _.\\[\\]\\(\\)-]{0,}(\\:(number|float|string|date|boolean))?)'?/i.exec(sqlString)[1];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length + 2;\n }\n if (this.checkNumberLiteral(sqlString, sqlLocale)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Literal', matchValue]);\n return matchValue.length;\n }\n //String\n // eslint-disable-next-line\n if (/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(sqlString)[0];\n if (matchValue[matchValue.length - 2] === '(') {\n var isClosed = false;\n for (var j = matchValue.length; j < sqlString.length; j++) {\n matchValue += sqlString[j];\n if (sqlString[j] === ')') {\n isClosed = true;\n }\n if (isClosed && sqlString[j] === '\\'') {\n break;\n }\n }\n }\n else if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue)) {\n matchValue = this.getSingleQuoteString(sqlString, matchValue);\n }\n // end\n this.parser.push(['String', matchValue]);\n return matchValue.length;\n }\n // Double String\n // eslint-disable-next-line\n if (/^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"/.exec(sqlString)[0];\n this.parser.push(['DoubleString', matchValue]);\n return matchValue.length;\n }\n //Number\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n //Negative Number\n // eslint-disable-next-line\n if (/^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n // eslint-disable-next-line\n matchValue = /^-?[0-9]+(\\.[0-9]+)?/.exec(sqlString)[0];\n this.parser.push(['Number', matchValue]);\n return matchValue.length;\n }\n return 1;\n };\n QueryBuilder.prototype.checkCondition = function (sqlString, matchValue) {\n if (sqlString.slice(matchValue.length + 1, matchValue.length + 4) === 'AND' ||\n sqlString.slice(matchValue.length + 1, matchValue.length + 3) === 'OR') {\n return true;\n }\n return false;\n };\n QueryBuilder.prototype.getSingleQuoteString = function (sqlString, matchValue) {\n if (sqlString[matchValue.length] && (sqlString[matchValue.length] !== ')') &&\n !this.checkCondition(sqlString, matchValue) && sqlString[matchValue.length] !== ',') {\n var tempStr = sqlString.replace(matchValue, '');\n // eslint-disable-next-line\n if (isNullOrUndefined(/^'((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(tempStr))) {\n // eslint-disable-next-line\n var parsedValue = /^((?:[^\\\\']+?|\\\\.|'')*)'(?!')/.exec(tempStr)[0];\n matchValue += parsedValue;\n matchValue = this.getSingleQuoteString(sqlString, matchValue);\n }\n }\n return matchValue;\n };\n QueryBuilder.prototype.checkLiteral = function () {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n return false;\n };\n QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {\n var lastParser = this.parser[this.parser.length - 1];\n if (!lastParser) {\n return true;\n }\n else {\n // eslint-disable-next-line\n if (/^[0-9]+(\\.[0-9]+)?/.exec(sqlString)) {\n var secParser = this.parser[this.parser.length - 2];\n var betweenParser = this.parser[this.parser.length - 3];\n if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {\n return true;\n }\n var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';\n if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {\n return true;\n }\n }\n }\n return false;\n };\n QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {\n var operators = {\n '=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',\n 'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'\n };\n if (sqlLocale) {\n var localeOperator = Object.keys(this.sqlOperators);\n for (var i = 0; i < localeOperator.length; i++) {\n if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {\n if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notcontains' : 'contains';\n }\n else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notstartswith' : 'startswith';\n }\n else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator.toUpperCase() === 'NOT LIKE') ? 'notendswith' : 'endswith';\n }\n return localeOperator[i];\n }\n }\n return null;\n }\n if (value) {\n if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {\n return (operator === 'not like') ? 'notcontains' : 'contains';\n }\n else if (value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {\n return (operator === 'not like') ? 'notstartswith' : 'startswith';\n }\n else if (value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {\n return (operator === 'not like') ? 'notendswith' : 'endswith';\n }\n }\n else {\n if (operator === 'not like') {\n return 'notequal';\n }\n else if (operator === 'like') {\n return 'equal';\n }\n }\n return operators[\"\" + operator];\n };\n QueryBuilder.prototype.getTypeFromColumn = function (rules) {\n var columnData = this.getColumn(rules.field);\n if (!isNullOrUndefined(columnData)) {\n return columnData.type;\n }\n return null;\n };\n QueryBuilder.prototype.getLabelFromColumn = function (field) {\n var label = '';\n var l = 0;\n if (this.separator !== '') {\n var fieldColl = field.split(this.separator);\n for (var i = 0; i < fieldColl.length; i++) {\n label += this.getLabelFromField(fieldColl, i + 1);\n l++;\n if (l < fieldColl.length) {\n label += this.separator;\n }\n }\n return label;\n }\n else {\n var labelItem = this.getColumn(field).label;\n return labelItem;\n }\n };\n QueryBuilder.prototype.getLabelFromField = function (field, startIdx) {\n var fieldName = '';\n var j = 0;\n for (var k = 0; k < startIdx; k++) {\n fieldName += field[k];\n j++;\n if (j < startIdx) {\n fieldName += this.separator;\n }\n }\n return this.getColumn(fieldName).label;\n };\n QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {\n var j;\n var jLen;\n var rule;\n var subRules;\n var numVal = [];\n var strVal = [];\n var k;\n var kLen;\n var l;\n var lLen;\n var grpCount;\n var operator;\n var isLeftOpened = false;\n for (var i = 0, iLen = parser.length; i < iLen; i++) {\n if (parser[i][0] === 'Literal') {\n var column = this.getColumn(parser[i][1]);\n rule = { label: (column && column.label) ? column.label : parser[i][1], field: parser[i][1] };\n if (parser[i + 1][0] === 'SubOperators') {\n if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {\n rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);\n rule.value = null;\n rule.type = this.getTypeFromColumn(rule);\n }\n else {\n var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];\n rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);\n }\n operator = parser[i + 1][1];\n i++;\n j = i + 1;\n jLen = iLen;\n if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {\n operator = 'like';\n }\n else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {\n operator = 'not like';\n }\n else if (sqlLocale) {\n operator = rule.operator;\n }\n for (j = i + 1; j < jLen; j++) {\n if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {\n isLeftOpened = true;\n }\n else if (parser[j][0] === 'Right' && isLeftOpened) {\n i = j;\n isLeftOpened = false;\n break;\n }\n else {\n if (operator.indexOf('null') > -1 || operator.indexOf('empty') > -1) {\n break;\n }\n if (operator.indexOf('like') > -1 && parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n val = val ? val.replace(/%/g, '') : parser[j][1];\n rule.value = val;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1) {\n if (parser[j][0] === 'Literal' || parser[j][0] === 'Left') {\n break;\n }\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n else {\n if (parser[j][0] === 'Number') {\n numVal.push(Number(parser[j][1]));\n }\n else if (parser[j][0] === 'String') {\n var val = parser[j][1];\n if (parser[j][1] && parser[j][1][0] === '\\'') {\n val = parser[j][1].substring(1, parser[j][1].length - 1);\n }\n strVal.push(val);\n }\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n if (operator.indexOf('like') < 0) {\n if (parser[j - 1][0] === 'Number') {\n rule.value = numVal;\n rule.type = 'number';\n }\n else if (parser[j - 1][0] === 'String') {\n rule.value = strVal;\n rule.type = 'string';\n }\n else if (operator.indexOf('between') > -1 && parser[j - 1][0] === 'Conditions') {\n if (strVal.length !== 0) {\n rule.value = strVal;\n rule.type = 'string';\n }\n else {\n rule.value = numVal;\n rule.type = 'number';\n }\n }\n numVal = [];\n strVal = [];\n rule.type = this.getTypeFromColumn(rule);\n }\n }\n else if (parser[i + 1][0] === 'Operators') {\n rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);\n var isEmptyOper = false;\n if (rule.operator == \"equal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isempty\";\n isEmptyOper = true;\n }\n else if (rule.operator == \"notequal\" && parser[i + 2][0] === \"String\" && parser[i + 2][1] === \"''\") {\n rule.operator = \"isnotempty\";\n isEmptyOper = true;\n }\n if (parser[i + 2][0] === 'Number') {\n rule.type = 'number';\n rule.value = Number(parser[i + 2][1]);\n }\n else {\n rule.type = 'string';\n var val = parser[i + 2][1];\n if (val && val[0] === '\\'') {\n val = val.substring(1, val.length - 1);\n }\n rule.value = val;\n }\n rule.type = this.getTypeFromColumn(rule);\n }\n rules.rules.push(rule);\n }\n else if (parser[i][0] === 'Left') {\n if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {\n continue;\n }\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n if (this.enableNotCondition) {\n subRules = { condition: 'and', rules: [], not: false };\n }\n else {\n subRules = { condition: 'and', rules: [] };\n }\n grpCount = 0;\n kLen = rules.rules.length;\n for (k = 0; k < kLen; k++) { //To get the group position\n if (rules.rules[k].rules) {\n grpCount++;\n }\n }\n levelColl.push(grpCount);\n rules.rules.push(subRules);\n subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);\n return rules;\n }\n else if (parser[i][0] === 'Conditions') {\n if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {\n rules.not = true;\n }\n else {\n rules.condition = parser[i][1];\n }\n }\n else if (parser[i][0] === 'Right') {\n this.parser = parser.splice(i + 1, iLen - (i + 1));\n levelColl.pop(); //To get the parent Group\n rules = this.rule;\n lLen = levelColl.length;\n for (l = 0; l < lLen; l++) {\n rules = this.findGroupByIdx(levelColl[l], rules, l === 0);\n }\n return this.processParser(this.parser, rules, levelColl, sqlLocale);\n }\n }\n return rules;\n };\n QueryBuilder.prototype.getValueFromParser = function (parser, idx) {\n var value = '';\n var k;\n for (k = idx; k < parser.length; k++) {\n if (parser[k][0] !== 'String' || parser[k][1] === ',' || parser[k][1] === ', ') {\n break;\n }\n else {\n if (value !== '') {\n idx += 1;\n }\n if (parser[k][1] !== null) {\n value += parser[k][1];\n }\n else {\n value = null;\n }\n }\n }\n return { value: value, idx: idx };\n };\n /**\n * Clone the Group\n *\n * @param {Element | string} target - 'target' to be passed to clone the group.\n * @returns {void}\n */\n QueryBuilder.prototype.groupClone = function (target) {\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var targetGrpId;\n var groupId;\n if (typeof target === 'string') {\n groupId = this.element.id + '_' + target;\n target = document.getElementById(groupId);\n }\n else {\n targetGrpId = target.id.replace(this.element.id + '_', '');\n groupId = groupElem.id.replace(this.element.id + '_', '');\n }\n var group = this.getGroup(targetGrpId);\n this.groupIndex = Array.prototype.indexOf.call(target.closest('.e-rule-list').children, target.closest('.e-group-container'));\n this.addGroups([{ 'condition': group.condition, 'not': group.not, 'rules': group.rules }], groupId);\n this.groupIndex = -1;\n };\n QueryBuilder.prototype.ruleClone = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var groupElem = target.closest('.e-rule-list').closest('.e-group-container');\n var getRule = this.getRule(target);\n var groupId = groupElem.id.replace(this.element.id + '_', '');\n var ruleElemColl = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0, iLen = ruleElemColl.length; i < iLen; i++) {\n if (ruleElem.id === ruleElemColl[i].id) {\n this.ruleIndex = i;\n }\n }\n this.addRules([{ 'label': getRule.label, 'field': getRule.field, 'type': getRule.type, 'operator': getRule.operator,\n 'value': getRule.value }], groupId);\n this.ruleIndex = -1;\n };\n QueryBuilder.prototype.ruleLock = function (target) {\n var ruleElem = closest(target, '.e-rule-container');\n var rule = this.getRule(ruleElem.id.replace(this.element.id + '_', ''));\n if (ruleElem.classList.contains('e-disable')) {\n rule.isLocked = false;\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== ruleElem.id; });\n ruleElem.classList.remove('e-disable');\n this.disableRuleControls(target, ruleElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockRule'));\n }\n else {\n rule.isLocked = true;\n if (this.lockItems.indexOf(ruleElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, ruleElem.id);\n }\n ruleElem.classList.add('e-disable');\n this.disableRuleControls(target, ruleElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockRule'));\n }\n };\n QueryBuilder.prototype.groupLock = function (target) {\n var groupElem = closest(target, '.e-group-container');\n var group = this.getGroup(groupElem.id.replace(this.element.id + '_', ''));\n var isRoot = groupElem.id.indexOf('group0') > -1;\n if (groupElem.classList.contains('e-disable')) {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = false;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = false;\n }\n this.lockItems = this.lockItems.filter(function (lockItem) { return lockItem !== groupElem.id; });\n groupElem.classList.remove('e-disable');\n this.disableHeaderControls(target, groupElem, false);\n target.children[0].classList.add('e-unlock');\n target.children[0].classList.remove('e-lock');\n target.setAttribute('title', this.l10n.getConstant('LockGroup'));\n this.updateLockItems();\n }\n else {\n if (isRoot) {\n var newGroup = {};\n newGroup.condition = group.condition;\n newGroup.not = group.not;\n newGroup.isLocked = true;\n this.setProperties({ rule: newGroup }, true);\n }\n else {\n group.isLocked = true;\n }\n if (this.lockItems.indexOf(groupElem.id) < 0) {\n this.lockItems.splice(this.lockItems.length - 1, 0, groupElem.id);\n }\n groupElem.classList.add('e-disable');\n this.disableHeaderControls(target, groupElem, true);\n target.children[0].classList.add('e-lock');\n target.children[0].classList.remove('e-unlock');\n target.setAttribute('title', this.l10n.getConstant('UnlockGroup'));\n }\n };\n QueryBuilder.prototype.updateLockItems = function () {\n for (var i = 0; i < this.lockItems.length; i++) {\n var idColl = this.lockItems[i].split('_');\n if (idColl.length > 2) {\n var ruleElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = ruleElem.querySelector('.e-lock-rule-btn');\n ruleElem = closest(target, '.e-rule-container');\n if (!ruleElem.classList.contains('e-disable')) {\n this.ruleLock(target);\n }\n }\n else {\n var groupElem = this.element.querySelector('#' + this.lockItems[i]);\n var target = groupElem.querySelector('.e-lock-grp-btn');\n groupElem = closest(target, '.e-group-container');\n if (!groupElem.classList.contains('e-disable')) {\n this.groupLock(target);\n }\n }\n }\n };\n QueryBuilder.prototype.disableHeaderControls = function (target, groupElem, isDisabled) {\n var andElem = groupElem.querySelectorAll('.e-btngroup-and');\n var orElem = groupElem.querySelectorAll('.e-btngroup-or');\n var notElem = groupElem.querySelectorAll('.e-qb-toggle');\n var addElem = groupElem.querySelectorAll('.e-add-btn');\n var deleteGrpElem = groupElem.querySelectorAll('.e-deletegroup');\n var lockElem = groupElem.querySelectorAll('.e-lock-grp-btn');\n var cloneElem = groupElem.querySelectorAll('.e-clone-grp-btn');\n var groupContElem = groupElem.querySelectorAll('.e-group-container');\n for (var i = 0; i < andElem.length; i++) {\n if (isDisabled) {\n if (groupContElem[i] && groupContElem[i].classList.contains('e-disable')) {\n groupContElem[i].classList.add('e-disable');\n }\n andElem[i].disabled = true;\n orElem[i].disabled = true;\n addElem[i].disabled = true;\n if (notElem[i]) {\n notElem[i].disabled = true;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = true;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n andElem[i].parentElement.classList.add('e-disabled');\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (groupContElem[i]) {\n groupContElem[i].classList.remove('e-disable');\n }\n andElem[i].disabled = false;\n orElem[i].disabled = false;\n addElem[i].disabled = false;\n lockElem[i].disabled = false;\n if (notElem[i]) {\n notElem[i].disabled = false;\n }\n if (deleteGrpElem[i]) {\n deleteGrpElem[i].disabled = false;\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n andElem[i].parentElement.classList.remove('e-disabled');\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n this.disableRuleControls(target, groupElem, isDisabled);\n };\n QueryBuilder.prototype.disableRuleControls = function (target, groupElem, isDisabled) {\n var ddlElement = groupElem.querySelectorAll('.e-control.e-dropdownlist');\n var numericElement = groupElem.querySelectorAll('.e-control.e-numerictextbox');\n var textElement = groupElem.querySelectorAll('.e-control.e-textbox');\n var dateElement = groupElem.querySelectorAll('.e-control.e-datepicker');\n var checkboxElement = groupElem.querySelectorAll('.e-control.e-checkbox');\n var radioBtnElement = groupElem.querySelectorAll('.e-control.e-radio');\n var multiSelectElement = groupElem.querySelectorAll('.e-control.e-multiselect');\n var deleteElem = groupElem.querySelectorAll('.e-rule-delete');\n var lockElem = groupElem.querySelectorAll('.e-lock-rule');\n var cloneElem = groupElem.querySelectorAll('.e-clone-rule');\n var ruleElem = groupElem.querySelectorAll('.e-rule-container');\n for (var i = 0; i < deleteElem.length; i++) {\n if (isDisabled) {\n if (ruleElem[i] && ruleElem[i].classList.contains('e-disable')) {\n ruleElem[i].classList.add('e-disable');\n }\n deleteElem[i].disabled = true;\n if (cloneElem[i]) {\n cloneElem[i].disabled = true;\n }\n if (lockElem[i] !== target) {\n lockElem[i].disabled = true;\n lockElem[i].children[0].classList.remove('e-unlock');\n lockElem[i].children[0].classList.add('e-lock');\n }\n }\n else {\n if (ruleElem[i]) {\n ruleElem[i].classList.remove('e-disable');\n }\n if (cloneElem[i]) {\n cloneElem[i].disabled = false;\n }\n deleteElem[i].disabled = false;\n lockElem[i].disabled = false;\n lockElem[i].children[0].classList.remove('e-lock');\n lockElem[i].children[0].classList.add('e-unlock');\n }\n }\n var dropDownObj;\n var numericObj;\n var textObj;\n var dateObj;\n var checkBoxObj;\n var radioBtnObj;\n var multiSelectObj;\n for (var i = 0; i < ddlElement.length; i++) {\n dropDownObj = getComponent(ddlElement[i], 'dropdownlist');\n if (isDisabled) {\n dropDownObj.enabled = false;\n }\n else {\n dropDownObj.enabled = true;\n }\n }\n for (var i = 0; i < numericElement.length; i++) {\n numericObj = getComponent(numericElement[i], 'numerictextbox');\n if (isDisabled) {\n numericObj.enabled = false;\n }\n else {\n numericObj.enabled = true;\n }\n }\n for (var i = 0; i < textElement.length; i++) {\n textObj = getComponent(textElement[i], 'textbox');\n if (isDisabled) {\n textObj.enabled = false;\n }\n else {\n textObj.enabled = true;\n }\n }\n for (var i = 0; i < dateElement.length; i++) {\n dateObj = getComponent(dateElement[i], 'datepicker');\n if (isDisabled) {\n dateObj.enabled = false;\n }\n else {\n dateObj.enabled = true;\n }\n }\n for (var i = 0; i < checkboxElement.length; i++) {\n checkBoxObj = getComponent(checkboxElement[i], 'checkbox');\n if (isDisabled) {\n checkBoxObj.disabled = true;\n }\n else {\n checkBoxObj.disabled = false;\n }\n }\n for (var i = 0; i < radioBtnElement.length; i++) {\n radioBtnObj = getComponent(radioBtnElement[i], 'radio');\n if (isDisabled) {\n radioBtnObj.disabled = true;\n }\n else {\n radioBtnObj.disabled = false;\n }\n }\n for (var i = 0; i < multiSelectElement.length; i++) {\n multiSelectObj = getComponent(multiSelectElement[i], 'multiselect');\n if (isDisabled) {\n multiSelectObj.enabled = false;\n }\n else {\n multiSelectObj.enabled = true;\n }\n }\n };\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"beforeChange\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], QueryBuilder.prototype, \"ruleChange\", void 0);\n __decorate([\n Complex({}, ShowButtons)\n ], QueryBuilder.prototype, \"showButtons\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"summaryView\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"allowValidation\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"fieldMode\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"columns\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"fieldModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"operatorModel\", void 0);\n __decorate([\n Property(null)\n ], QueryBuilder.prototype, \"valueModel\", void 0);\n __decorate([\n Property()\n ], QueryBuilder.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"cssClass\", void 0);\n __decorate([\n Property([])\n ], QueryBuilder.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Horizontal')\n ], QueryBuilder.prototype, \"displayMode\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('Default')\n ], QueryBuilder.prototype, \"sortDirection\", void 0);\n __decorate([\n Property(5)\n ], QueryBuilder.prototype, \"maxGroupCount\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], QueryBuilder.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"matchCase\", void 0);\n __decorate([\n Property(0)\n ], QueryBuilder.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"enableNotCondition\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"addRuleToNewGroups\", void 0);\n __decorate([\n Property(false)\n ], QueryBuilder.prototype, \"autoSelectField\", void 0);\n __decorate([\n Property(true)\n ], QueryBuilder.prototype, \"autoSelectOperator\", void 0);\n __decorate([\n Property('')\n ], QueryBuilder.prototype, \"separator\", void 0);\n __decorate([\n Complex({ condition: 'and', rules: [] }, Rule)\n ], QueryBuilder.prototype, \"rule\", void 0);\n QueryBuilder = __decorate([\n NotifyPropertyChanges\n ], QueryBuilder);\n return QueryBuilder;\n}(Component));\nexport { QueryBuilder };\nvar LevelColl = /** @class */ (function () {\n function LevelColl() {\n }\n return LevelColl;\n}());\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar QueryLibrary = /** @class */ (function () {\n function QueryLibrary(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n QueryLibrary.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n QueryLibrary.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('query-library', this.queryLibrary, this);\n this.parent.on('destroyed', this.destroy, this);\n };\n QueryLibrary.prototype.removeEventListener = function () {\n this.parent.off('query-library', this.queryLibrary);\n this.parent.off('destroyed', this.destroy);\n };\n QueryLibrary.prototype.queryLibrary = function (args) {\n switch (args.prop) {\n case 'getMongoFromRules':\n args.value['obj']['mongoQuery'] = this.getMongoFromRules(args.value['rule'], args.value['mongoQuery']);\n break;\n case 'mongoParser':\n this.mongoParser(args.value['mongoQuery'], args.value['rule'], args.value['mongoLocale']);\n break;\n case 'getParameterSql':\n args.value['obj']['sql'] = this.getParameterSql(args.value['rule']);\n break;\n case 'getNamedParameterSql':\n args.value['obj']['sql'] = this.getNamedParameterSql(args.value['rule']);\n break;\n case 'convertParamSqlToSql':\n args.value['obj']['sql'] = this.convertParamSqlToSql(args.value['sql']);\n break;\n case 'convertNamedParamSqlToSql':\n args.value['obj']['sql'] = this.convertNamedParamSqlToSql(args.value['sql']);\n break;\n }\n };\n QueryLibrary.prototype.getMongoFromRules = function (rule, mongoQuery) {\n mongoQuery = '{';\n if (rule.condition === 'or') {\n mongoQuery += '\"$or\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += '\"$and\":[';\n mongoQuery = this.convertMongoQuery(rule.rules, mongoQuery) + ']';\n }\n mongoQuery += '}';\n return mongoQuery;\n };\n QueryLibrary.prototype.getOperatorFromMongoOperator = function (operator) {\n var operatorValue;\n switch (operator) {\n case '$ne':\n operatorValue = 'notequal';\n break;\n case '$gt':\n operatorValue = 'greaterthan';\n break;\n case '$gte':\n operatorValue = 'greaterthanorequal';\n break;\n case '$lt':\n operatorValue = 'lessthan';\n break;\n case '$lte':\n operatorValue = 'lessthanorequal';\n break;\n case '$nin':\n operatorValue = 'notin';\n break;\n }\n return operatorValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.convertMongoQuery = function (rules, mongoQuery) {\n var _this = this;\n var i = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules.forEach(function (item) {\n i++;\n mongoQuery += '{';\n if (item.rules !== undefined) {\n if (item.condition === 'or') {\n mongoQuery += ' \"$or\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n else {\n mongoQuery += ' \"$and\":[';\n mongoQuery = _this.convertMongoQuery(item.rules, mongoQuery) + ']';\n }\n }\n var itVal = item.type === 'string' && item.operator !== 'in' && item.operator !== 'notin' && item.value && item.value.trim() !== '' ? item.value.replace(/'/g, '\\\\') : '';\n if (item.type === 'string' && (item.operator === 'in' || item.operator === 'notin') && item.value && item.value.length === 1) {\n itVal = item.value[0].replace(/'/g, '\\\\');\n }\n var field = item.field ? item.field.substring(0) : '';\n switch (item.operator) {\n case 'contains':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '\"}';\n break;\n case 'notcontains':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '\"}}';\n break;\n case 'startswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"^' + itVal + '\"}';\n break;\n case 'notstartswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"^' + item.value + '\"}}';\n break;\n case 'endswith':\n mongoQuery += '\"' + field + '\":{\"$regex\":\"' + itVal + '$\"}';\n break;\n case 'notendswith':\n mongoQuery += '\"' + field + '\":{\"$not\":{\"$regex\":\"' + item.value + '$\"}}';\n break;\n case 'isnull':\n mongoQuery += '\"' + field + '\": null';\n break;\n case 'isnotnull':\n mongoQuery += '\"' + field + '\":{\"$ne\": null}';\n break;\n case 'isempty':\n mongoQuery += '\"' + field + '\": \"\"';\n break;\n case 'isnotempty':\n mongoQuery += '\"' + field + '\":{\"$ne\": \"\"}';\n break;\n case 'equal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":\"' + itVal + '\"';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":\"' + item.value + '\"';\n }\n else if (item.type === 'boolean') {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n else {\n mongoQuery += '\"' + field + '\":' + item.value + '';\n }\n break;\n case 'notequal':\n if (item.type === 'string') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + itVal + '\"}';\n }\n else if (item.type === 'date') {\n mongoQuery += '\"' + field + '\":{\"$ne\":\"' + item.value + '\"}';\n }\n else {\n mongoQuery += '\"' + field + '\":{\"$ne\":' + item.value + '}';\n }\n break;\n case 'in':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$in\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$in\": [' + item.value + ']}';\n }\n }\n break;\n case 'notin':\n if (item.type === 'string') {\n if (item.value.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var s = item.value.map(function (x, j) { return (j < item.value.length ? \"\\\"\" + x + \"\\\"\" : ''); }).toString();\n s = s.endsWith(',') ? s.substring(0, s.length - 1) : s;\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + s + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [\"' + itVal + '\"]}';\n }\n }\n else if (item.type === 'number') {\n if (item.value.length > 1) {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value.toString() + ']}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$nin\": [' + item.value + ']}';\n }\n }\n break;\n case 'greaterthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gt\": \"' + item.value + '\"}';\n }\n break;\n case 'greaterthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$gte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$gte\": \"' + item.value + '\"}';\n }\n break;\n case 'between':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": {\"$gte\":' + item.value[0] + ', \"$lte\":' + item.value[1] + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": {\"$gte\": \"' + item.value[0] + '\", \"$lte\": \"' + item.value[1] + '\"}';\n }\n break;\n case 'notbetween':\n if (item.type === 'number') {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\":' + item.value[0] + '}}, {\"' + field + '\": {\"$gt\":' + item.value[1] + '}}]';\n }\n else {\n mongoQuery += '\"$or\":[{\"' + field + '\": {\"$lt\": \"' + item.value[0] + '\"}}, {\"' + field + '\": {\"$gt\": \"' + item.value[1] + '\"}}]';\n }\n break;\n case 'lessthan':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lt\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lt\": \"' + item.value + '\"}';\n }\n break;\n case 'lessthanorequal':\n if (item.type === 'number') {\n mongoQuery += '\"' + field + '\": { \"$lte\": ' + item.value + '}';\n }\n else {\n mongoQuery += '\"' + field + '\": { \"$lte\": \"' + item.value + '\"}';\n }\n break;\n }\n mongoQuery += '}';\n if (rules.length !== i) {\n mongoQuery += ',';\n }\n });\n return mongoQuery;\n };\n QueryLibrary.prototype.mongoParser = function (mongoQuery, rule, mongoLocale) {\n var mongoList;\n if (Object.keys(mongoQuery).indexOf('$and') > -1) {\n mongoList = mongoQuery['$and'];\n rule.condition = 'and';\n }\n else if (Object.keys(mongoQuery).indexOf('$or') > -1) {\n mongoList = mongoQuery['$or'];\n rule.condition = 'or';\n }\n rule.rules = [];\n this.mongoRecursion(mongoList, rule.rules, mongoLocale);\n };\n QueryLibrary.prototype.mongoRecursion = function (mongoList, rules, mongoLocale) {\n var operatorValue;\n var type;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var stringValue;\n var key;\n var betweenValue;\n var condition;\n var value;\n var subRules;\n var rule;\n var keyObj;\n var ruleValue;\n for (var i = 0, len = mongoList.length; i < len; i++) {\n var betweenOperatorArray = [];\n var inOperatorArray = [];\n condition = Object.keys(mongoList[i])[0];\n value = mongoList[i][condition];\n if (condition === '$and') {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n else if (condition === '$or') {\n var notBetween = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, max-len\n var innerObject = [];\n var keys = [];\n var firstKey = [];\n var secondKey = [];\n var innerKeys = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, max-len\n var firstValue = [];\n var secondValue = [];\n var innerFirstValue = [];\n var innerSecondValue = [];\n if (Array.isArray(value) && value.length === 2) {\n keys = Object.keys(value);\n innerFirstValue = value[keys[0]];\n innerSecondValue = value[keys[1]];\n if (typeof innerFirstValue === 'object') {\n innerObject = Object.keys(innerFirstValue)[0];\n innerKeys = Object.keys(innerFirstValue[Object.keys(innerFirstValue)[0]]);\n firstKey = innerKeys[0];\n secondKey = Object.keys(innerSecondValue[Object.keys(innerSecondValue)[0]])[0];\n if (firstKey === '$lt' && secondKey === '$gt') {\n operatorValue = 'notbetween';\n // eslint-disable-next-line security/detect-object-injection\n firstValue = innerFirstValue[innerObject][firstKey];\n // eslint-disable-next-line security/detect-object-injection\n secondValue = innerSecondValue[innerObject][secondKey];\n type = typeof firstValue === 'number' ? 'number' : 'date';\n ruleValue = [firstValue, secondValue];\n rule = { field: innerObject, label: innerObject, value: ruleValue, operator: operatorValue, type: type };\n rules.push(rule);\n notBetween = true;\n }\n }\n }\n if (!notBetween) {\n if (this.parent.enableNotCondition) {\n subRules = { condition: condition.replace('$', ''), rules: [], not: false };\n }\n else {\n subRules = { condition: condition.replace('$', ''), rules: [] };\n }\n rules.push(subRules);\n this.mongoRecursion(mongoList[i][condition], rules[rules.length - 1].rules, mongoLocale);\n }\n }\n else {\n value = mongoList[i][condition];\n if (value === null) { // isnull operator\n operatorValue = 'isnull';\n }\n if (typeof value === 'boolean') { // boolean type values\n operatorValue = 'equal';\n type = 'boolean';\n ruleValue = value;\n }\n if (typeof (value) === 'number') {\n ruleValue = value;\n type = 'number';\n operatorValue = 'equal';\n }\n else if (typeof (value) === 'object' && value !== null) {\n keyObj = Object.keys(value);\n for (var i_1 = 0; i_1 < keyObj.length; i_1++) {\n key = keyObj[i_1];\n stringValue = (value)[keyObj[i_1]];\n if (key === '$ne' && isNullOrUndefined(stringValue)) { // not null operator\n operatorValue = 'isnotnull';\n ruleValue = null;\n }\n if (key === '$ne' && typeof stringValue === 'boolean') { // not equal operator for boolean\n operatorValue = 'notequal';\n ruleValue = stringValue;\n type = 'boolean';\n }\n if (keyObj.length >= 2 && keyObj[i_1]) {\n if (typeof (stringValue) == 'object') { // between and notbetween operators\n operatorValue = 'notbetween';\n condition = Object.keys(stringValue)[0];\n betweenValue = [Object.keys(stringValue[condition])[0]];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n betweenOperatorArray.push(stringValue[condition][betweenValue]);\n type = 'number';\n }\n else {\n operatorValue = 'between';\n betweenOperatorArray.push(stringValue);\n }\n if (typeof (stringValue) === 'number') {\n type = 'number';\n }\n }\n else if (typeof (stringValue) === 'object' && stringValue !== null) { // \"in\" and \"notin\" operator\n if (key === '$not' && Object.keys(stringValue)[0] === '$regex') {\n if (stringValue['$regex'].indexOf('^') > -1) {\n operatorValue = 'notstartswith';\n ruleValue = stringValue['$regex'].replace('^', '');\n }\n else if (stringValue['$regex'].indexOf('$') > -1) {\n operatorValue = 'notendswith';\n ruleValue = stringValue['$regex'].replace('$', '');\n }\n else {\n operatorValue = 'notcontains';\n ruleValue = stringValue['$regex'];\n }\n }\n else {\n operatorValue = key === '$in' ? 'in' : 'notin';\n inOperatorArray = stringValue;\n type = typeof (stringValue[0]) === 'number' ? 'number' : 'string';\n }\n }\n else if (typeof (stringValue) === 'number') { // number type values\n operatorValue = this.getOperatorFromMongoOperator(key);\n type = 'number';\n ruleValue = stringValue;\n }\n if (typeof (stringValue) === 'string') { // string type values\n if (key === '$regex') {\n operatorValue = 'contains';\n ruleValue = stringValue;\n type = 'string';\n }\n if (key === '$ne') { // not equal\n if (stringValue !== null && stringValue.length > 0 && isNaN(Date.parse(stringValue))) {\n operatorValue = 'notequal';\n ruleValue = stringValue;\n }\n else if (isNullOrUndefined(stringValue)) { // is not null operator\n operatorValue = 'isnotnull';\n ruleValue = stringValue;\n }\n else if (stringValue === '') { // is not empty operator\n operatorValue = 'isnotempty';\n ruleValue = stringValue;\n }\n type = 'string';\n }\n if (stringValue.indexOf('^') > -1) {\n operatorValue = 'startswith';\n ruleValue = stringValue.replace('^', '');\n type = 'string';\n }\n if (stringValue.indexOf('$') > -1 && key !== '$not') {\n operatorValue = 'endswith';\n ruleValue = stringValue.replace('$', '');\n type = 'string';\n }\n if (!isNaN(Date.parse(stringValue))) { // Date type operators\n operatorValue = operatorValue || this.getOperatorFromMongoOperator(key);\n type = 'date';\n ruleValue = stringValue;\n }\n }\n }\n }\n else if (value && typeof (value) === 'string' && !isNaN(Date.parse(value))) {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'date';\n }\n else if (typeof (value) === 'string' && value !== '' && value !== 'true' && value !== 'false') {\n operatorValue = 'equal';\n ruleValue = value;\n type = 'string';\n }\n else if (typeof (value) === 'string' && value === '') {\n operatorValue = 'isempty';\n ruleValue = value;\n type = 'string';\n }\n if (betweenOperatorArray && betweenOperatorArray.length > 1) { // between opertor value\n rule = { field: condition, label: condition, value: betweenOperatorArray, operator: operatorValue, type: type };\n }\n else if (inOperatorArray && inOperatorArray.length > 1) { // in operator value\n rule = { field: condition, label: condition, value: inOperatorArray, operator: operatorValue, type: type };\n }\n else {\n rule = { field: condition, label: condition, value: ruleValue, operator: operatorValue, type: type };\n }\n rules.push(rule);\n operatorValue = '';\n }\n }\n };\n QueryLibrary.prototype.convertParamSqlToSql = function (sql) {\n var paramSql = sql.sql;\n var paramValues = sql.params;\n var parts = paramSql.split('?');\n var normalSql = parts[0];\n for (var i = 0; i < paramValues.length; i++) {\n normalSql += (typeof (paramValues[i]) === 'string' ? \"'\" + paramValues[i] + \"'\" + parts[i + 1] : paramValues[i] + parts[i + 1]);\n }\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.convertNamedParamSqlToSql = function (sql) {\n var namedParamSql = sql.sql;\n var params = sql.params;\n var normalSql = namedParamSql;\n Object.keys(params).forEach(function (paramName) {\n var paramValue = params[paramName];\n paramName = ':' + paramName;\n normalSql = normalSql.replace(paramName, typeof (paramValue) === 'string' ? \"'\" + paramValue + \"'\" : String(paramValue));\n });\n if (normalSql.length >= 2 && normalSql[0] === '(' && normalSql[normalSql.length - 1] === ')') {\n normalSql = normalSql.slice(1, -1);\n }\n normalSql = normalSql.replace(/!= ''(?! =)/g, 'IS NOT EMPTY').replace(/= ''/g, 'IS EMPTY');\n return normalSql;\n };\n QueryLibrary.prototype.getParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, false);\n return this.getParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['ruleVal']);\n };\n QueryLibrary.prototype.getNamedParameterSql = function (qbrule) {\n var qbRule = extend({}, qbrule, null, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateRuleValue(qbRule, true);\n return this.getNamedParameterSQLVal(this.parent.getSqlFromRules(qbRule), value['namedRuleVal']);\n };\n QueryLibrary.prototype.getParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n QueryLibrary.prototype.getNamedParameterSQLVal = function (content, ruleValue) {\n var replacedString = content.replace(/[%']/g, '');\n return { sql: '(' + replacedString + ')', params: ruleValue };\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n QueryLibrary.prototype.updateRuleValue = function (rule, isNamedParameter) {\n var ruleVal = [];\n var namedRuleVal = {};\n var namedParameters = [];\n return this.updateValue(rule.rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n };\n QueryLibrary.prototype.updateValue = function (rules, isNamedParameter, ruleVal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal, namedParameters) {\n if (isNullOrUndefined(rules)) {\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n }\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].rules) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var value = this.updateValue(rules[i].rules, isNamedParameter, ruleVal, namedRuleVal, namedParameters);\n ruleVal = value['ruleVal'];\n namedRuleVal = value['namedRuleVal'];\n }\n else {\n var namedField = void 0;\n if (rules[i].value instanceof Array) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n for (var j = 0; j < (rules[i].value).length; j++) {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (!isNullOrUndefined(rules[i].value[j])) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n else {\n if (isNamedParameter) {\n namedRuleVal[namedField] = rules[i].value[j];\n }\n else {\n ruleVal.push(rules[i].value[j]);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value[j] = ':' + namedField;\n }\n else {\n rules[i].value[j] = '?';\n }\n }\n }\n else {\n if (isNamedParameter) {\n namedField = this.getNamedParameter(rules[i].field, namedParameters);\n }\n if (rules[i].operator.indexOf('null') < 1) {\n if (rules[i].type !== 'string' || (rules[i].type === 'string' && (rules[i].value !== '' || rules[i].value === 0))) {\n if (rules[i].type === 'string' || rules[i].type === 'date') {\n if (rules[i].operator.indexOf('empty') < 1) {\n var value = rules[i].value.toString();\n switch (rules[i].operator) {\n case 'startswith':\n case 'notstartswith':\n value = value + '%';\n break;\n case 'endswith':\n case 'notendswith':\n value = '%' + value;\n break;\n case 'contains':\n case 'notcontains':\n value = '%' + value + '%';\n break;\n }\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(value);\n }\n }\n else {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = '';\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push('');\n }\n if (rules[i].operator === 'isempty') {\n rules[i].operator = 'equal';\n }\n else {\n rules[i].operator = 'notequal';\n }\n }\n }\n else {\n if (!isNullOrUndefined(rules[i].value)) {\n if (isNamedParameter) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n namedRuleVal[namedField] = rules[i].value;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ruleVal.push(rules[i].value);\n }\n }\n }\n if (isNamedParameter) {\n rules[i].value = ':' + namedField;\n }\n else {\n rules[i].value = '?';\n }\n }\n }\n }\n }\n }\n return { ruleVal: ruleVal, namedRuleVal: namedRuleVal };\n };\n QueryLibrary.prototype.getNamedParameter = function (field, namedParameters) {\n var newField = null;\n if (namedParameters.length > 0) {\n for (var i = namedParameters.length - 1; i >= 0; i--) {\n var currField = namedParameters[i];\n if (currField.indexOf(field) > -1) {\n var idx = parseInt(currField.split('_')[1], 10) + 1;\n newField = field + '_' + idx;\n namedParameters.push(newField);\n break;\n }\n }\n }\n if (!newField) {\n newField = field + '_1';\n namedParameters.push(newField);\n }\n return newField;\n };\n QueryLibrary.prototype.getModuleName = function () {\n return 'query-library';\n };\n return QueryLibrary;\n}());\nexport { QueryLibrary };\n","import * as index from './index';\nindex.QueryBuilder.Inject(index.QueryLibrary);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","Columns","_super","Property","isRequired","min","max","Number","MAX_VALUE","ChildProperty","Rule","Collection","Value","ShowButtons","QueryBuilder","options","element","_this","isReadonly","fields","text","value","updatedRule","not","condition","isLocked","isLocale","isRefreshed","isNotified","isAddSuccess","isNotValueChange","isFieldChange","isFieldClose","isDestroy","isGetNestedData","isCustomOprCols","groupCounter","lockItems","groupIndex","ruleIndex","isLastGroup","cloneGrpBtnClick","isMiddleGroup","cloneRuleBtnClick","MultiSelect","Inject","CheckBoxSelection","getPersistData","addOnPersist","reset","isImportRules","bodyElem","querySelector","inputElement","querySelectorAll","len","className","indexOf","getComponent","destroy","parentElement","innerHTML","grpContainer","createElement","attrs","class","grpHeader","grpBody","appendChild","headerTemplate","isRoot","enableNotCondition","removeClass","levelColl","id","setProperties","rule","rules","disableRuleCondition","getWrapper","getModuleName","requiredModules","modules","push","member","args","GetRootColumnName","field","separator","split","initialize","dataColl","columnKeys","keys","cols","categories","type","groupBy","isDate","validateObj","columns","columnSort","updateCustomOperator","isNaN","Date","parse","getTime","validation","category","l10n","getConstant","operators","customOperators","updateSubFieldsFromColumns","label","updateSubFields","trigger","col","data","sampCol","result","compField","resData","column","from","isNullOrUndefined","this_1","j","sqlIdx","operator_1","operColl","values","map","join","valueIdx","focusEventHandler","event","clickEventHandler","groupID","tagName","animation","Animation","duration","delay","renderSummary","summaryElem","document","getElementById","txtareaElem","animate","name","groupElem","style","display","textContent","getSqlFromRules","height","scrollHeight","actionButton","deleteRule","ruleClone","ruleLock","groupLock","groupClone","closest","deleteGroup","addGroupElement","mRules","extend","setGroupRules","renderSummaryCollapse","forIdValue","getAttribute","targetValue","replace","group","getGroup","ariaChecked","toggleElem","getElementsByClassName","addClass","cancel","toLowerCase","beforeSuccessCallBack","observedChangeArgs","beforeRules","getValidRules","getParentGroup","filterRules","selectBtn","showButtons","groupInsert","maxGroupCount","enableRtl","children","addRuleElement","appendRuleElem","parentId","action","ruleElem","elem","ruleListElem","select","setAttribute","ruleIdCounter","cloneRule","insertBefore","ruleTemplate","requestType","ruleID","ruleTemplateFn","templateParser","templateID","getOperators","operatorFields","isReact","isAngular","templateColl","nodeType","isVue3","append","cloneNode","lockGroup","lockRule","cloneGroup","ruleDelete","renderReactTemplates","isRuleTemplate","isInitialLoad","addRuleSuccessCallBack","trgt","act","pId","isRlTmp","dropDownList","getColumn","newRule","operator","selectedColumn","passedRule","args_1","displayMode","spanElement","classList","add","previousElementSibling","updateAddedRule","fieldMode","ddlField","ddlValue","autoSelectField","dataSource","placeholder","popupHeight","close","fieldClose","bind","change","changeField","open","popupOpen","cssClass","fieldModel","DropDownList","appendTo","ddlVal","getDataByValue","changeRule","itemData","dummyDropdownTreeDs","updateDropdowntreeDS","child","expanded","selectable","showClearButton","changeOnBlur","treeSettings","expandOn","dropdowntree","DropDownTree","getLabelFromColumn","parseInt","toString","index","custom","splice","changeRuleTemplate","operVal","parentGroup","previousColumn","detach","clearQBTemplate","renderToolTip","tooltip","Tooltip","content","isSticky","position","afterClose","beforeOpen","tooltipCloseElement","validateFields","dropDownTreeObj","isValid","allowValidation","excludeOprs","fieldElem","indexElem","valArray","dropDownObj","tempElem","ruleElemCln","validateRule","valElem","jLen","refreshLevelColl","obj","groupElement","level","refreshLevel","childElem","ruleList","iLen","groupCount","slice","groupTemplate","glueElem","inputElem","labelElem","grpActElem","groupBtn","groupHdrElem","grpBodyElem","rulesElem","role","clsName","cloneClsName","lockClsName","filterElem","cloneRuleBtnElem","title","cloneLockBtnElem","delBtnElem","isGroup","isBtnClick","addGroupSuccess","eventTarget","dltGroupBtn","groupIdCounter","headerTemplateFn","andInpElem","orInpElem","andLblElem","orLblElem","btnGroupId","groupDelete","Button","iconCss","rippleEffect","selector","childElems","grpLen","parentNode","addGroups","addRuleToNewGroups","cloneBtnElem","lockBtnElem","lockSpanElement","notElem","args_2","notCondition","undefined","DropDownButton","items","grpId","chgrpId","childGroupID","template","groupHdr","getRuleCollection","headerFn","notifyChange","grpElement","ruleElement","format","getFormat","intl","formatDate","templateChange","updateRules","eventsArgs","grpElem","validateValue","prevOper","arrOper","grpEle","destroyControls","changeValue","isNumInput","contains","currentTarget","dateElement","rbValue","getInstance","NumericTextBox","immediateModeDelay","window","clearInterval","timer","setInterval","filterValue","grID","rlID","ele","changeValueSuccessCallBack","ddl","item","popupObj","getItemData","customArgs","isInteracted","previousItemData","prevItemData","previousItem","e","previousValue","ddtElem","ddt","oldValue","dataBind","destroySubFields","subFieldElem","ddlArgs","tempRule","ddlObj","changeFilter","flt","dl","rl","tmpRl","dArg","selectedField","fieldChangeSuccess","operatorElem","changeOperator","opr","selectedIndex","operatorChangeSuccess","changeRuleValues","tooltipElem","createSubFields","nextElementSibling","remove","subFieldValue","subFilterCounter","ruleId","subField","currOper","prevValue","parentElem","operatorList","oprElem","childElementCount","fieldObj","renderValues","ddlIdx","autoSelectOperator","ddlOperator","operatorModel","isField","popup","divElement","templateDestroy","templateElement","elemId","temp","templateElements","getValue","elementId","elements","getValues","original","fieldColl","dataObj","fieldStr","createNestedObject","lastIndex","k","getDistinctValues","nest","isNested","this_2","forEach","renderMultiSelect","selectedValue","ds","isFetched","isValues","multiSelectValue","dataManager","query","Query","selectedRule","mode","width","closePopup","actionBegin","multiSelectOpen","valueModel","multiSelectModel","multiSelectObj","DataManager","bindMultiSelectData","getMultiSelectData","dummyData","deferred","Deferred","executeQuery","multiselectObj","hideSpinner","createSpinner","showSpinner","then","actual","catch","reject","spinnerElem","Browser","isDevice","processTemplate","container","tempElements","write","setDefaultValue","isArryValue","isNumber","renderStringValue","idx","ruleValElem","selectedVal","columnData","isTemplate","isPublic","txtBox","input","textBoxModel","inputobj","TextBox","minWidth","renderNumberValue","selVal","txtInp","numericTxt","step","numericTextBoxModel","numeric","oninput","processValueString","numArr","strArr","kLen","parseDate","formatOpt","dParser","getDateParser","skeleton","renderControls","isRendered","length_1","processBoolValues","datepick","datePicker","place","formatObj","locale","getLocale","datePickerModel","DatePicker","orgValue","isCheck","radioBtn","checked","radioButtonModel","radiobutton","RadioButton","getOperatorIndex","getPreviousItemData","isRender","filtElem","getElementsByTagName","filtObj","isTempRendered","setColumnTemplate","inputLen","renderTemplate","observedActionArgs","actionBeginSuccessCallBack","Element","columnTemplateFn","valElemColl","updateValues","controlName","radioBtnObj","refresh","selectedDate","isNotTrigger","valueContainer","elementCln","i_1","i_2","ruleValueUpdate","beforeRule","afterRule","JSON","stringify","previousRule","oper","arrOperator","dupSelectedValue","parseFloat","isObject","formatOptions","findGroupByIdx","groupIdx","ruleColl","dupRuleColl","popupElement","unWireEvents","portals","addRules","groups","importRules","initWrapper","trim","summaryView","notGroupRtl","readonly","enableReadonly","buttons","button","contentElem","textElem","styles","editElem","divElem","collapseElem","sortDirection","executeLocal","sortByDesc","sortBy","onChangeNotGroup","checkNotGroup","orgRule","onPropertyChanged","newProp","oldProp","_i","properties_1","enablePersistence","setRules","Internationalization","preRender","getUniqueID","defaultLocale","StartsWith","DoesNotStartWith","EndsWith","DoesNotEndWith","Contains","DoesNotContain","NotLike","Like","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","Between","NotBetween","In","NotIn","Remove","SelectField","SelectOperator","DeleteRule","DeleteGroup","AddGroup","AddCondition","Edit","ValidationMessage","SummaryViewTitle","OtherFields","AND","OR","NOT","SelectValue","IsEmpty","IsNotEmpty","IsNull","IsNotNull","True","False","AddButton","CloneGroup","LockGroup","CloneRule","LockRule","UnlockRule","UnlockGroup","L10n","parser","stringOperator","dateOperator","booleanOperator","numberOperator","equal","notequal","greaterthan","greaterthanorequal","lessthan","in","notin","lessthanorequal","startswith","endswith","between","notbetween","isnull","isnotnull","isempty","isnotempty","notstartswith","notendswith","notcontains","sqlOperators","toUpperCase","render","stringOper","numberOper","concat","executeDataManager","take","initControl","renderComplete","templateCompiler","compile","error","wireEvents","wrapper","EventHandler","keyBoardHandler","isParent","groupLevel","groupId","deleteGroupSuccessCallBack","nextElem","prevElem","removeString","remRule","ruleElemColl","isTemplateRendered","isPlatformTemplate","deleteRuleSuccessCallBack","clnruleElem","err","i_3","lockGrpTarget","keyCode","preventDefault","clearTemplate","count","andElem","orElem","disabled","currentRule","getRules","ruleCondtion","isValidRule","customObj","isQuestion","lockedRule","notValue","getRule","HTMLElement","deleteGroups","groupIdColl","getFilteredRecords","predicate","getPredicate","dataManagerQuery","where","deleteRules","ruleIdColl","getDataManagerQuery","pred","pred2","ruleValue","ignoreCase","and","or","isDateFilter","dateOperColl","matchCase","getDate","isTime","datePredicate","arrayPredicate","Predicate","localeString","cldrData","setTime","date","isStart","setHours","startDate","endDate","nullValue","gte","currDate","setMinutes","setSeconds","isReset","renderGroup","tglBtnElem","renderRule","lockRuleTarget","cloneElem","deleteGroupElems","addRuleGroupElems","removeRuleElems","elems","enableBtnGroup","isDateFunction","dateFunc","getSqlString","enableEscape","queryStr","sqlLocale","valueStr","ruleOpertor","ruleCondition","custOper","isCustom","setRulesFromSql","sqlString","ruleModel","getRulesFromSql","sqlParser","processParser","allowEscape","getParameterizedSql","sql","notify","prop","onPropertyChange","setParameterizedSql","sqlQuery","getParameterizedNamedSql","setParameterizedNamedSql","setMongoQuery","mongoQuery","mongoLocale","getMongoQuery","isCloneRule","parentGroupID","isCloneGroup","str","st","parseSqlStrings","conditions","subOp","regexStr","matchValue","test","RegExp","exec","lastPasrser","checkLiteral","checkNumberLiteral","isClosed","checkCondition","getSingleQuoteString","tempStr","lastParser","secParser","betweenParser","betweenOperator","getOperator","=","!=","<",">","<=",">=","not in","not between","is empty","is null","is not null","is not empty","localeOperator","getTypeFromColumn","l","getLabelFromField","startIdx","fieldName","subRules","lLen","grpCount","numVal","strVal","isLeftOpened","val","substring","pop","getValueFromParser","targetGrpId","filter","lockItem","disableRuleControls","newGroup","disableHeaderControls","updateLockItems","isDisabled","addElem","deleteGrpElem","lockElem","groupContElem","ddlElement","numericElement","textElement","checkboxElement","radioBtnElement","multiSelectElement","deleteElem","enabled","Event","Complex","NotifyPropertyChanges","Component","QueryLibrary","parent","addEventListener","isDestroyed","removeEventListener","on","queryLibrary","off","getMongoFromRules","mongoParser","getParameterSql","getNamedParameterSql","convertParamSqlToSql","convertNamedParamSqlToSql","convertMongoQuery","getOperatorFromMongoOperator","operatorValue","itVal","x","endsWith","mongoList","mongoRecursion","stringValue","betweenValue","keyObj","betweenOperatorArray","inOperatorArray","notBetween","innerObject","firstKey","secondKey","firstValue","innerFirstValue","innerSecondValue","isArray","paramSql","paramValues","params","parts","normalSql","namedParamSql","paramName","paramValue","String","qbrule","qbRule","updateRuleValue","getParameterSQLVal","getNamedParameterSQLVal","isNamedParameter","ruleVal","namedRuleVal","namedParameters","updateValue","namedField","getNamedParameter","newField","currField","index.QueryBuilder","index.QueryLibrary"],"mappings":"iFAAA,IAAIA,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAAsC,WAStC,OARAA,EAAWX,OAAOY,QAAU,SAASC,GACjC,IAAK,GAAIC,GAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAAK,CACjDD,EAAIG,UAAUF,EACd,KAAK,GAAIX,KAAKU,GAAOd,OAAOS,UAAUJ,eAAec,KAAKL,EAAGV,KACzDS,EAAET,GAAKU,EAAEV,IAEjB,MAAOS,KAEKO,MAAMb,KAAMU,YAE5BI,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2H3B,GAAvH4B,EAAIT,UAAUC,OAAQS,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOzB,OAAO4B,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASR,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIV,GAAIO,EAAWJ,OAAS,EAAGH,GAAK,EAAGA,KAASjB,EAAIwB,EAAWP,MAAIY,GAAKD,EAAI,EAAI5B,EAAE6B,GAAKD,EAAI,EAAI5B,EAAEyB,EAAQC,EAAKG,GAAK7B,EAAEyB,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK3B,OAAO+B,eAAeR,EAAQC,EAAKG,GAAIA,GAsB5DK,EAAyB,SAAUC,GAEnC,QAASD,KACL,MAAkB,QAAXC,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAyC/D,MA3CAX,GAAUoC,EAASC,GAInBZ,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,WAAQ,IAC9BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,aAAU,IAChCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,gBAAa,IACnCY,GACIa,cACDF,EAAQvB,UAAW,mBAAgB,IACtCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,eAAY,IAClCY,GACIa,YAAWC,YAAY,EAAMC,IAAK,EAAGC,IAAKC,OAAOC,aAClDP,EAAQvB,UAAW,iBAAc,IACpCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,aAAU,IAChCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,WAAQ,IAC9BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,YAAS,IAC/BY,GACIa,WAAS,OACVF,EAAQvB,UAAW,eAAY,IAClCY,GACIa,WAAS,OACVF,EAAQvB,UAAW,cAAW,IAC1BuB,GACTQ,iBAKEC,EAAsB,SAAUR,GAEhC,QAASQ,KACL,MAAkB,QAAXR,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KA6B/D,MA/BAX,GAAU6C,EAAMR,GAIhBZ,GACIa,WAAS,OACVO,EAAKhC,UAAW,gBAAa,IAChCY,GACIqB,gBAAeD,IAChBA,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,WAAQ,IAC3BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,eAAY,IAC/BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,YAAS,IAC5BY,GACIa,YAAS,IACVO,EAAKhC,UAAW,UAAO,IAC1BY,GACIa,WAAS,OACVO,EAAKhC,UAAW,eAAY,IACxBgC,GACTD,iBAKEG,EAAuB,SAAUV,GAEjC,QAASU,KACL,MAAkB,QAAXV,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAiB/D,MAnBAX,GAAU+C,EAAOV,GAIjBZ,GACIa,WAAS,OACVS,EAAMlC,UAAW,0BAAuB,IAC3CY,GACIa,WAAS,OACVS,EAAMlC,UAAW,uBAAoB,IACxCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,sBAAmB,IACvCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,mBAAgB,IACpCY,GACIa,WAAS,OACVS,EAAMlC,UAAW,uBAAoB,IACjCkC,GACTH,iBAKEI,EAA6B,SAAUX,GAEvC,QAASW,KACL,MAAkB,QAAXX,GAAmBA,EAAOb,MAAMb,KAAMU,YAAcV,KAuB/D,MAzBAX,GAAUgD,EAAaX,GAIvBZ,GACIa,YAAS,IACVU,EAAYnC,UAAW,gBAAa,IACvCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,iBAAc,IACxCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,eAAY,IACtCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,gBAAa,IACvCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,iBAAc,IACxCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,kBAAe,IACzCY,GACIa,YAAS,IACVU,EAAYnC,UAAW,kBAAe,IAClCmC,GACTJ,iBAEEK,EAA8B,SAAUZ,GAExC,QAASY,GAAaC,EAASC,GAC3B,GAAIC,GAAQf,EAAOd,KAAKZ,KAAMuC,EAASC,IAAYxC,IAuBnD,OAtBAyC,GAAMC,YAAa,EACnBD,EAAME,QAAWC,KAAM,QAASC,MAAO,SACvCJ,EAAMK,aAAgBC,KAAK,EAAOC,UAAW,MAAOC,UAAU,GAC9DR,EAAMS,UAAW,EACjBT,EAAMU,aAAc,EACpBV,EAAMW,YAAa,EACnBX,EAAMY,cAAe,EACrBZ,EAAMa,kBAAmB,EACzBb,EAAMc,eAAgB,EACtBd,EAAMe,cAAe,EACrBf,EAAMgB,WAAY,EAClBhB,EAAMiB,iBAAkB,EACxBjB,EAAMkB,mBACNlB,EAAMmB,aAAe,EACrBnB,EAAMoB,aACNpB,EAAMqB,YAAc,EACpBrB,EAAMsB,WAAa,EACnBtB,EAAMuB,aAAc,EACpBvB,EAAMwB,kBAAmB,EACzBxB,EAAMyB,eAAgB,EACtBzB,EAAM0B,mBAAoB,EAC1BC,cAAYC,OAAOC,qBACZ7B,EAmxLX,MA5yLApD,GAAUiD,EAAcZ,GA2BxBY,EAAapC,UAAUqE,eAAiB,WACpC,MAAOvE,MAAKwE,cAAc,UAO9BlC,EAAapC,UAAUuE,MAAQ,WAC3BzE,KAAK0E,eAAgB,CAGrB,KAAK,GAFDC,GAAW3E,KAAKwC,QAAQoC,cAAc,iBACtCC,EAAe7E,KAAKwC,QAAQsC,iBAAiB,mBACxCtE,EAAI,EAAGuE,EAAMF,EAAalE,OAAQH,EAAIuE,EAAKvE,IAC5CqE,EAAarE,GAAGwE,UAAUC,QAAQ,cAAgB,EAClDC,eAAaL,EAAarE,GAAI,WAAW2E,UAEpCN,EAAarE,GAAG4E,cAAcJ,UAAUC,QAAQ,cAAgB,GACrEC,eAAaL,EAAarE,GAAG4E,cAAe,WAAWD,SAG/D,IAAIR,EACAA,EAASU,UAAY,OAEpB,CACD,GAAIC,GAAetF,KAAKuF,cAAc,OAASC,OAASC,MAAO,uBAC3DC,EAAY1F,KAAKuF,cAAc,OAASC,OAASC,MAAO,oBACxDE,EAAU3F,KAAKuF,cAAc,OAASC,OAASC,MAAO,iBAC1DH,GAAaM,YAAYF,GAAWE,YAAYD,GAChD3F,KAAKwC,QAAQoD,YAAYN,GACzBX,EAAW3E,KAAKwC,QAAQoC,cAAc,iBAEtC5E,KAAK6F,gBAAkB7F,KAAK8F,SAC5B9F,KAAKwC,QAAQ6C,UAAY,GACzBrF,KAAK8F,QAAS,GAEd9F,KAAK+F,oBACLC,cAAYhG,KAAKwC,QAAQsC,iBAAiB,gBAAiB,mBAE/DH,EAASiB,YAAY5F,KAAKuF,cAAc,OAASC,OAASC,MAAO,kBACjEzF,KAAKiG,UAAUjG,KAAKwC,QAAQ0D,GAAK,YAAc,GAC/ClG,KAAKmG,eAAgBC,MAAQpD,UAAW,MAAOD,KAAK,EAAOsD,YAAe,GAC1ErG,KAAKsG,qBAAqB3B,EAASS,gBAEvC9C,EAAapC,UAAUqG,WAAa,WAChC,MAAOvG,MAAKwC,SAEhBF,EAAapC,UAAUsG,cAAgB,WACnC,MAAO,iBAEXlE,EAAapC,UAAUuG,gBAAkB,WACrC,GAAIC,KAKJ,OAJAA,GAAQC,MACJC,OAAQ,gBACRC,MAAO7G,QAEJ0G,GAEXpE,EAAapC,UAAU4G,kBAAoB,SAAUC,GACjD,MAAO/G,MAAKgH,UAAYD,EAAME,MAAMjH,KAAKgH,WAAW,GAAKD,GAE7DzE,EAAapC,UAAUgH,WAAa,WAChC,GAAIlH,KAAKmH,SAASxG,OAAQ,CACtB,GAAIyG,GAAa3H,OAAO4H,KAAKrH,KAAKmH,SAAS,IACvCG,KACAC,KACAC,MAAO,GACPC,GAAU,EACVC,GAAS,EACT7E,MAAQ,GACR8E,GAAgB/F,YAAY,EAAMC,IAAK,EAAGC,IAAKC,OAAOC,UAC1D,IAAIhC,KAAK4H,QAAQjH,OAAQ,CACrBX,KAAK6H,YAEL,KAAK,GAAIrH,GAAI,EAAGuE,GADZ6C,EAAU5H,KAAK4H,SACWjH,OAAQH,EAAIuE,EAAKvE,IAC3CR,KAAK8H,qBAAqBF,EAAQpH,GAAI,WACjCoH,EAAQpH,GAAGgH,OACRJ,EAAWnC,QAAQ2C,EAAQpH,GAAGuG,QAAU,IAG3B,YADbS,SADA3E,EAAQ7C,KAAKmH,SAAS,GAAGS,EAAQpH,GAAGuG,SAGhCW,GAAUK,MAAMC,KAAKC,MAAMpF,IAEb,WAAT2E,IACLE,EAAS7E,YAAiBmF,QAASD,MAAMlF,EAAMqF,WAC/CV,EAAO,UAEXI,EAAQpH,GAAGgH,KAAOA,EAClBE,GAAS,GAEbF,EAAO,UAENI,EAAQpH,GAAG2H,aACZP,EAAQpH,GAAG2H,WAAaR,GAExBC,EAAQpH,GAAG4H,SACXX,GAAU,EAGVG,EAAQpH,GAAG4H,SAAWpI,KAAKqI,KAAKC,YAAY,eAE5Cf,EAAWtC,QAAQ2C,EAAQpH,GAAG4H,UAAY,GAC1Cb,EAAWZ,KAAKiB,EAAQpH,GAAG4H,YAE1BR,EAAQpH,GAAG+H,WACXvI,KAAKkD,UAA+D,IAAnDlD,KAAK2D,gBAAgBsB,QAAQ2C,EAAQpH,GAAGuG,UAC1Da,EAAQpH,GAAG+H,UAAYvI,KAAKwI,gBAAgBZ,EAAQpH,GAAGgH,KAAO,YAGlEC,KAAYF,EAAW5G,OAAS,GAAK4G,EAAW,KAAOvH,KAAKqI,KAAKC,YAAY,kBAC7EtI,KAAK2C,QAAWC,KAAM,QAASC,MAAO,QAAS4E,QAAS,aAE5DzH,KAAKyI,2BAA2BzI,KAAK4H,aAEpC,CACD,IAAK,GAAIpH,GAAI,EAAGuE,EAAMqC,EAAWzG,OAAQH,EAAIuE,EAAKvE,IAGjC,YADbgH,SADA3E,EAAQ7C,KAAKmH,SAAS,GAAGC,EAAW5G,MAGhCkH,GAAUK,MAAMC,KAAKC,MAAMpF,IAEb,WAAT2E,GAAsB/H,OAAO4H,KAAKxE,GAAOlC,SAC9C+G,EAAS7E,YAAiBmF,QAASD,MAAMlF,EAAMqF,WAC/CV,EAAO,UAEXF,EAAK9G,IAAOuG,MAASK,EAAW5G,GAAIkI,MAAStB,EAAW5G,GAAIgH,KAAQE,EAAS,OAASF,EAClFW,WAAcR,GAClBD,GAAS,EACTJ,EAAK9G,GAAG+H,UAAYvI,KAAKwI,gBAAgBlB,EAAK9G,GAAGgH,KAAO,YAC3C,WAATA,GACAxH,KAAK2I,gBAAgB9F,EAAOyE,EAAK9G,GAGzCR,MAAK4H,QAAUN,OAGlB,IAAItH,KAAK4H,QAAQjH,OAAQ,CAE1B,IAAK,GADDiH,GAAU5H,KAAK4H,QACVpH,EAAI,EAAGuE,EAAM6C,EAAQjH,OAAQH,EAAIuE,EAAKvE,IACvCoH,EAAQpH,GAAG4H,SACXpI,KAAK2C,QAAWC,KAAM,QAASC,MAAO,QAAS4E,QAAS,YAGxDG,EAAQpH,GAAG4H,SAAWpI,KAAKqI,KAAKC,YAAY,eAEhDtI,KAAK8H,qBAAqBF,EAAQpH,IAC7BoH,EAAQpH,GAAG+H,YAAavI,KAAKkD,WAC9B0E,EAAQpH,GAAG+H,UAAYvI,KAAKwI,gBAAgBZ,EAAQpH,GAAGgH,KAAO,YAGtExH,MAAKyI,2BAA2BzI,KAAK4H,SAEzC5H,KAAK4I,QAAQ,aAAepB,KAAM,eAEtClF,EAAapC,UAAUuI,2BAA6B,SAAUI,EAAK9B,GAC/D,IAAK,GAAIvG,GAAI,EAAGA,EAAIqI,EAAIlI,OAAQH,IACL,KAAnBR,KAAKgH,WAAoB6B,EAAIrI,GAAGuG,MAAM9B,QAAQjF,KAAKgH,WAAa,IAChE6B,EAAIrI,GAAGuG,MAAQA,EAAQA,EAAQ/G,KAAKgH,UAAY6B,EAAIrI,GAAGuG,MAAQ8B,EAAIrI,GAAGuG,OAEtE8B,EAAIrI,GAAG+H,UACPvI,KAAK8H,qBAAqBe,EAAIrI,IAEzBqI,EAAIrI,GAAGgH,MAAwB,WAAhBqB,EAAIrI,GAAGgH,OAC3BqB,EAAIrI,GAAG+H,UAAYvI,KAAKwI,gBAAgBK,EAAIrI,GAAGgH,KAAO,aAEtDqB,EAAIrI,GAAGoH,UACPiB,EAAIrI,GAAGgH,KAAO,SACdxH,KAAKyI,2BAA2BI,EAAIrI,GAAGoH,QAASiB,EAAIrI,GAAGuG,SAInEzE,EAAapC,UAAUyI,gBAAkB,SAAU9F,EAAOgG,EAAKC,GAC3D,GAAIC,EACJF,GAAIjB,UACJ,IAGIJ,GACAwB,EAJA5B,EAAa3H,OAAO4H,KAAKxE,EAK7BiG,GAAOA,GAAc9I,KAAKmH,SAAS,EACnC,KAAK,GAAI3G,GAAI,EAAGuE,EAAMqC,EAAWzG,OAAQH,EAAIuE,EAAKvE,IAAK,CACnD,GAAIyI,GAAYJ,EAAI9B,MAAME,MAAM,IAE5B+B,GADAF,EACSA,EAAKG,EAAUA,EAAUtI,OAAS,IAAIyG,EAAW5G,IAGjDR,KAAKmH,SAAS,GAAG0B,EAAI9B,OAAOK,EAAW5G,GAEpD,IAAI0I,GAAUJ,EAAKD,EAAI9B,MAAME,MAAMjH,KAAKgH,WAAW6B,EAAI9B,MAAME,MAAMjH,KAAKgH,WAAWrG,OAAS,GAC5F6G,SAAcwB,GAIdD,GAAYhC,MAHJ8B,EAAI9B,MAAQ/G,KAAKgH,UAAYI,EAAW5G,GAGtBkI,MAFlBtB,EAAW5G,GAEqBgH,KADxCA,EAAiB,WAATA,GAAsBO,MAAMC,KAAKC,MAAMe,IAAqBxB,EAAT,QAE9C,WAATA,IACAuB,EAAQR,UAAYvI,KAAKwI,gBAAgBhB,EAAO,aAEpDqB,EAAIjB,QAAQjB,KAAKoC,GACJ,WAATvB,GACAxH,KAAK2I,gBAAgBK,EAAQD,EAASG,KAIlD5G,EAAapC,UAAU4H,qBAAuB,SAAUqB,EAAQC,GAC5D,GAAID,EAAOZ,UAAW,CACbvI,KAAKkD,UAAqB,YAATkG,GAAuBC,oBAAkBrJ,KAAK2D,kBAChE3D,KAAK2D,gBAAgBgD,KAAKwC,EAAOpC,MAarC,KAAK,GADDuC,GAAStJ,KACJuJ,EAAI,EAAGA,EAAIJ,EAAOZ,UAAU5H,OAAQ4I,KAX/B,SAAUA,GACpB,GAAIC,GAAS/J,OAAO4H,KAAK8B,EAAOZ,UAAUgB,IAAItE,QAAQ,cACtD,IAAIuE,GAAU,EAAG,CACb,GAAIC,GAAaN,EAAOZ,UAAUgB,GAC9BG,EAAWjK,OAAO4H,KAAKoC,GACvBE,EAASD,EAASE,IAAI,SAAU3I,GAAO,MAAOwI,GAAW,GAAKxI,KAAS4I,KAAK,KAAK5C,MAAM,KACvF6C,EAAWJ,EAASzE,QAAQ,QAChCqE,GAAOf,UAAUoB,EAAOG,IAAaH,EAAOH,KAKxCD,KAIpBjH,EAAapC,UAAU6J,kBAAoB,SAAUC,GACjDhK,KAAKgB,OAASgJ,EAAMhJ,QAExBsB,EAAapC,UAAU+J,kBAAoB,SAAUD,GACjD,GAEInD,GAFApE,EAAQzC,KACRgB,EAASgJ,EAAMhJ,MAEnBhB,MAAK0E,eAAgB,CACrB,IAAIwF,EAIJ,IAHuB,SAAnBlJ,EAAOmJ,UACPnJ,EAASA,EAAOoE,eAEhBpE,EAAOgE,UAAUC,QAAQ,oBAAsB,EAAG,CAClD,GAAImF,GAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,GACnDvK,MAAKwC,QAAQsC,iBAAiB,sBAAsBnE,OAAS,GAC7DX,KAAKwK,eAET,IAAIC,GAAcC,SAASC,eAAe3K,KAAKwC,QAAQ0D,GAAK,oBACxD0E,EAAcH,EAAY7F,cAAc,kBAC5CwF,GAAUS,QAAQ,oBAAsBC,KAAM,iBAC1CC,EAAY/K,KAAKwC,QAAQoC,cAAc,uBACjCoG,MAAMC,QAAU,OAC1BL,EAAYM,YAAclL,KAAKmL,gBAAgBnL,KAAKoG,MACpDqE,EAAYO,MAAMC,QAAU,QAC5BL,EAAYI,MAAMI,OAASR,EAAYS,aAAe,KAE1D,GAAuB,WAAnBrK,EAAOmJ,SAAwBnJ,EAAOgE,UAAUC,QAAQ,eAAiB,EACzE,QAAQ,GACJ,IAAKjE,GAAOgE,UAAUC,QAAQ,iBAAmB,EAC7CjF,KAAKsL,aAAetK,EACpBhB,KAAKuL,WAAWvK,EAChB,MACJ,KAAKA,GAAOgE,UAAUC,QAAQ,qBAAuB,EACjDjF,KAAKsL,aAAetK,EACpBhB,KAAKmE,mBAAoB,EACzBnE,KAAKwL,UAAUxK,EACf,MACJ,KAAKA,GAAOgE,UAAUC,QAAQ,oBAAsB,EAChDjF,KAAKsL,aAAetK,EACpBhB,KAAKyL,SAASzK,EACd,MACJ,KAAKA,GAAOgE,UAAUC,QAAQ,mBAAqB,EAC/CjF,KAAKsL,aAAetK,EACpBhB,KAAK0L,UAAU1K,EACf,MACJ,KAAKA,GAAOgE,UAAUC,QAAQ,oBAAsB,EAChDjF,KAAKsL,aAAetK,EACpBhB,KAAKiE,kBAAmB,EACxBjE,KAAK2L,WAAWC,UAAQ5K,EAAQ,sBAChC,MACJ,KAAKA,GAAOgE,UAAUC,QAAQ,kBAAoB,EAC9CjF,KAAKsL,aAAetK,EACpBhB,KAAK6L,YAAYD,UAAQ5K,EAAQ,sBACjC,MACJ,KAAKA,GAAOgE,UAAUC,QAAQ,gBAAkB,EAI5C,IAHImF,EAAY,GAAIC,cAAYC,SAAU,IAAMC,MAAO,KAC7CM,QAAQ,oBAAsBC,KAAM,gBAC9CJ,SAASC,eAAe3K,KAAKwC,QAAQ0D,GAAK,oBAAoB8E,MAAMC,QAAU,OAC1EjL,KAAKwC,QAAQsC,iBAAiB,sBAAsBnE,OAAS,EAAG,CAChEX,KAAK8L,iBAAgB,EAAO9L,KAAKwC,QAASxC,KAAKoG,KAAKpD,WAAW,EAAOhD,KAAKoG,KAAKrD,IAChF,IAAIgJ,GAASC,YAAWhM,KAAKoG,SAAU,EACvCpG,MAAKiM,cAAcF,GACnB/L,KAAKkM,4BAEJ,CACD,GAAInB,GAAY/K,KAAKwC,QAAQoC,cAAc,qBACvCmG,GAAUjG,iBAAiB,oBAAoBnE,OAAS,GACxDX,KAAKkM,wBAETnB,EAAUC,MAAMC,QAAU,aAKrC,IAAwB,UAAnBjK,EAAOmJ,SAAuBnJ,EAAOoE,cAAcJ,UAAUC,QAAQ,gBAAkB,GAC7FjE,EAAOgE,UAAUC,QAAQ,gBAAkB,EAAG,CAC9C,GAAIzC,GAAUoJ,UAAQ5K,EAAQ,qBAC9B,KAAKhB,KAAK6F,eAAgB,CACtB,GAAIsG,GAAanL,EAAOoL,aAAa,OACjCC,MAAc,EACdF,KACAE,EAAc3B,SAASC,eAAewB,GAAYC,aAAa,UAEnElC,EAAU1H,EAAQ0D,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,GACpD,IAAIqG,GAAQvM,KAAKwM,SAAStC,GACtBuC,MAAc,EAClB,IAAIzM,KAAK+F,mBACL,GAAI/E,EAAOgE,UAAUC,QAAQ,gBAAkB,EAAG,CAC9C,GAAIyH,GAAalK,EAAQmK,uBAAuB,eAAe,EAC3DD,GAAW1H,UAAUC,QAAQ,oBAAsB,GACnDe,eAAa0G,GAAa,mBAC1BD,GAAc,IAGdG,YAAUF,GAAa,mBACvBD,GAAc,GAElBJ,EAAcE,EAAMvJ,cAGpByJ,GAAcF,EAAMxJ,GAG5B8D,IAASqD,QAASA,EAAS2C,QAAQ,EAAOrF,KAAM,YAAa3E,MAAOwJ,EAAYS,eAC5E9M,KAAK+F,qBACLc,GAASqD,QAASA,EAAS2C,QAAQ,EAAOrF,KAAM,YAAa3E,MAAOwJ,EAAYS,cAC5E/J,IAAO0J,IAGdzM,KAAK0E,cAMN1E,KAAK+M,sBAAsBlG,EAAM7F,GALjChB,KAAK4I,QAAQ,eAAgB/B,EAAM,SAAUmG,GACzCvK,EAAMsK,sBAAsBC,EAAoBhM,KAMxDhB,KAAKgB,OAASA,IAGtBsB,EAAapC,UAAU6M,sBAAwB,SAAUlG,EAAM7F,GAC3D,GAAI6F,IAASA,EAAKgG,OAAQ,CACtB,GAAIrK,GAAUoJ,UAAQ5K,EAAQ,sBAC1BkJ,EAAU1H,EAAQ0D,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACpD+G,EAAcjN,KAAKkN,cAAclN,KAAKoG,MACtCA,EAAOpG,KAAKmN,eAAe3K,EAC/B4D,GAAKpD,UAAY6D,EAAKhE,MAClB7C,KAAK+F,qBACLK,EAAKrD,IAAM8D,EAAK9D,KAEf/C,KAAK0E,eACN1E,KAAK4I,QAAQ,UAAYsB,QAASA,EAAS1C,KAAM,YAAa3E,MAAOuD,EAAKpD,YAE9EhD,KAAKoN,YAAYH,EAAajN,KAAKkN,cAAclN,KAAKoG,MAAO,eAGrE9D,EAAapC,UAAUmN,UAAY,SAAUrM,EAAQgJ,GAC9B,eAAfA,EAAMc,KACF9K,KAAKsN,YAAYC,aAAelE,oBAAkBrJ,KAAKsN,YAAYC,cAC/DvN,KAAKwC,QAAQsC,iBAAiB,sBAAsBnE,QAAUX,KAAKwN,cAAgB,EACnFZ,YAAU5C,EAAMxH,QAAQoC,cAAc,sBAAsBQ,eAAgB,iBAG5EY,eAAagE,EAAMxH,QAAQoC,cAAc,sBAAsBQ,eAAgB,iBAE/EpF,KAAKyN,WACLb,YAAU5C,EAAMxH,QAAQoC,cAAc,MAAMQ,eAAgB,UAIhEwH,YAAU5C,EAAMxH,QAAQoC,cAAc,sBAAsBQ,eAAgB,iBAG3E4E,EAAMxH,QAAQkL,SAAS,GAAG1I,UAAUC,QAAQ,cAAgB,EACjEjF,KAAK2N,eAAe/B,UAAQ5K,EAAQ,0BAE/BgJ,EAAMxH,QAAQkL,SAAS,GAAG1I,UAAUC,QAAQ,eAAiB,GAClEjF,KAAK8L,iBAAgB,EAAMF,UAAQ5K,EAAQ,sBAAuB,IAAI,IAG9EsB,EAAapC,UAAU0N,eAAiB,SAAU5M,EAAQmI,EAAQ3B,EAAMqG,EAAUC,EAAQ1H,GACtF,GAAI2H,GACAC,EAEAnH,EADAoH,EAAejN,EAAO4D,cAAc,eAsBxC,IApBa,WAAT4C,EACAuG,EAAWG,SAAO,IAAML,EAAU7M,KAGlC+M,EAAW/N,KAAKuF,cAAc,OAASC,OAASC,MAAO,uBAC9C0I,aAAa,KAAMnN,EAAOkF,GAAK,QAAUlG,KAAKoO,eACnDpO,KAAKsN,YAAYe,WAAarO,KAAKmE,mBAC/BnE,KAAK+D,UAAY,EACjBkK,EAAarI,YAAYmI,GAGzBE,EAAaK,aAAaP,EAAUE,EAAaP,SAAS1N,KAAK+D,UAAY,IAE/E/D,KAAKmE,mBAAoB,GAGzB8J,EAAarI,YAAYmI,GAE7B/N,KAAKoO,iBAELjF,GAAUA,EAAOoF,cAAgBnI,EAAM,CACvCS,GAAS2H,YAAa,sBAAuBC,OAAQV,EAAS7H,GAAI4H,OAAQA,EAAQnL,OAAQ3C,KAAK2C,OAAQyD,KAAMA,GAC7GpG,KAAK4I,QAAQ,cAAe/B,GAC5B7G,KAAK0O,eAAiB1O,KAAK2O,eAAexF,EAAOoF,aACjD,IAAIK,GAAa5O,KAAKwC,QAAQ0D,GAAKiD,EAAOpC,KAU1C,IARAF,EAAKlE,OAAS3C,KAAK2C,OACnBkE,EAAKe,QAAU5H,KAAK4H,QACD,KAAfxB,EAAKW,QACLX,EAAKW,MAAQoC,EAAOpC,OAExBF,EAAK0B,UAAYvI,KAAK6O,aAAazI,EAAKW,OACxCF,EAAKiI,gBAAmBlM,KAAM,MAAOC,MAAO,SAExC7C,KAAK+O,SAELf,EADWhO,KAAK0O,eAAe7H,EAAM7G,KAAM+N,EAAS7H,GAAI0I,GAAY,IAE/D5J,WAAa,gBAClB+I,EAASnI,YAAYoI,OAGpB,IAAIhO,KAAKgP,UAAW,CACrB,GAAIC,GAAejP,KAAK0O,eAAe7H,EAAM7G,KAAM+N,EAAS7H,GAAI0I,IAEhEZ,EADyC,IAA7BiB,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,IAExEjK,WAAa,gBAClB+I,EAASnI,YAAYoI,OAGhBhO,MAAKmP,QAEVnB,EADWhO,KAAK0O,eAAe7H,EAAM7G,KAAM,WAAY4O,GAGvDQ,SAAOpB,EAAMD,GACbA,EAASL,SAASK,EAASL,SAAS/M,OAAS,GAAGqE,WAAa,mBAI7DgJ,EADWhO,KAAK0O,eAAe7H,EAAM7G,KAAM,WAAY4O,GAAY,IAE9D5J,WAAa,gBAClB+I,EAASnI,YAAYoI,QAIzBA,GAAOhO,KAAK+N,SAASnJ,cAAc,iBAAiByK,WAAU,GAC9DtB,EAASnI,YAAYoI,EAoBzB,OAlBIhO,MAAKsN,YAAYgC,WACjBtJ,cAAY+H,EAASjJ,iBAAiB,mBAAoB,iBAE1D9E,KAAKsN,YAAYiC,UACjBvJ,cAAY+H,EAASjJ,iBAAiB,oBAAqB,iBAE3D9E,KAAKsN,YAAYkC,YACjBxJ,cAAY+H,EAASjJ,iBAAiB,oBAAqB,iBAE3D9E,KAAKsN,YAAYe,WACjBrI,cAAY+H,EAASjJ,iBAAiB,qBAAsB,iBAE5D9E,KAAKsN,YAAYmC,YACjBzJ,cAAY+H,EAASjJ,iBAAiB,mBAAoB,iBAE1DqE,GAAUA,EAAOoF,cAAgBnI,GACjCpG,KAAK0P,uBAEF3B,GAEXzL,EAAapC,UAAUyN,eAAiB,SAAU3M,EAAQoF,EAAM+C,EAAQ2E,EAAQD,EAAU8B,GACtF,GAAIlN,GAAQzC,IACZ,IAAKgB,EAAL,CAGA,GAAI6F,IAASqD,QAASlJ,EAAOkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAAK2G,QAAQ,EAAOrF,KAAM,aACpFxH,MAAK0E,eAAkB1E,KAAK4P,eAM7B5P,KAAK4P,eAAgB,EACrB5P,KAAK6P,uBAAuBhJ,EAAM7F,EAAQoF,EAAM+C,EAAQ2E,EAAQD,EAAU8B,IAN1E3P,KAAK4I,QAAQ,eAAgB/B,EAAM,SAAUmG,GACzCvK,EAAMoN,uBAAuB7C,EAAoBhM,EAAQoF,EAAM+C,EAAQ2E,EAAQD,EAAU8B,OAQrGrN,EAAapC,UAAU2P,uBAAyB,SAAUhJ,EAAMiJ,EAAM1J,EAAMyC,EAAKkH,EAAKC,EAAKC,GACvF,GACIxB,GAEAlG,EACA2H,EACAnC,EALA3C,EAAUpL,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,EAAK,QAAU,QAEvEkE,EAAU/C,GAAQA,EAAKW,MAAS/G,KAAKmQ,UAAU/J,EAAKW,OAAS8B,GAAY7I,KAAK4H,QAAQ,GAItFwI,GAAY1H,MAAS,GAAI3B,MAAS,GAAIS,KAAQ,GAAI6I,SAAY,GAClE,KAAKxJ,EAAKgG,OAAQ,CACd,GAAI1D,GAAUA,EAAOoF,cAAgBnI,EAAKW,MAAO,CAC7C/G,KAAKsQ,eAAiBnH,EACtBZ,EAAYvI,KAAKsQ,eAAe/H,UAChC6H,GAAY1H,MAASS,EAAOT,MAAO3B,MAASoC,EAAOpC,MAAOS,KAAQ2B,EAAO3B,KAAM6I,SAAY9H,EAAU,GAAG1F,MACxG,IAAI0N,GAAa9Q,OAAO4H,KAAKjB,GAAMzF,OAASyF,EAAOgK,EAE/CI,GAAWhC,YAAa,kBAAmBV,OAAQ,cAAeW,QADtEV,EAAW/N,KAAK4N,eAAekC,EAAM3G,EAAQ4G,EAAKC,EAAK,QAASO,IACuBrK,GACnFvD,OAAQ3C,KAAK2C,OAAQyD,KAAMmK,EAC/BvQ,MAAK4I,QAAQ,cAAe4H,OAE3B,EACDzC,EAAW/N,KAAK4N,eAAekC,EAAM3G,EAAQ4G,EAAKC,EAAK,UAC9CpL,cAAc,mBAAmBuJ,aAAa,KAAMJ,EAAS7H,GAAK,aAC3E,IAAI1D,GAAUuL,EAASnJ,cAAc,iBACrC,IAAI5E,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,GAA0B,aAArBjF,KAAKyQ,YACxDjO,EAAQ0I,YAAclL,KAAKqI,KAAKC,YAAY,UAC5CsE,YAAUpK,GAAU,UACpBoK,YAAUpK,GAAU,iBAEnB,CACDoK,YAAUpK,GAAU,WACpBoK,YAAUpK,GAAU,cACpBA,EAAQ2L,aAAa,QAASnO,KAAKqI,KAAKC,YAAY,cACpD,IAAIoI,GAAc1Q,KAAKuF,cAAc,QAAUC,OAASC,MAAO,qCAC/DsI,GAASnJ,cAAc,kBAAkBgB,YAAY8K,GAEpD1Q,KAAKsN,YAAYmC,YAClBjN,EAAQmO,UAAUC,IAAI,iBAwB9B,GArByB,aAArB5Q,KAAKyQ,aAA8BzQ,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,EACjF8I,EAAS/I,UAAY,mCAGrB+I,EAAS/I,UAAY,qCAErB+I,EAAS8C,wBAA0B9C,EAAS8C,uBAAuB7L,UAAUC,QAAQ,qBAAuB,IACxG8I,EAAS/I,UAAUC,QAAQ,iBAAmB,IAC9C8I,EAAS/I,WAAa,kBAEtB+I,EAAS8C,uBAAuB7L,UAAUC,QAAQ,sBAAwB,IAC1E8I,EAAS8C,uBAAuB7L,WAAa,wBAGjD+I,EAAS8C,wBAA0B9C,EAAS8C,uBAAuB7L,UAAUC,QAAQ,sBAAwB,GAC7G8I,EAAS/I,UAAUC,QAAQ,mBAAqB,IAChD8I,EAAS/I,WAAa,oBAErBhF,KAAK0E,eACN1E,KAAK8Q,gBAAgBhB,EAAM1J,EAAMgK,EAASH,EAASD,IAElD7G,GAAWA,IAAWA,EAAOoF,eAAkBnI,EAAKW,MACrD,GAAuB,YAAnB/G,KAAK+Q,UAAyB,CAC9B,GAAIC,OAAW,GACXC,MAAW,EAEXA,GADAjR,KAAKgH,WAAaZ,EAAKW,MACZ/G,KAAK8G,kBAAkBV,EAAKW,OAElC/G,KAAKkR,gBACClR,KAAK8G,kBAAkBV,EAAKW,OAG5B/G,KAAK0E,cAAgB1E,KAAK8G,kBAAkBV,EAAKW,OAASX,EAAKW,MAE9EiK,GACIG,WAAYnR,KAAK4H,QACjBjF,OAAQ3C,KAAK2C,OAAQyO,YAAapR,KAAKqI,KAAKC,YAAY,eACxD+I,YAAerR,KAAK4H,QAAQjH,OAAS,EAAKyK,EAAS,OAASkG,MAAOtR,KAAKuR,WAAWC,KAAKxR,KAAM+N,EAAS7H,GAAK,cAC5GuL,OAAQzR,KAAK0R,YAAYF,KAAKxR,MAAO6C,MAAOuD,EAAO6K,EAAW,KAAMU,KAAM3R,KAAK4R,UAAUJ,KAAKxR,MAAM,GAAO6R,SAAU,mBAErH7R,KAAK8R,aACLd,EAAW5Q,KAAa4Q,EAAUhR,KAAK8R,cAE3C5B,EAAe,GAAI6B,gBAAaf,IACnBgB,SAAS,IAAMjE,EAAS7H,GAAK,aACtC+L,OAAS,EAETA,GADAjS,KAAKgH,WAAaZ,EAAKW,MACd/G,KAAK8G,kBAAkBV,EAAKW,OAG5B/G,KAAK0E,cAAgB1E,KAAK8G,kBAAkBV,EAAKW,OAASmJ,EAAarN,MAEpF7C,KAAKsQ,eAAiBJ,EAAagC,eAAeD,GAC9CxS,OAAO4H,KAAKjB,GAAMzF,QAClBX,KAAKmS,WAAW/L,GACZ5D,QAAS0N,EAAa1N,QAAS4P,SAAUpS,KAAKsQ,qBAIrD,CACD,GAAIU,OAAW,GACXC,GAAWjR,KAAK0E,cAAgB0B,EAAKW,MACzC/G,MAAKqS,oBAAsBrG,YAAWhM,KAAK4H,YAAa,GACxD5H,KAAKsS,qBAAqBtS,KAAKqS,qBAC/BrB,GACIrO,QAAUwO,WAAYnR,KAAKqS,oBACvBxP,MAAO,QAASD,KAAM,QAAS2P,MAAO,UAAWC,SAAU,WAAYC,WAAY,cACvFrB,YAAapR,KAAKqI,KAAKC,YAAY,eAAgBoK,iBAAiB,EACpErB,YAAerR,KAAK4H,QAAQjH,OAAS,EAAKyK,EAAS,OAASuH,cAAc,EAC1ElB,OAAQzR,KAAK0R,YAAYF,KAAKxR,MAAO6C,MAAQwG,oBAAkB4H,GAAyB,MAAZA,GAC5EU,KAAM3R,KAAK4R,UAAUJ,KAAKxR,MAAM,GAAQ4S,cAAgBC,SAAU,SAClEhB,SAAU,YAEV7R,KAAK8R,aACLd,EAAW5Q,KAAa4Q,EAAUhR,KAAK8R,YAE3C,IAAIgB,GAAe,GAAIC,gBAAa/B,EAEpC,IADA8B,EAAad,SAAS,IAAMjE,EAAS7H,GAAK,eACrCmD,oBAAkByJ,EAAajQ,OAAQ,CACxC,GAAIA,GAAQ7C,KAAKgT,mBAAmBF,EAAajQ,MAAM,GACvDiQ,GAAatQ,QAAQK,MAAQA,EAGjC,GAAIoP,GAAU5I,oBAAkBjD,EAAKW,OACI+L,EAAajQ,MAAlD7C,KAAK8G,kBAAkBV,EAAKW,MAChC/G,MAAKsQ,eAAiBtQ,KAAKmQ,UAAU8B,GACjCxS,OAAO4H,KAAKjB,GAAMzF,QAClBX,KAAKmS,WAAW/L,GACZ5D,QAASsQ,EAAatQ,QAAS4P,SAAUpS,KAAKsQ,iBAK9D7B,EAASV,EAAS7H,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAC/ClG,KAAK0E,eACN1E,KAAK4I,QAAQ,UAAYsB,QAAS4F,EAAK5J,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAAKuI,OAAQA,EAAQjH,KAAM,iBAIhHlF,EAAapC,UAAUoS,qBAAuB,SAAU1K,GACpD,IAAK,GAAIpH,GAAI,EAAGA,EAAIoH,EAAQjH,OAAQH,IACiB,WAA7CoH,EAAQqL,SAASzS,EAAE0S,WAAY,KAAK1L,OACpCI,EAAQqL,SAASzS,EAAE0S,WAAY,KAAKT,YAAa,EACjDzS,KAAKsS,qBAAqB1K,EAAQqL,SAASzS,EAAE0S,WAAY,KAAKtL,WAI1EtF,EAAapC,UAAU4Q,gBAAkB,SAAU9P,EAAQoF,EAAMgK,EAAST,EAAgBK,GACtF,GAAIjC,GAEAhD,EACA1E,EAFA8M,EAAQ,CAGZ,IAAIxD,EAAgB,CAIhB,IAHA5B,EAAWG,SAAO,IAAM8B,EAAKhP,GAC7B+J,EAAYa,UAAQ5K,EAAQ,sBAC5BqF,EAAQrG,KAAKmN,eAAepC,GACrBgD,GAAgD,OAApCA,EAAS8C,wBACxB9C,EAAWA,EAAS8C,uBACpBsC,GAEJ9M,GAAMA,MAAM8M,GAAS/M,MAEpB,CACD2E,EAAYa,UAAQ5K,EAAQ,sBAC5BqF,EAAQrG,KAAKmN,eAAepC,EAE5B,IAAIqI,GAAShN,EAAKgN,MACd3T,QAAO4H,KAAKjB,GAAMzF,OACdX,KAAK+D,UAAY,GACjBsC,EAAMA,MAAMM,MACRI,MAASX,EAAKW,MAAOS,KAAQpB,EAAKoB,KAAMkB,MAAStC,EAAKsC,MAAO2H,SAAYjK,EAAKiK,SAAUxN,MAAOuD,EAAKvD,QAEpGuQ,IAEA/M,EAAMA,MAAMA,EAAMA,MAAM1F,OAAS,GAAGyS,OAASA,KAIjD/M,EAAMA,MAAMgN,OAAOrT,KAAK+D,UAAY,EAAG,GACnCgD,MAASX,EAAKW,MAAOS,KAAQpB,EAAKoB,KAAMkB,MAAStC,EAAKsC,MAAO2H,SAAYjK,EAAKiK,SAAUxN,MAAOuD,EAAKvD,QAEpGuQ,IAEA/M,EAAMA,MAAMrG,KAAK+D,UAAY,GAAGqP,OAASA,KAK7CA,IAEAhD,EAAQgD,OAASA,GAEjBpT,KAAKkR,kBACL9K,EAAKW,MAAQqJ,EAAQrJ,MAAQ/G,KAAKoG,KAAKC,MAAM,GAAGU,OAEpDV,EAAMA,MAAMM,KAAKyJ,IAGzBpQ,KAAKsG,qBAAqBtF,EAAQqF,IAEtC/D,EAAapC,UAAUoT,mBAAqB,SAAUnK,EAAQ3G,GAC1D,GAAI+Q,GAAUvT,KAAKsQ,eAAe/H,SAClC,KAAIY,EAAOoF,aAAX,CAII,GAAIiF,GAAc5H,UAAQpJ,EAAS,sBAC/BqL,EAAWjC,UAAQpJ,EAAS,qBAAqB0D,EAKrD,IAJIlG,KAAKyT,gBAAkBzT,KAAKyT,eAAelF,eAC3CmF,SAAOlR,EAAQoJ,QAAQ,QAAUiC,EAAW,MAAMjJ,cAAc,kBAChE5E,KAAK2T,iBAAiB9F,KAEtB1E,EAAQ,CACR,GAAI/C,IAASW,MAAOoC,EAAOpC,MAAO2B,MAAOS,EAAOT,MAAO2H,SAAUkD,EAAQ,GAAG1Q,MAAOA,MAAO,GAC1F7C,MAAK2N,eAAe6F,EAAapN,EAAM+C,EAAQ,SAAU0E,GAAU,MAI/EvL,EAAapC,UAAU0T,cAAgB,SAAUpR,GAC7C,GAAIqR,GAAU,GAAIC,YAAUC,QAAS/T,KAAKqI,KAAKC,YAAY,qBAAsB0L,UAAU,EACvFC,SAAU,eAAgBpC,SAAU,uBAAwBqC,WAAY,WACpEL,EAAQ1O,WACTgP,WAAY,SAAUtN,GACrB,GAAIuN,GAAsBvN,EAAKrE,QAAQoC,cAAc,mBACjDwP,KACAA,EAAoBpJ,MAAMC,QAAU,UAGhD4I,GAAQ7B,SAASxP,GACjBqR,EAAQlC,KAAKnP,IAOjBF,EAAapC,UAAUmU,eAAiB,WACpC,GACIC,GADAC,GAAU,CAEd,IAAIvU,KAAKwU,gBAAiB,CACtB,GAAIC,IAAe,SAAU,YAAa,UAAW,cACjDjU,MAAI,GACJuE,MAAM,GACN2P,MAAY,GACZC,MAAY,GACZC,KACA7J,MAAY,GACZoI,MAAQ,GACR0B,MAAc,GACdC,MAAW,GACX1O,MAAO,GACP2O,EAAc/U,KAAKwC,QAAQsC,iBAAiB,oBAChD,KAAKtE,EAAI,EAAGuE,EAAMgQ,EAAYpU,OAAQH,EAAIuE,EAAKvE,IAAK,CAChD,GAAIwU,OAAe,EAoBnB,IAnBAjK,EAAYa,UAAQmJ,EAAYvU,GAAI,sBACpC4F,EAAOpG,KAAKmN,eAAepC,GAC3BoI,EAAQ,EACRwB,EAAYG,EAAWC,EAAYvU,GACZ,iBAAnBR,KAAK+Q,WACLuD,EAAkBpP,eAAa6P,EAAYvU,GAAGoE,cAAc,uCAAwC,kBAC7E0P,EAAgBzR,OAASyR,EAAgBzR,MAAMlC,SAClEX,KAAKsQ,eAAiBtQ,KAAKmQ,UAAUmE,EAAgBzR,MAAM,IAC3DmS,EAAehV,KAAKsQ,eAAenI,aAIvC0M,EAAc3P,eAAa6P,EAAYvU,GAAGoE,cAAc,uCAAwC,kBAC7EiQ,EAAYhS,QAC3B7C,KAAKsQ,eAAiBuE,EAAY3C,eAAe2C,EAAYhS,OAC7DmS,GAAgB3L,oBAAkBwL,EAAY1B,QAAUnT,KAAKsQ,eAAenI,YAGpFuM,EAAYI,EAASlQ,cAAc,iCAC/BoQ,GAAgBA,EAAapT,WAAY,CACzC,KAAO+S,GAAkD,OAArCA,EAAU9D,wBAC1B8D,EAAYA,EAAU9D,uBACtBsC,GAYJ,IAVAuB,EAAYI,EAASlQ,cAAc,+BAC9BwB,EAAKC,MAAM8M,GAAO9C,WACfqE,EAAUtP,cAAcJ,UAAUC,QAAQ,aAAe,GAAKyP,EAAU1P,UAAUC,QAAQ,aAAe,GACzGjF,KAAK4T,cAAcc,EAAUtP,eAEjCmP,GAAU,GAEVnO,EAAKC,MAAM8M,GAAOtQ,gBAAiBjD,SACnCgV,EAAWxO,EAAKC,MAAM8M,GAAOtQ,OAE7B4R,EAAYxP,QAAQmB,EAAKC,MAAM8M,GAAO9C,WAAa,GAClDhH,oBAAkBjD,EAAKC,MAAM8M,GAAOtQ,QACN,SAA3BuD,EAAKC,MAAM8M,GAAO3L,MAAgD,KAA5BpB,EAAKC,MAAM8M,GAAOtQ,OAC3DuD,EAAKC,MAAM8M,GAAOtQ,gBAAiBjD,QAASgV,EAASjU,OAAS,EAAI,CACnE,GAAIsU,GAAUH,EAAShQ,iBAAiB,2BACxCyP,IAAU,CACV,KAAK,GAAIhL,GAAI,EAAG2L,EAAOD,EAAQtU,OAAQ4I,EAAI2L,EAAM3L,IAAK,CAClD,GAAI/G,GAAUyS,EAAQ1L,GAClByE,MAAO,EACPxL,GAAQ4C,cAAcJ,UAAUC,QAAQ,eAAiB,GACzD+I,EAAOpC,UAAQpJ,EAAS,4BACfwC,UAAUC,QAAQ,aAAe,GACtCjF,KAAK4T,cAAc5F,GAGlBiH,EAAQ1L,GAAGnE,cAAcJ,UAAUC,QAAQ,aAAe,GAAKgQ,EAAQ1L,GAAGvE,UAAUC,QAAQ,aAAe,GAChHjF,KAAK4T,cAAcqB,EAAQ1L,GAAGnE,eAElCmE,WAIFsL,GAAeA,EAAYrS,SAAW6G,oBAAkBwL,EAAY1B,QACzEmB,GAAmBA,EAAgB9R,UAAY6G,oBAAkBiL,EAAgBzR,QAC9EyR,EAAgBzR,MAAMlC,OAAS,MAC/B+T,EAAUtP,cAAcJ,UAAUC,QAAQ,aAAe,GACzDjF,KAAK4T,cAAcc,EAAUtP,eAEjCmP,GAAU,IAItB,MAAOA,IAEXjS,EAAapC,UAAUiV,iBAAmB,WACtCnV,KAAKiG,YACL,IAAI8E,GAAY/K,KAAKwC,QAAQoC,cAAc,qBAC3C,IAAImG,EAAW,CACX/K,KAAKiG,UAAU8E,EAAU7E,KAAO,EAChC,IAAIkP,IAAQC,aAActK,EAAWuK,OAAQ,GAC7CtV,MAAKuV,aAAaH,KAG1B9S,EAAapC,UAAUqV,aAAe,SAAUH,GAC5C,GACII,GAEAhV,EAHAiV,EAAWL,EAAIC,aAAazQ,cAAc,gBAAgB8I,SAE1D3C,EAAYqK,EAAIC,aAEhBK,EAAOD,EAAS9U,OAChBgV,EAAa,CACjB,KAAKnV,EAAI,EAAGA,EAAIkV,EAAMlV,KAClBgV,EAAYC,EAASjV,IACPwE,UAAUC,QAAQ,sBAAwB,IACpDmQ,EAAIE,MAAM3O,KAAKgP,GACf3V,KAAKiG,UAAUuP,EAAUtP,IAAMkP,EAAIE,MAAMM,QACzCD,IACAP,EAAIC,aAAeG,EACnBJ,EAAMpV,KAAKuV,aAAaH,GAGhC,IAAInH,GAAerC,UAAQb,EAAW,eAGtC,OAFAqK,GAAIC,aAAepH,EAAerC,UAAQqC,EAAc,sBAAwBlD,EAChFqK,EAAIE,MAAQtV,KAAKiG,UAAUmP,EAAIC,aAAanP,IAAI0P,QACzCR,GAEX9S,EAAapC,UAAU2V,cAAgB,WACnC,GAAIC,GACAC,EACAC,EACAC,EACAC,EACAnL,EAAY/K,KAAKuF,cAAc,OAASC,OAASC,MAAO,uBACxD0Q,EAAenW,KAAKuF,cAAc,OAASC,OAASC,MAAO,oBAC3D2Q,EAAcpW,KAAKuF,cAAc,OAASC,OAASC,MAAO,kBAC1D4Q,EAAYrW,KAAKuF,cAAc,OAASC,OAASC,MAAO,gBA2B5D,OA1BAsF,GAAUnF,YAAYuQ,GACtBC,EAAYxQ,YAAYyQ,GACxBtL,EAAUnF,YAAYwQ,GAEjBpW,KAAK6F,iBACNiQ,EAAW9V,KAAKuF,cAAc,OAASC,OAASC,MAAO,oBAAqB6Q,KAAM,WAC9EtW,KAAK+F,qBACLgQ,EAAY/V,KAAKuF,cAAc,UAAYC,OAASgC,KAAM,SAAU/B,MAAO,iBAC3EqQ,EAASlQ,YAAYmQ,IAEzBA,EAAY/V,KAAKuF,cAAc,SAAWC,OAASgC,KAAM,QAAS/B,MAAO,iBAAkB5C,MAAO,SAClGiT,EAASlQ,YAAYmQ,GACrBC,EAAYhW,KAAKuF,cAAc,SAAWC,OAASC,MAAO,0CACtDJ,UAAWrF,KAAKqI,KAAKC,YAAY,SACrCwN,EAASlQ,YAAYoQ,GACrBD,EAAY/V,KAAKuF,cAAc,SAAWC,OAASgC,KAAM,QAAS/B,MAAO,gBAAiB5C,MAAO,QACjGiT,EAASlQ,YAAYmQ,GACrBC,EAAYhW,KAAKuF,cAAc,SAAWC,OAASC,MAAO,yCACtDJ,UAAWrF,KAAKqI,KAAKC,YAAY,QACrCwN,EAASlQ,YAAYoQ,GACrBG,EAAavQ,YAAYkQ,GACzBG,EAAajW,KAAKuF,cAAc,OAASC,OAASC,MAAO,oBACzDyQ,EAAWlW,KAAKuF,cAAc,UAAYC,OAASgC,KAAM,SAAU/B,MAAO,eAC1EwQ,EAAWrQ,YAAYsQ,GACvBC,EAAavQ,YAAYqQ,IAEtBlL,GAEXzI,EAAapC,UAAUqO,aAAe,WAClC,GAAIuG,GACAyB,EACAC,EACAC,EACA1I,EAAW/N,KAAKuF,cAAc,OAC9BmP,EAAY1U,KAAKuF,cAAc,OAASC,OAASC,MAAO,iBAC5DqP,GAAW9U,KAAKuF,cAAc,OAASC,OAASC,MAAO,kBACvD,IAAIiR,GAAa1W,KAAKuF,cAAc,SAAWC,OAASgC,KAAM,OAAQ/B,MAAO,mBAC7EqP,GAASlP,YAAY8Q,GACrBhC,EAAU9O,YAAYkP,GACtBA,EAAW9U,KAAKuF,cAAc,OAASC,OAASC,MAAO,qBACvDiP,EAAU9O,YAAYkP,GACtBA,EAAW9U,KAAKuF,cAAc,OAASC,OAASC,MAAO,kBACvDiP,EAAU9O,YAAYkP,GACtBA,EAAW9U,KAAKuF,cAAc,OAASC,OAASC,MAAO,yBAEnD+Q,EADAxW,KAAKsN,YAAYe,UACF,uEAGA,qFAGfoI,EADAzW,KAAKsN,YAAYiC,SACH,6EAGA,0FAElB,IAAIoH,GAAmB3W,KAAKuF,cAAc,UAAYC,OAASoR,MAAO5W,KAAKqI,KAAKC,YAAY,aAAcd,KAAM,SAAU/B,MAAO+Q,KAC7H9F,EAAc1Q,KAAKuF,cAAc,QAAUC,OAASC,MAAO,8BAC/DkR,GAAiB/Q,YAAY8K,EAC7B,IAAImG,GAAmB7W,KAAKuF,cAAc,UAAYC,OAASoR,MAAO5W,KAAKqI,KAAKC,YAAY,YAAad,KAAM,SAAU/B,MAAOgR,IAChI/F,GAAc1Q,KAAKuF,cAAc,QAAUC,OAASC,MAAO,iCAC3DoR,EAAiBjR,YAAY8K,GAEzB6F,EADAvW,KAAKsN,YAAYmC,YAAcpG,oBAAkBrJ,KAAKsN,YAAYmC,YACxD,iDAGA,8DAEd,IAAIqH,GAAa9W,KAAKuF,cAAc,UAAYC,OAASgC,KAAM,SAAU/B,MAAO8Q,IAMhF,OALAzB,GAASlP,YAAY+Q,GACrB7B,EAASlP,YAAYiR,GACrB/B,EAASlP,YAAYkR,GACrBpC,EAAU9O,YAAYkP,GACtB/G,EAASnI,YAAY8O,GACd3G,GAEXzL,EAAapC,UAAU4L,gBAAkB,SAAUiL,EAAS/V,EAAQgC,EAAWgU,EAAYjU,EAAK+C,EAAQM,GACpG,GAAI3D,GAAQzC,KACR6G,GAASqD,QAASlJ,EAAOkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAAK2G,QAAQ,EAAOrF,KAAM,cACpFxH,MAAK0E,eAAkB1E,KAAK4P,eAM7B5P,KAAK4P,eAAgB,EACrB5P,KAAKiX,gBAAgBpQ,EAAMkQ,EAAS/V,EAAQgC,EAAWgU,EAAYjU,EAAK+C,EAAQM,IANhFpG,KAAK4I,QAAQ,eAAgB/B,EAAM,SAAUmG,GACzCvK,EAAMwU,gBAAgBjK,EAAoB+J,EAAS/V,EAAQgC,EAAWgU,EAAYjU,EAAK+C,EAAQM,MAQ3G9D,EAAapC,UAAU+W,gBAAkB,SAAUpQ,EAAMkQ,EAASG,EAAalU,EAAWgU,EAAYjU,EAAK+C,EAAQM,GAC/G,IAAKS,EAAKgG,QAAW7M,KAAKwC,QAAQsC,iBAAiB,sBAAsBnE,QAAUX,KAAKwN,cAAgB,CACpG,GAAIxM,GAASkW,EACTC,MAAc,GACdjN,EAAU,EAEVA,GADAlJ,EAAOgE,UAAUC,QAAQ,qBAAuB,EACtCjE,EAAO4D,cAAc,uBAAyB5D,EAAO4D,cAAc,sBAAsBsB,GAGzFlF,EAAOkF,EAErB,IAAI6E,GAAY/K,KAAK+K,UAAUsE,WAAU,EAczC,IAbAtE,EAAUoD,aAAa,KAAMnO,KAAKwC,QAAQ0D,GAAK,SAAWlG,KAAKoX,gBAC3DpX,KAAK6F,iBACDC,GACAiR,GAAU,EACVhM,EAAUoD,aAAa,KAAMnO,KAAKwC,QAAQ0D,GAAK,WAC/ClG,KAAKqX,iBAAiBtM,EAAWhI,EAAKC,EAAWoD,EAAM8D,GACvDlK,KAAKoX,eAAiB,GAGtBpX,KAAKqX,iBAAiBtM,EAAWhI,EAAKC,EAAWoD,EAAM8D,IAG/DlK,KAAKoX,kBACApX,KAAK6F,eAAgB,CACtB,GAAIyR,GAAavM,EAAUnG,cAAc,mBACrC2S,EAAYxM,EAAUnG,cAAc,kBACpC4S,EAAazM,EAAUnG,cAAc,uBACrC6S,EAAY1M,EAAUnG,cAAc,qBACxC0S,GAAWnJ,aAAa,KAAMnO,KAAKwC,QAAQ0D,GAAK,OAASlG,KAAK0X,YAC9DH,EAAUpJ,aAAa,KAAMnO,KAAKwC,QAAQ0D,GAAK,MAAQlG,KAAK0X,YAC5DJ,EAAWnJ,aAAa,OAAQnO,KAAKwC,QAAQ0D,GAAK,OAASlG,KAAK0X,YAChEH,EAAUpJ,aAAa,OAAQnO,KAAKwC,QAAQ0D,GAAK,OAASlG,KAAK0X,YAC/DF,EAAWrJ,aAAa,MAAOnO,KAAKwC,QAAQ0D,GAAK,OAASlG,KAAK0X,YAC/DD,EAAUtJ,aAAa,MAAOnO,KAAKwC,QAAQ0D,GAAK,MAAQlG,KAAK0X,YAC7D1X,KAAK0X,aAET,GAAIX,EAAS,CACT,GAAIR,OAAU,EAEVA,GADAvW,KAAKsN,YAAYqK,aAAetO,oBAAkBrJ,KAAKsN,YAAYqK,aACzD,gBAGA,8BAEdR,EAAcnX,KAAKuF,cAAc,UAAYC,OAASgC,KAAM,SAAU/B,MAAO8Q,KAChE,GAAIqB,WAASC,QAAS,wBAAyBhG,SAAU,oBAC/DG,SAASmF,GAChBA,EAAYhJ,aAAa,QAASnO,KAAKqI,KAAKC,YAAY,gBACxDwP,eAAaX,GAAeY,SAAU,gBAItC,KAAK,GAHDtC,GAAWzU,EAAO4D,cAAc,gBAChCoT,EAAavC,EAAS/H,SACtBuK,EAAS,EACJ1O,EAAI,EAAG2L,EAAO8C,EAAWrX,OAAQ4I,EAAI2L,EAAM3L,IAC5CyO,EAAWzO,GAAGvE,UAAUC,QAAQ,sBAAwB,IACxDgT,GAAU,EAGdjY,MAAKsN,YAAYkC,YAAcxP,KAAKiE,iBAChCjE,KAAK8D,aAAgBkU,EAAWrX,OAAS,GACzC8U,EAAS7P,YAAYmF,GACrB/K,KAAKgE,aAAc,IAGnBgU,EAAWhY,KAAK8D,WAAa,GAAGoU,WAAW5J,aAAavD,EAAWiN,EAAWhY,KAAK8D,WAAa,IAChG9D,KAAKkE,eAAgB,GAIzBuR,EAAS7P,YAAYmF,EAEzB,IAAIuK,GAAQtV,KAAKiG,UAAUjF,EAAOkF,IAAI0P,MAAM,EAc5C,IAbAN,EAAM3O,KAAKsR,GACXjY,KAAKiG,UAAU8E,EAAU7E,IAAMoP,EAC3BtV,KAAK8D,YAAc,GACnB9D,KAAKmV,mBAEJnV,KAAK0E,gBACN1E,KAAKqD,cAAe,EACpBrD,KAAKmY,aAAcnX,EAAOkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,KAC5DlG,KAAKqD,cAAe,EAChB2T,GAAchX,KAAKoY,oBACnBpY,KAAK2N,eAAe5C,QAGvB/K,KAAK6F,eAAgB,CAClB4Q,EAAc,EAEdA,GADAzW,KAAKsN,YAAYkC,WACH,iEAGA,8EAElB,IAAI6I,GAAerY,KAAKuF,cAAc,UAAYC,OAASoR,MAAO5W,KAAKqI,KAAKC,YAAY,cAAed,KAAM,SAAU/B,MAAOgR,KAC1H/F,EAAc1Q,KAAKuF,cAAc,QAAUC,OAASC,MAAO,8BAC/D4S,GAAazS,YAAY8K,GACzB3F,EAAUnG,cAAc,mBAAmBgB,YAAYyS,GAEnD5B,EADAzW,KAAKsN,YAAYgC,UACH,gEAGA,6EAElB,IAAIgJ,GAActY,KAAKuF,cAAc,UAAYC,OAASoR,MAAO5W,KAAKqI,KAAKC,YAAY,aAAcd,KAAM,SAAU/B,MAAOgR,KACxH8B,EAAkBvY,KAAKuF,cAAc,QAAUC,OAASC,MAAO,gCACnE6S,GAAY1S,YAAY2S,GACxBxN,EAAUnG,cAAc,mBAAmBgB,YAAY0S,GACvDvN,EAAUnG,cAAc,mBAAmBgB,YAAYuR,QAG1D,CACD,IAAKnX,KAAK6F,eAAgB,CACtB,GAAI4Q,GAAc,EAEdA,GADAzW,KAAKsN,YAAYgC,UACH,gEAGA,6EAElB,IAAIgJ,GAActY,KAAKuF,cAAc,UAAYC,OAASoR,MAAO5W,KAAKqI,KAAKC,YAAY,aAAcd,KAAM,SAAU/B,MAAOgR,KACxH/F,EAAc1Q,KAAKuF,cAAc,QAAUC,OAASC,MAAO,gCAC/D6S,GAAY1S,YAAY8K,GACxB3F,EAAUnG,cAAc,mBAAmBgB,YAAY0S,GAE3DtX,EAAO4E,YAAYmF,GACnB/K,KAAKiG,UAAU8E,EAAU7E,KAAO,GAEpC,GAAIlG,KAAK+F,qBACA/F,KAAK6F,eAAgB,CACtB,GAAI2S,GAAUzN,EAAUnG,cAAc,eACzB,IAAIgT,WAAS7D,QAAS/T,KAAKqI,KAAKC,YAAY,OAAQuJ,SAAU,kBACpEG,SAASwG,GAChBzN,EAAUnG,cAAc,uBAAuB+L,UAAUC,IAAI,SACzD5Q,KAAK8C,aAAe9C,KAAK8C,YAAYC,KACrC6J,YAAU4L,GAAU,mBAKhC,GADAxY,KAAK8C,YAAc,KACf9C,KAAK6F,eAAgB,CACrB,GAAI4S,IAAWjK,YAAa,yBAA0BC,OAAQ1D,EAAU7E,GAAIlD,UAAWA,EACnF0V,aAAc1Y,KAAK+F,mBAAqBhD,MAAM4V,GAClD3Y,MAAK4I,QAAQ,cAAe6P,OAE3B,CACD,GAAIvC,GAAWnL,EAAUnG,cAAc,aAC1B,IAAIgU,mBACbC,MAAO7Y,KAAK6Y,MACZhH,SAAU,8CACVgG,QAAS,qBACT1D,WAAYnU,KAAKqN,UAAUmE,KAAKxR,KAAMkW,GACtChI,OAAQlO,KAAKqN,UAAUmE,KAAKxR,KAAMkW,KAE/BlE,SAASkE,GAChBA,EAAS/H,aAAa,QAASnO,KAAKqI,KAAKC,YAAY,cAEzD,IAAKtI,KAAK0E,cAAe,CACrB,GAAIoU,GAAQ9X,EAAOkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACjD6S,EAAUhO,EAAU7E,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,GAC1DlG,MAAK4I,QAAQ,UAAYsB,QAAS4O,EAAOtR,KAAM,cAAewR,aAAcD,OAIxFzW,EAAapC,UAAUmX,iBAAmB,SAAUtM,EAAWhI,EAAKC,EAAWoD,EAAM8D,GACjF,GAAI+O,GAEApS,EADA+H,EAAa5O,KAAKwC,QAAQ0D,GAAK,UAE/BgT,EAAWnO,EAAUnG,cAAc,kBACvC,IAAI5E,KAAK6F,eAAgB,CAOrB,GANAgB,GAAS2H,YAAa,6BAA8BC,OAAQ1D,EAAU7E,GAClEwS,aAAc1Y,KAAK+F,mBAAqBhD,MAAM4V,GAC9C3V,UAAWA,EAAWoD,KAAMpG,KAAKmZ,kBAAkB/S,GAAM,GAAO8D,QAASA,GAC7ElK,KAAK4I,QAAQ,cAAe/B,GAC5B7G,KAAKoZ,SAAWpZ,KAAK2O,eAAe3O,KAAK6F,gBAErC7F,KAAK+O,QACLkK,EAAWjZ,KAAKoZ,SAASvS,EAAM7G,KAAM+K,EAAU7E,GAAI0I,GAAY,GAC/DsK,EAAStT,YAAYqT,OAGpB,IAAIjZ,KAAKgP,UAAW,CACrB,GAAIC,GAAejP,KAAKoZ,SAASvS,EAAM7G,KAAM+K,EAAU7E,GAAI0I,EAC3DqK,GAAyC,IAA7BhK,EAAa,GAAGC,SAAkBD,EAAa,GAAKA,EAAa,GAC7EiK,EAAStT,YAAYqT,OAGhBjZ,MAAKmP,QACV8J,EAAWjZ,KAAKoZ,SAASvS,EAAM7G,KAAM+K,EAAU7E,GAAI0I,GAEnDQ,SAAO6J,EAAUC,KAGjBD,EAAWjZ,KAAKoZ,SAASvS,EAAM7G,KAAM,WAAY4O,GAAY,GAC7DsK,EAAStT,YAAYqT,GAEzBjZ,MAAK0P,uBAET,MAAO3E,IAUXzI,EAAapC,UAAUmZ,aAAe,SAAUxW,EAAOL,EAASgF,GAC5D,GAAI8R,GAAa1N,UAAQpJ,EAAS,sBAC9B6D,EAAQrG,KAAKmN,eAAemM,GAC5BC,EAAc3N,UAAQpJ,EAAS,qBAC/B2Q,EAAQ,CACZ,IAAa,QAAT3L,EAEA,YADAnB,EAAMtD,IAAMF,EAGhB,IAAa,cAAT2E,EAEA,YADAnB,EAAMrD,UAAYH,EAGtB,MAAO0W,GAAsD,OAAvCA,EAAY1I,wBAC9B0I,EAAcA,EAAY1I,uBAC1BsC,GAEJ,IAAI/M,GAAOC,EAAMA,MAAM8M,GACnBhK,EAASnJ,KAAKmQ,UAAU/J,EAAKW,OAC7ByS,EAASxZ,KAAKyZ,UAAUtQ,EAAOqQ,OACnC,IAAoB,SAAhBrQ,EAAO3B,KACP,GAAI3E,YAAiBmF,MACjBnF,EAAQ7C,KAAK0Z,KAAKC,WAAW9W,EAAO2W,OAEnC,IAAI3W,YAAiBjD,OACtB,IAAK,GAAIY,GAAI,EAAGA,EAAIqC,EAAMlC,OAAQH,IAC1BqC,EAAMrC,IAAMqC,EAAMrC,YAAcwH,QAChCnF,EAAMrC,GAAKR,KAAK0Z,KAAKC,WAAW9W,EAAMrC,GAAIgZ,GAKtDrQ,GAAOoF,aACPvO,KAAK4Z,eAAepX,EAASK,EAAO2E,IAGpCxH,KAAKoD,YAAa,EAClBpD,KAAK6Z,YAAYrX,EAASK,GAC1B7C,KAAKoD,YAAa,IAG1Bd,EAAapC,UAAU0Z,eAAiB,SAAUpX,EAASK,EAAO2E,GAC9D,GACIsS,GADAC,EAAUnO,UAAQpJ,EAAS,sBAE3B6D,EAAQrG,KAAKmN,eAAe4M,GAC5BhM,EAAWnC,UAAQpJ,EAAS,qBAC5B2Q,EAAQ,CAIZ,KAHInT,KAAKwU,iBACLxU,KAAKga,cAAc3T,EAAO0H,GAEvBA,GAAgD,OAApCA,EAAS8C,wBACxB9C,EAAWA,EAAS8C,uBACpBsC,GAEJ,IAAI/M,GAAOC,EAAMA,MAAM8M,EACV,WAAT3L,EACAxH,KAAKsQ,eAAiBtQ,KAAKmQ,UAAUtN,GAEhCuD,IACLpG,KAAKsQ,eAAiBtQ,KAAKmQ,UAAU/J,EAAKW,OAE9C,IAAIwM,EACJvT,MAAKyT,eAAiBzT,KAAKmQ,UAAU/J,EAAKW,MAC1C,IAAIkG,GAAcjN,KAAKkN,cAAclN,KAAKoG,KACtCpG,MAAKsQ,iBAEDiD,EADAvT,KAAKsQ,eAAe/H,UACVvI,KAAKsQ,eAAe/H,UAGpBvI,KAAKwI,gBAAgBxI,KAAKsQ,eAAe9I,KAAO,YAGlE,IACIyS,GADAC,GAAW,KAAM,QAAS,UAAW,aAEzC,QAAQ1S,GACJ,IAAK,QACDpB,EAAKW,MAAQlE,EACbuD,EAAKsC,MAAQ1I,KAAKsQ,eAAe5H,MACjCtC,EAAKoB,KAAOxH,KAAKsQ,eAAe9I,KAChCpB,EAAKvD,MAAQ,GACbuD,EAAKiK,SAAWkD,EAAQ,GAAG1Q,KAC3B,MACJ,KAAK,WACDoX,EAAW7T,EAAKiK,SAChBjK,EAAKiK,SAAWxN,EACZqX,EAAQjV,QAAQmB,EAAKiK,WAAa,EAClCjK,EAAKvD,SAEAqX,EAAQjV,QAAQgV,IAAa,IAClC7T,EAAKvD,MAAQ,GAEjB,MACJ,KAAK,QACDuD,EAAKvD,MAAQA,EAIrB,GAFA7C,KAAKsT,mBAAmBtT,KAAKsQ,eAAgB9N,GAC7CxC,KAAKoN,YAAYH,EAAajN,KAAKkN,cAAclN,KAAKoG,MAAOoB,GACzDxH,KAAKsQ,gBAAkBtQ,KAAKsQ,eAAe/B,eAC9B,UAAT/G,GAA6B,aAATA,GAAqB,CACzC,GAAI2S,GAASvO,UAAQpJ,EAAS,oBAC9BxC,MAAKoa,gBAAgBD,GAAQ,GAC7BzG,SAAOyG,EAAOvV,cAAc,iBAC5B,IAAI2U,GAAcvZ,KAAK4N,eAAehC,UAAQuO,EAAQ,sBAAuBna,KAAKsQ,eAAgB,SAAU6J,EAAOjU,GAAIsB,EAAMpB,EACpG,cAArBpG,KAAKyQ,aAA8BzQ,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,EACjFsU,EAAYvU,UAAY,mCAGxBuU,EAAYvU,UAAY,qCAExBuU,EAAY1I,wBAA0B0I,EAAY1I,uBAAuB7L,UAAUC,QAAQ,qBAAuB,IAC9GsU,EAAYvU,UAAUC,QAAQ,iBAAmB,IACjDsU,EAAYvU,WAAa,kBAEzBuU,EAAY1I,uBAAuB7L,UAAUC,QAAQ,sBAAwB,IAC7EsU,EAAY1I,uBAAuB7L,WAAa,wBAGpDuU,EAAY1I,wBAA0B0I,EAAY1I,uBAAuB7L,UAAUC,QAAQ,sBAAwB,GACnHsU,EAAYvU,UAAUC,QAAQ,mBAAqB,IACnDsU,EAAYvU,WAAa,mBAE7B,IAAI6B,IAAS2H,YAAa,kBAAmBV,OAAQtG,EAAMiH,OAAQ0L,EAAOjU,GACtEvD,OAAQ3C,KAAK2C,OAAQyD,KAAMA,EAC/B0T,IAAe5P,QAAS6P,EAAQ7T,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAAKuI,OAAQ0L,EAAOjU,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACpHrD,MAAOuD,EAAKW,MAAOS,KAAM,SAC7BxH,KAAK4I,QAAQ,cAAe/B,GAC5B7G,KAAK4I,QAAQ,SAAUkR,KAInCxX,EAAapC,UAAUma,YAAc,SAAU7Z,EAAGqG,GAC9C,GACIrE,GADAC,EAAQzC,IAGZ,IAAIA,KAAKsa,YAAoC,gBAAfzT,GAAKhE,MAE/B,YADA7C,KAAKsa,YAAa,KAMlB9X,EAFAqE,EAAKrE,SAAWqE,EAAKrE,QAAQmO,UAAU4J,SAAS,iBAC1B1T,EACIrE,QAErBqE,EAAKmD,MACAnD,EAAKmD,MAAMhJ,OAGF,UAAd6F,EAAKW,MAAoBX,EAAK2T,cAEzB3T,EAAK2T,cAIL3T,EAAKrE,SAEPwC,UAAUC,QAAQ,UAAY,GAAKzC,EAAQwC,UAAUC,QAAQ,YAAc,GAAKzC,EAAQwC,UAAUC,QAAQ,WAAa,KAE/HzC,EADmBqE,EACIrE,QAE3B,IAKIqS,GALA9J,EAAYa,UAAQpJ,EAAS,sBAC7BuL,EAAWnC,UAAQpJ,EAAS,qBAC5B0H,EAAUa,GAAaA,EAAU7E,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACnEuI,EAASV,EAAS7H,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACpDuU,EAAc5T,CAEd4T,GAAYjY,SAAWiY,EAAYjY,QAAQwC,UAAUC,QAAQ,iBAAmB,IAChFzC,EAAUiY,EAAYjY,SACtBqS,EAAc3P,eAAa0G,UAAQpJ,EAAS,qBAAqBoC,cAAc,mBAAoB,mBAE/F5E,KAAKsQ,eAAiBuE,EAAY3C,eAAe2C,EAAYhS,SAEjEgS,EAAc3P,eAAa0G,UAAQpJ,EAAS,qBAAqBoC,cAAc,mBAAoB,mBAE/F5E,KAAKsQ,eAAiBtQ,KAAKmQ,UAAU0E,EAAYhS,MAAM,KAG/D,IAAIA,GACA6X,CACAlY,GAAQwC,UAAUC,QAAQ,YAAc,GAExCyV,EAAUzH,SAASzQ,EAAQ0D,GAAGe,MAAM,YAAY,GAAI,GAC7B,YAAnBjH,KAAK+Q,WACL8D,EAAc3P,eAAa0G,UAAQpJ,EAAS,qBAAqBoC,cAAc,mBAAoB,gBACnG5E,KAAKsQ,eAAiBuE,EAAY3C,eAAe2C,EAAYhS,OACzD7C,KAAKsQ,eAAe1I,UACpBiN,EAAc3P,eAAa0G,UAAQpJ,EAAS,qBAAqBoC,cAAc,sCAAuC,gBACtH5E,KAAKsQ,eAAiBtQ,KAAKmQ,UAAU0E,EAAYhS,UAIrDgS,EAAc3P,eAAa0G,UAAQpJ,EAAS,qBAAqBoC,cAAc,mBAAoB,gBACnG5E,KAAKsQ,eAAiBtQ,KAAKmQ,UAAU0E,EAAYhS,MAAM,KAGvDA,EADA7C,KAAKsQ,eAAe3G,OACZ3J,KAAKsQ,eAAe3G,OAAO+Q,KAGpB,GAAM,GACLA,IAGflY,EAAQwC,UAAUC,QAAQ,kBAAoB,EACnDpC,EAAQqC,eAAa1C,EAAS,eAAeK,OAG7CA,EAAQgE,EAAKhE,MAEK,UAAdgE,EAAKW,MAAoBX,EAAK2T,gBAE9B3X,EAAQd,OAAO8E,EAAK2T,cAAc3X,OACV8X,cAAY9T,EAAK2T,cAAeI,kBACtC/X,MAAQA,EAC1B7C,KAAKsa,YAAa,IAGR,UAAdzT,EAAKiE,MAAoB9K,KAAK6a,oBAC9BC,OAAOC,cAAc/a,KAAKgb,OAC1Bhb,KAAKgb,MAAQF,OAAOG,YAAY,WAAcxY,EAAMyY,YAAYhR,EAASuE,EAAQ5L,EAAOrC,EAAGgC,IAAaxC,KAAK6a,qBAG7G7a,KAAKkb,YAAYhR,EAASuE,EAAQ5L,EAAOrC,EAAGgC,IAGpDF,EAAapC,UAAUgb,YAAc,SAAUC,EAAMC,EAAMvY,EAAOrC,EAAG6a,GACjE,GAAI5Y,GAAQzC,KACR8Z,GAAe5P,QAASiR,EAAM1M,OAAQ2M,EAAMvY,MAAOA,EAAOgK,QAAQ,EAAOrF,KAAM,QACnFsT,QAAOC,cAAc/a,KAAKgb,OACrBhb,KAAK0E,cAMN1E,KAAKsb,2BAA2BxB,EAAYuB,EAAK7a,EAAG2a,EAAMC,GAL1Dpb,KAAK4I,QAAQ,eAAgBkR,EAAY,SAAU9M,GAC/CvK,EAAM6Y,2BAA2BtO,EAAoBqO,EAAK7a,EAAG2a,EAAMC,MAO/E9Y,EAAapC,UAAUob,2BAA6B,SAAUzU,EAAMrE,EAAShC,EAAG0J,EAASuE,GAChF5H,EAAKgG,SACN7M,KAAK6Z,YAAYrX,EAASqE,EAAKhE,MAAOrC,GACjCR,KAAK0E,eACN1E,KAAK4I,QAAQ,UAAYsB,QAASA,EAASuE,OAAQA,EAAQ5L,MAAOgE,EAAKhE,MAAOgK,QAAQ,EAAOrF,KAAM,YAI/GlF,EAAapC,UAAUqR,WAAa,SAAUrL,GAC1C,IAAIlG,KAAKuD,gBAAiBvD,KAAKyD,UAA/B,CAGAzD,KAAKwD,cAAe,CAEpB,IAAI+X,GAAMrW,eAAagB,EAAI,gBACvBsV,EAAOD,EAAIE,SAASjZ,QAAQoC,cAAc,aAC1CwN,EAAWmJ,EAAIG,aACnBH,GAAI1Y,MAAQuP,EAASvP,KACrB,IAAI8Y,IAAenZ,QAAS+Y,EAAI/Y,QAASK,MAAOuP,EAASvP,MAAO+Y,cAAc,EAC1EC,iBAAkB7b,KAAK8b,aAAcC,aAAc,KAAMP,KAAMA,EAAMpJ,SAAUA,EAAUpI,MAAO,KAAMgS,EAAG,KACzGT,GAAIU,gBAAkBV,EAAI1Y,OAC1B7C,KAAK0R,YAAYiK,GAErB3b,KAAKuD,eAAgB,IAEzBjB,EAAapC,UAAUwR,YAAc,SAAU7K,GAC3C,GAAIA,EAAK+U,aAAc,CACnB,GAAIvS,oBAAkBxC,EAAKhE,OACvB,MAEJ7C,MAAKuD,eAAgB,EACrBvD,KAAK8b,aAAejV,EAAKuL,QACzB,IAAIsC,GAAY9I,UAAQ/E,EAAKrE,QAAS,mBAAqBoJ,UAAQ/E,EAAKrE,QAAS,sBAC7E2G,EAA4B,iBAAnBnJ,KAAK+Q,UAA+B/Q,KAAKmQ,UAAUtJ,EAAKhE,MAAM,IAAM7C,KAAKmQ,UAAUtJ,EAAKhE,MACrG,IAAuB,iBAAnB7C,KAAK+Q,WAA8C,OAAd2D,EAAoB,CACzD,GAAIwH,GAAUxH,EAAU9P,cAAc,6BAClCuX,EAAMjX,eAAagX,EAAS,eAChC,KAAI/S,EA2BA,MA1BA,IAAoB,WAAhBA,EAAO3B,KAAmB,CAK1B,GAHA2U,EAAItZ,MAAQgE,EAAKuV,SACjBD,EAAIE,WAEAhT,oBAAkBxC,EAAKuV,UACvBF,EAAQrZ,MAAQ,OAEf,CAEGmG,EAAShJ,KAAKgT,mBAAmBnM,EAAKuV,SAAS,GACnDF,GAAQrZ,MAAQmG,EAEpB,OAGA,IAAKK,oBAAkBxC,EAAKhE,MAAM,IAAK,CAEnCsZ,EAAItZ,MAAQgE,EAAKhE,MAAM,GACvBsZ,EAAIE,UACJ,IAAIrT,GAAShJ,KAAKgT,mBAAmBnM,EAAKhE,MAAM,GAChDqZ,GAAQrZ,MAAQmG,GAWhC,GAHAhJ,KAAKsc,iBAAiB5H,GACtB1U,KAAKuc,aAAe,KACpBvc,KAAKsD,kBAAmB,EACpB6F,GAAUA,EAAOoF,aACjBvO,KAAK4Z,eAAe/S,EAAKrE,QAAS2G,EAAOpC,MAAO,aAE/C,IAAIoC,GAAUA,EAAOvB,SAAWuB,EAAOvB,QAAQ,GAAG2G,aACnDvO,KAAK4Z,eAAe/S,EAAKrE,QAAS2G,EAAOvB,QAAQ,GAAGb,MAAO,aAE1D,CAKD,IAJA,GAAIgE,GAAYa,UAAQ/E,EAAKrE,QAAS,sBAClC6D,EAAQrG,KAAKmN,eAAepC,GAC5BgD,EAAWnC,UAAQ/E,EAAKrE,QAAS,qBACjC2Q,EAAQ,EACLpF,GAAgD,OAApCA,EAAS8C,wBACxB9C,EAAWA,EAAS8C,uBACpBsC,GAEJ9M,GAAMA,MAAM8M,GAAOtQ,MAAQ,GAC3B7C,KAAKmS,WAAW9L,EAAMA,MAAM8M,GAAQtM,MAIhDvE,EAAapC,UAAUiS,WAAa,SAAU/L,EAAMoW,GAChD,IAAKA,EAAQpK,SAAU,CACnB,GAAuB,iBAAnBpS,KAAK+Q,UAOL,MALA,IAAiB,MADP7L,eAAasX,EAAQha,QAAS,gBAChCK,MACJ,OAOZ,GAAI4Z,MACA/F,EAAa9K,UAAQ4Q,EAAQha,QAAS,iBAC1CkU,GAAaA,GAA0B9K,UAAQ4Q,EAAQha,QAAS,qBAChE,IAAIka,GAASxX,eAAasX,EAAQha,QAAS,eACpB,kBAAnBxC,KAAK+Q,WAA+C,OAAf2F,IACrCgG,EAASxX,eAAasX,EAAQha,QAAS,gBAE3C,IACI0H,GADU0B,UAAQ4Q,EAAQha,QAAS,sBACjB0D,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,GACxDlG,MAAK2c,aAAajG,EAAYgG,EAAQxS,EAAS9D,EAAMqW,EAAUD,IAEnEla,EAAapC,UAAUyc,aAAe,SAAUC,EAAKC,EAAI1B,EAAM2B,EAAIC,EAAOC,GACtE,GAAIva,GAAQzC,IACZ,IAAI4c,EAAK,CAEL,GAAI3L,OAAW,EAEXA,GADmB,iBAAnBjR,KAAK+Q,UACO8L,EAAGha,MAAM,GAGV7C,KAAK0E,cAAgB1E,KAAK8G,kBAAkB+V,EAAGha,OAASga,EAAGha,MAE1E7C,KAAKsQ,eAAiBtQ,KAAKmQ,UAAUc,EACrC,IAEI6I,IAAe5P,QAASiR,EAAM1M,OAFnB7C,UAAQgR,EAAK,qBACN1W,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACN+W,cAAkC,iBAAnBjd,KAAK+Q,UAC9D8L,EAAGha,MAAM,GAAKga,EAAGha,MAAOgK,QAAQ,EAAOrF,KAAM,QAChDxH,MAAK0E,cAMN1E,KAAKkd,mBAAmBpD,EAAYiD,EAAOH,EAAKE,EAAIE,GALpDhd,KAAK4I,QAAQ,eAAgBkR,EAAY,SAAU9M,GAC/CvK,EAAMya,mBAAmBlQ,EAAoB+P,EAAOH,EAAKE,EAAIE,SAOpE,CACD,GAAIG,GAAevR,UAAQoR,EAAKxa,QAAS,mBACzCxC,MAAKod,eAAeR,EAAKO,EAAcN,EAAI1B,EAAM2B,EAAIC,EAAOC,KAGpE1a,EAAapC,UAAUkd,eAAiB,SAExCR,EAAKS,EAAKR,EAAI1B,EAAM2B,EAAIC,EAAOC,GAC3B,GAGIlD,GAHArX,EAAQzC,IAIRqd,IAGAvD,GAAe5P,QAASiR,EAAM1M,OAFnB7C,UAAQyR,EAAK,qBACNnX,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACNoX,cAAeT,EAAG1J,MAAOtG,QAAQ,EAAOrF,KAAM,YACvFxH,KAAK0E,cAMN1E,KAAKud,sBAAsBzD,EAAY8C,EAAKG,EAAOD,EAAIE,GALvDhd,KAAK4I,QAAQ,eAAgBkR,EAAY,SAAU9M,GAC/CvK,EAAM8a,sBAAsBvQ,EAAoB4P,EAAKG,EAAOD,EAAIE,MAQxEhd,KAAKwd,iBAAiBZ,EAAKE,EAAIC,EAAOC,IAG9C1a,EAAapC,UAAUgd,mBAAqB,SAAUrW,EAAM4V,EAAU/F,EAAYtQ,EAAMoW,GAOpF,IAAK,GANDzO,GAAWnC,UAAQ8K,EAAY,qBAC/ByG,EAAevR,UAAQ4Q,EAAQha,QAAS,oBAExC0H,EADU0B,UAAQ4Q,EAAQha,QAAS,sBACjB0D,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACpDwW,EAASxX,eAAasX,EAAQha,QAAS,gBACvCib,EAAc1P,EAASjJ,iBAAiB,4BACnCtE,EAAI,EAAGA,EAAIid,EAAY9c,OAAQH,IACpC0E,eAAauY,EAAYjd,GAAI,WAAW2E,SAE5C,IAAK0B,EAAKgG,OAoBN7M,KAAKod,eAAe1G,EAAYyG,EAAcT,EAAQxS,EAAS9D,EAAMqW,EAAUD,OApBjE,CACd,GAAInT,oBAAkBrJ,KAAKsQ,gBACvB,MAMJ,IAJAmM,EAASjV,KAAOxH,KAAKsQ,eAAe9I,KAChCuG,EAASnJ,cAAc,iBACvBwB,EAAKvD,MAAQ,IAEgB,WAA7B7C,KAAKsQ,eAAe9I,MAAwC,YAAnBxH,KAAK+Q,UAE9C,IADA0L,EAASjV,KAAOxH,KAAKsQ,eAAe1I,QAAQ,GAAGJ,KACxCxH,KAAKsQ,eAAe1I,SACvB5H,KAAK0d,gBAAgBhH,EAAYtQ,EAAMqW,EAAUD,OAIrDxc,MAAKsc,iBAAiB5F,GACtB1W,KAAKod,eAAe1G,EAAYyG,EAAcT,EAAQxS,EAAS9D,EAAMqW,EAAUD,KAO3Fla,EAAapC,UAAUoc,iBAAmB,SAAU5F,GAChD,KAAOA,GAAcA,EAAWiH,mBAAmBhN,UAAU4J,SAAS,sBAClEva,KAAKoa,gBAAgB1D,GACrBA,EAAWiH,mBAAmBC,UAGtCtb,EAAapC,UAAUwd,gBAAkB,SAAUhH,EAAYtQ,EAAMqW,EAAUD,GAC3E,GAAIqB,IAAgB,EAChBnJ,EAAY9I,UAAQ8K,EAAY,iBAChC5B,EAAW9U,KAAKuF,cAAc,OAASC,OAASC,MAAO,oBAAqBS,GAAI,YAAclG,KAAK8d,mBACvGpJ,GAAUpG,aAAawG,EAAUJ,EAAU9P,cAAc,oBACzD,IAAImZ,GAASnS,UAAQkJ,EAAU,qBAAqB5O,GAChDqW,EAAevc,KAAKuF,cAAc,SAAWC,OAASgC,KAAM,OAAQtB,GAAI6X,EAAS,gBAAkB/d,KAAK8d,mBAC5GhJ,GAASlP,YAAY2W,EACrB,IACIvL,GADA5F,EAAUpL,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,EAAK,QAAU,OAE3E+L,IACIG,WAAYnR,KAAKsQ,eAAe1I,QAChCjF,OAAQ3C,KAAK2C,OACbyO,YAAapR,KAAKqI,KAAKC,YAAY,eACnC+I,YAAerR,KAAKsQ,eAAe1I,QAAQjH,OAAS,EAAKyK,EAAS,OAClEqG,OAAQzR,KAAK0R,YAAYF,KAAKxR,MAC9BmT,MAAO,EACPxB,KAAM3R,KAAK4R,UAAUJ,KAAKxR,MAAM,IAEhCA,KAAK8R,aACLd,EAAW5Q,KAAa4Q,EAAUhR,KAAK8R,YAE3C,IAAI5B,GAAe,GAAI6B,gBAAaf,EAEpC,IADAd,EAAa8B,SAAS,IAAM+L,EAAS,gBAAkB/d,KAAK8d,kBACxD9d,KAAK0E,eAAkB1E,KAAKyT,gBAAkBzT,KAAKyT,eAAelF,cAClEvO,KAAK8G,kBAAkBV,EAAKW,SAAW/G,KAAK8G,kBAAkB9G,KAAKyT,eAAe1M,OAElF,IAAK,GADDiX,GAAWhe,KAAKsQ,eAAe1I,QAC1BpH,EAAI,EAAGA,EAAIwd,EAASrd,OAAQH,IACjC,GAAI4F,EAAKW,QAAUiX,EAASxd,GAAGuG,OAASX,EAAKW,MAAM9B,QAAQ+Y,EAASxd,GAAGuG,MAAQ/G,KAAKgH,YAAc,EAAG,CACjGkJ,EAAarN,MAAQmb,EAASxd,GAAGuG,MACjC/G,KAAKsQ,eAAiB0N,EAASxd,GAC/Bqd,GAAgB,CAChB,OAIZ7d,KAAK8d,mBACL9d,KAAKuc,aAAeA,EAEpBC,EAAQpK,SAAWoK,EAAQpK,UACtByL,GAAiB7d,KAAKsQ,eAAe1I,WACjCiW,GAAiB7d,KAAK0E,gBACvBwL,EAAarN,MAAQ,MAEzB7C,KAAKsQ,eAAiBtQ,KAAKsQ,eAAe1I,QAAQ,IAEtD5H,KAAKyT,eAAiBzT,KAAKsQ,eACtBtQ,KAAKsQ,eAAe1I,SACrB5H,KAAKwd,iBAAiB1I,EAAU1O,EAAMqW,EAAUD,IAGxDla,EAAapC,UAAUqd,sBAAwB,SAAUzD,EAAYpD,EAAY+F,EAAUrW,EAAMoW,GAC7F,IAAK1C,EAAWjN,OAAQ,CACpB,GAAIsQ,GAAevR,UAAQ4Q,EAAQha,QAAS,oBACxCyS,EAAUkI,EAAaQ,mBACvB9I,EAAc3P,eAAasX,EAAQha,QAAS,gBAC5CyX,EAAW7T,EAAKiK,SAAWjK,EAAKiK,SAAS6C,WAAWpG,cAAgB,EACxE2P,GAASpM,SAAWwE,EAAYhS,MAAMqQ,UACtC,IAAI+K,GAAWxB,EAASpM,SAASvD,aAYjC,IAXI2P,EAASpM,SAASvD,cAAc7H,QAAQ,YAAc,GAAMwX,EAASpM,SAASvD,cAAc7H,QAAQ,OAAS,GAC1GwX,EAASpM,SAASvD,cAAc7H,QAAQ,YAAc,GACzDyR,EAAayG,EAAatM,uBAC1B4L,EAASjV,KAAOpB,EAAKoB,MACjBiV,EAASpM,SAASvD,cAAc7H,QAAQ,MAAQ,GAAKgV,EAAShV,QAAQ,MAAQ,KAC9EmB,EAAKvD,WAGkB,gBAAfuD,GAAKvD,OAAqC,OAAfuD,EAAKvD,QAC5CuD,EAAKvD,MAAQuD,EAAKvD,MAAMlC,OAAS,EAAIyF,EAAKvD,MAAM,GAAmB,WAAduD,EAAKoB,KAAoB,EAAI,IAElFgV,EAAQX,iBAAkB,CAC1B,GAAIqC,GAAY1B,EAAQX,iBAAiBhZ,MAAMqQ,WAAWpG,eACrDoR,EAAUjZ,QAAQ,YAAc,IAAMiZ,EAAUjZ,QAAQ,OAAS,GAAMiZ,EAAUjZ,QAAQ,SAAW,GACjGiZ,EAAUjZ,QAAQ,UAAY,IAAOiZ,EAAUjZ,QAAQ,YAAc,KACzEyR,EAAayG,EAAatM,uBAC1B4L,EAASjV,KAAOpB,EAAKoB,MAO7B,GAJKyS,EAAShV,QAAQ,OAAS,GAAKgV,EAAShV,QAAQ,MAAQ,GAAOgZ,EAAShZ,QAAQ,OAAS,GACvFgZ,EAAShZ,QAAQ,MAAQ,IAC5ByR,EAAa,MAEb+F,EAASpM,SAASpL,QAAQ,SAAW,GAAMwX,EAASpM,SAASpL,QAAQ,UAAY,EAAI,CACrF,GAAIkZ,GAAahB,EAAa/X,cAAcR,cAAc,iBACtD6Y,EAAcU,EAAWvZ,cAAc,2BACvC6Y,IACAvY,eAAauY,EAAa,WAAWtY,UAEzCa,eAAamY,GAAa,UAC1BvR,YAAUuR,GAAa,UAEvBlJ,GAAWjV,KAAKmQ,UAAU/J,EAAKW,OAAOkS,WACtCvC,EAAayG,EAAatM,wBAEC,GAA3BoE,EAAQvH,SAAS/M,SACjB+V,EAAayG,EAAatM,wBAE9B7Q,KAAKwd,iBAAiB9G,EAAYtQ,EAAMqW,EAAUD,KAG1Dla,EAAapC,UAAUsd,iBAAmB,SAAU9G,EAAYtQ,EAAMqW,EAAUD,GAC5E,GAEIE,GACA0B,EACAC,EAJAlB,EAAevR,UAAQ4Q,EAAQha,QAAS,mBAK5C,IAAIkU,EAQA,GAPAyG,EAAezG,EAAWiH,mBACtBjH,EAAW/F,UAAU4J,SAAS,uBAC9BkC,EAASjV,KAAOxH,KAAKsQ,eAAe9I,KAEpC2V,EADQA,EAAaxM,UAAU4J,SAAS,qBACjB4C,EAAaQ,mBAAqBR,GAE7DvQ,YAAUuQ,GAAe,cACrBA,EAAamB,kBAAmB,CAChC5B,EAASxX,eAAaiY,EAAavY,cAAc,mBAAoB,gBACrE6X,EAASpM,SAAWqM,EAAO7Z,KAC3B,IAAI0b,OAAW,EAEXA,GADmB,iBAAnBve,KAAK+Q,UACM7L,eAAawR,EAAW9R,cAAc,mBAAoB,gBAG1DM,eAAawR,EAAW9R,cAAc,mBAAoB,gBAEzE6X,EAASjV,KAA0B,iBAAnBxH,KAAK+Q,UAA+B/Q,KAAKmQ,UAAUoO,EAAS1b,MAAM,IAAI2E,KAClFxH,KAAKmQ,UAAUoO,EAAS1b,OAAO2E,IACnC,IAAI4K,GAAWoK,EAAQpK,QACF,MAAjBsK,EAAO7Z,OACP7C,KAAKwe,aAAarB,EAAc/K,EAAUoK,EAAQX,kBAAkB,EAAMzV,EAAMqW,EAAUD,EAAQha,aAGrG,CACD,GAAIub,GAASnS,UAAQuR,EAAc,qBAAqBjX,EACxDmY,GAAUre,KAAKuF,cAAc,SAAWC,OAASgC,KAAM,OAAQtB,GAAI6X,EAAS,kBAC5EZ,EAAavX,YAAYyY,GACrBre,KAAKsQ,eAAe/H,UACpB6V,EAAepe,KAAKsQ,eAAe/H,UAE9BiU,EAAQpK,WACbgM,EAAepe,KAAKwI,gBAAgBxI,KAAKsQ,eAAe9I,KAAO,YAEnE,IAAI4D,GAAUpL,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,EAAK,QAAU,QACvEpC,EAAQub,EAAa,GAAGvb,MACxB4b,EAAS,CACRze,MAAK0e,qBACN7b,EAAQ,GACR4b,GAAU,IAEVze,KAAK0E,eAAkB1E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,KACjEjB,EAAQuD,GAAQA,EAAKiK,SAAWjK,EAAKiK,SAAoBxN,EAE7D,IAAI8b,OAAc,EAClBA,IACIxN,WAAYiN,EACZzb,QAAUC,KAAM,MAAOC,MAAO,SAC9BuO,YAAapR,KAAKqI,KAAKC,YAAY,kBACnC+I,YAAe+M,EAAazd,OAAS,EAAKyK,EAAS,OACnDqG,OAAQzR,KAAK0R,YAAYF,KAAKxR,MAC9BmT,MAAOsL,EACP5b,MAAOA,EACP8O,KAAM3R,KAAK4R,UAAUJ,KAAKxR,MAAM,IAEhCA,KAAK4e,gBACLD,EAAcve,KAAaue,EAAa3e,KAAK4e,gBAE9B,GAAI7M,gBAAa4M,GACvB3M,SAAS,IAAM+L,EAAS,gBACrCtB,EAASpM,SAAYjK,GAA0B,KAAlBA,EAAKiK,WAAoBhH,oBAAkBjD,EAAKiK,UAAajK,EAAKiK,SAAW+N,EAAa,GAAGvb,MACtH7C,KAAK0E,gBACL+X,EAASjV,KAAOxH,KAAKsQ,eAAe9I,KACpCiV,EAASpM,SAAWjK,EAAKiK,UAExBhH,oBAAkBxG,IAAoB,KAAVA,EAGxB7C,KAAKkR,iBAAmBlR,KAAK0e,oBAClC1e,KAAKwe,aAAarB,EAAcnd,KAAKsQ,eAAgBkM,EAAQX,kBAAkB,EAAOzV,EAAMqW,EAAUD,EAAQha,SAH9GxC,KAAKwe,aAAarB,EAAcnd,KAAKsQ,eAAgBkM,EAAQX,kBAAkB,EAAOzV,EAAMqW,EAAUD,EAAQha,SAOrHxC,KAAK0E,eACN1E,KAAK6Z,YAAY2C,EAAQha,QAASga,EAAQhB,OAGlDlZ,EAAapC,UAAU0R,UAAY,SAAUiN,EAAShY,GAC9C7G,KAAKyN,WACLb,YAAU/F,EAAKiY,MAAMtc,SAAU,SAE/Bqc,IACA7e,KAAKwD,cAAe,IAG5BlB,EAAapC,UAAUka,gBAAkB,SAAUpZ,EAAQ2O,GAKvD,IAAK,GAJDnN,GAAUmN,EAAiB3O,EAASA,EAAO2c,mBAC3C9Y,EAAerC,EAAQsC,iBAAiB,mBACxCia,EAAavc,EAAQsC,iBAAiB,gCACtC8C,EAAU5H,KAAK4H,QACVpH,EAAI,EAAGuE,EAAMF,EAAalE,OAAQH,EAAIuE,EAAKvE,IAAK,CACrD,GAAIqE,EAAarE,GAAGmQ,UAAU4J,SAAS,aACnCrV,eAAaL,EAAarE,GAAI,WAAW2E,UACzCuO,SAAOxF,SAAO,SAAWrJ,EAAarE,GAAG0F,GAAI1D,QAE5C,IAAIqC,EAAarE,GAAGmQ,UAAU4J,SAAS,kBACpCva,KAAKwU,iBAAmB3P,EAAarE,GAAG4E,cAAcJ,UAAUC,QAAQ,cAAgB,GACxFC,eAAaL,EAAarE,GAAG4E,cAAe,WAAWD,UAE3DD,eAAaL,EAAarE,GAAI,gBAAgB2E,cAE7C,IAAIN,EAAarE,GAAGmQ,UAAU4J,SAAS,WACxCrV,eAAaL,EAAarE,GAAI,SAAS2E,cAEtC,IAAIN,EAAarE,GAAGmQ,UAAU4J,SAAS,oBACxCrV,eAAaL,EAAarE,GAAI,kBAAkB2E,UAChDuO,SAAOxF,SAAO,SAAWrJ,EAAarE,GAAG0F,GAAI1D,QAE5C,IAAIqC,EAAarE,GAAGmQ,UAAU4J,SAAS,gBACxCrV,eAAaL,EAAarE,GAAI,cAAc2E,cAE3C,IAAIN,EAAarE,GAAGmQ,UAAU4J,SAAS,iBACxCrV,eAAaL,EAAarE,GAAI,eAAe2E,cAE5C,IAAIN,EAAarE,GAAGwE,UAAUC,QAAQ,eAAiB,EAExD,IAAK,GADDsR,GAAU1R,EAAarE,GAAGwE,UACrBuE,EAAI,EAAG2L,EAAOtN,EAAQjH,OAAQ4I,EAAI2L,EAAM3L,IAC7C,GAAI3B,EAAQ2B,GAAG0P,UAAY1C,EAAQtR,QAAQ2C,EAAQ2B,GAAGxC,QAAU,EAAG,CAC/D/G,KAAKgf,gBAAgBpX,EAAQ2B,GAAI1E,EAAarE,GAAG0F,GACjD,OAIRwE,SAASC,eAAe9F,EAAarE,GAAG0F,KACxCwN,SAAO7O,EAAarE,IAG5B,IAAK,GAAIA,GAAI,EAAGuE,EAAMga,EAAWpe,OAAQH,EAAIuE,EAAKvE,IAAK,CACnD,GAAIue,EAAWve,GAAGwE,UAAUC,QAAQ,eAAiB,EAEjD,IAAK,GADDsR,GAAUwI,EAAWve,GAAGwE,UACnBuE,EAAI,EAAG2L,EAAOtN,EAAQjH,OAAQ4I,EAAI2L,EAAM3L,IAC7C,GAAI3B,EAAQ2B,GAAG0P,UAAY1C,EAAQtR,QAAQ2C,EAAQ2B,GAAGxC,QAAU,EAAG,CAC/D/G,KAAKgf,gBAAgBpX,EAAQ2B,GAAIwV,EAAWve,GAAG0F,GAC/C,OAIZwN,SAAOqL,EAAWve,IAGtB,IAAK,GADDye,GAAkBzc,EAAQsC,iBAAiB,+BACtCtE,EAAI,EAAGuE,EAAMka,EAAgBte,OAAQH,EAAIuE,EAAKvE,IACnDkT,SAAOuL,EAAgBze,KAG/B8B,EAAapC,UAAU8e,gBAAkB,SAAU7V,EAAQ+V,GACvD,GAAIjG,EACJ,IAA+B,gBAApB9P,GAAO8P,cAAqDN,KAA5BxP,EAAO8P,SAAS9T,QAA3D,CAMA,GAAIga,IALAlG,EAAW9P,EAAO8P,UAKF9T,OACpB,IAAI8T,EAAS9T,QAAS,CAClB,GAAIia,OAAmB,EACnB1U,UAASC,eAAeuU,KACxBE,EAAmBxT,UAAQlB,SAASC,eAAeuU,GAAS,iBAAiBpa,iBAAiB,gBAE9E,gBAATqa,IACPA,EAAOE,WAASF,EAAMrE,UACf/T,MAAOoC,EAAOpC,MAAOuY,UAAWJ,EAAQK,SAAUH,IAGzDnG,EAAS9T,SAAU4B,MAAOoC,EAAOpC,MAAOuY,UAAWJ,EAAQK,SAAUH,OAUjF9c,EAAapC,UAAUsf,UAAY,SAAUzY,GACzC,GAEIlE,GAFA4c,KACAzW,KAEA0W,IACA1f,MAAKgH,UAAUrG,OAAS,IACxB+e,EAAY3Y,EAAME,MAAMjH,KAAKgH,WAEjC,IAAImK,GAAanR,KAAKmH,QACtB,IAAInH,KAAKmH,SAAS,GACd,IAAK,GAAI3G,GAAI,EAAGkV,EAAOvE,EAAWxQ,OAAQH,EAAIkV,EAAMlV,IAAK,CACrD,GAAIsI,KACJ,IAAI4W,EAAU/e,OAAS,EAGnB,IAAK,GAFDgf,GAAUxO,EAAW3Q,GACrBof,MAAW,GACNrW,EAAI,EAAG2L,EAAOwK,EAAU/e,OAAQ4I,EAAI2L,EAAM3L,IAC/CqW,EAAWF,EAAUnW,GACjBmW,EAAU/e,SAAY4I,EAAI,GAC1B1G,EAAQ8c,EAAQ,GAAKC,GACjB7d,OAAO4d,EAAQ,GAAKC,MAAeD,EAAQ,GAAKC,IAAaD,EAAQ,GAAKC,GAAY,GAAM,IAC5F/c,EAAQ8c,EAAQ,GAAKC,GAAU1M,aAInCyM,EAAUA,EAAQ,GAAKC,OAK/B/c,GAAQsO,EAAW3Q,GAAG,GAAKuG,GACvBhF,OAAOoP,EAAW3Q,GAAG,GAAKuG,MAAYoK,EAAW3Q,GAAG,GAAKuG,IAAUoK,EAAW3Q,GAAG,GAAKuG,GAAS,GAAM,IACrGlE,EAAQsO,EAAW3Q,GAAG,GAAKuG,GAAOmM,WAGpCrQ,KAAS4c,KACXA,EAAS,GAAK5c,GAAS,EACnB6c,EAAU/e,OAAS,EACnBX,KAAK6f,mBAAmB/W,EAAM4W,EAAW7c,GAGzCiG,EAAK,GAAK/B,GAASlE,EAEvBmG,EAAOrC,KAAKmC,IAIxB,MAAOE,IAEX1G,EAAapC,UAAU2f,mBAAqB,SAAUzK,EAAKsK,EAAW7c,GAGlE,IAAK,GAFD5B,GACA6e,EAAYJ,EAAU/e,OAAS,EAC1Bof,EAAI,EAAGA,EAAID,IAAaC,GAC7B9e,EAAMye,EAAUK,KACH3K,KACTA,EAAI,GAAKnU,OAEbmU,EAAMA,EAAI,GAAKnU,EAEnBmU,GAAIsK,EAAUI,IAAcjd,GAEhCP,EAAapC,UAAU8f,kBAAoB,SAAU7O,EAAYpK,GAsC7D,IAAK,GArCD0Y,MACAzW,KACAiX,KACApd,EAAQ,GACRqd,EAAWnZ,EAAM9B,QAAQjF,KAAKgH,WAgC9BmZ,EAASngB,KACJQ,EAAI,EAAGkV,EAAOvE,EAAWxQ,OAAQH,EAAIkV,EAAMlV,KAhCtC,SAAUA,EAAGkV,GACN,IAAbwK,EACArd,EAAQsO,EAAW3Q,GAAG,GAAKuG,IAG3BkZ,EAAOlZ,EAAME,MAAMkZ,EAAOnZ,YAErBoZ,QAAQ,SAAU5d,GAEfK,EADAA,EACQA,EAAM,GAAKL,GAGX2O,EAAW3Q,GAAG,GAAKgC,KAInCT,OAAOoP,EAAW3Q,GAAG,GAAKuG,MAAYoK,EAAW3Q,GAAG,GAAKuG,IAAUoK,EAAW3Q,GAAG,GAAKuG,GAAS,GAAM,IACrGlE,EAAQsO,EAAW3Q,GAAG,GAAKuG,GAAOmM,WAEtC,IAAIpK,KACEjG,KAAS4c,KACXA,EAAS,GAAK5c,GAAS,EACN,IAAbqd,EACApX,EAAK,GAAK/B,GAASlE,EAGnBiG,EAAKmX,EAAKA,EAAKtf,OAAS,IAAMkC,EAElCmG,EAAOrC,KAAKmC,KAKRtI,EAEZ,OAAOwI,IAEX1G,EAAapC,UAAUmgB,kBAAoB,SAAUja,EAAMyH,EAAUrN,EAAG8f,EAAe3W,GACnF,GACI4W,GADAC,GAAY,EAEZC,GAAW,CACfzgB,MAAK0D,iBAAkB,EACnB1D,KAAKmH,SAAS,IACV1H,OAAO4H,KAAKrH,KAAKmH,SAAS,IAAIlC,QAAQmB,EAAKW,QAAU,IACrDyZ,GAAY,EACZD,EAAKvgB,KAAKggB,kBAAkBhgB,KAAKmH,SAAUf,EAAKW,QAGxDyZ,GAAYpa,EAAKwB,SAAkB4Y,GAC9BxgB,KAAKmH,SAASxG,QAAUgJ,EAAOhJ,SAChC8f,GAAW,EAEf,IAAIC,EACJA,IACIvP,WAAYsP,EAAW9W,EAAU6W,EAAYD,EAAKvgB,KAAK2gB,YACvDC,MAAO,GAAIC,UAAOza,EAAKW,QACvBpE,QAAUC,KAAM5C,KAAK8gB,aAAa/Z,MAAOlE,MAAO7C,KAAK8gB,aAAa/Z,OAClEqK,YAAapR,KAAKqI,KAAKC,YAAY,eACnCzF,MAAOyd,EACPS,KAAM,WACNC,MAAO,OACPvP,OAAQzR,KAAKqa,YAAY7I,KAAKxR,KAAMQ,GACpC8Q,MAAOtR,KAAKihB,WAAWzP,KAAKxR,KAAMQ,GAClC0gB,YAAalhB,KAAKmhB,gBAAgB3P,KAAKxR,KAAM6N,EAAW,YAAcrN,GACtEmR,KAAM3R,KAAK4R,UAAUJ,KAAKxR,MAAM,IAEhCA,KAAKohB,YAAcphB,KAAKohB,WAAWC,mBACnCX,EAAmBtgB,KAAasgB,EAAkB1gB,KAAKohB,WAAWC,kBAEtE,IAAIC,GAAiB,GAAIld,eAAYsc,EACrCY,GAAetP,SAAS,IAAMnE,EAAW,YAAcrN,GACvDR,KAAK6Z,YAAYyH,EAAe9e,QAAS8d,EAAe,IAE5Dhe,EAAapC,UAAUihB,gBAAkB,SAAUtT,EAAUhH,GACzD,GAAI7G,KAAKmR,qBAAsBoQ,eAAa,CACxC,GAAI/e,GAAUkI,SAASC,eAAekD,GAClCgH,EAAc3P,eAAa0G,UAAQpJ,EAAS,qBAAqBoC,cAAc,mBAAoB,eACvG5E,MAAKsQ,eAAiBuE,EAAY3C,eAAe2C,EAAYhS,MAC7D,IAAIA,GAAQ7C,KAAKsQ,eAAevJ,MAC5ByZ,GAAY,CACZxgB,MAAKmH,SAAS,KACV1H,OAAO4H,KAAKrH,KAAKmH,SAAS,IAAIlC,QAAQpC,IAAU,IAChD2d,GAAY,GAGD,IADF3d,EAAMoC,QAAQjF,KAAKgH,YACZhH,KAAK0D,kBACrB8c,GAAY,IAGfA,IACD3Z,EAAKgG,QAAS,EACd7M,KAAKwhB,oBAAoBhf,EAASK,MAI9CP,EAAapC,UAAUshB,oBAAsB,SAAUhf,EAASK,GAC5D7C,KAAKyhB,mBAAmBjf,EAASK,IAErCP,EAAapC,UAAUuhB,mBAAqB,SAAUjf,EAASK,GAC3D,GACI6e,GADAjf,EAAQzC,KAER2hB,EAAW,GAAIC,YACf9Y,EAAO9I,KAAK2gB,YAAYkB,cAAa,GAAIhB,UAAQ3S,OAAOrL,IACxDif,EAAiB5c,eAAa1C,EAAS,cAC3Csf,GAAeC,cACf/hB,KAAKgiB,cAAcpW,UAAQpJ,EAAS,2BAA2B4C,eAC/D6c,cAAYrW,UAAQpJ,EAAS,2BAA2B4C,eACxD0D,EAAKoZ,KAAK,SAAUlG,GAEZ0F,EADA1F,EAAEmG,QAAUnG,EAAEmG,OAAOnZ,OACTgT,EAAEmG,OAAOnZ,OAGTgT,EAAEhT,OAElBvG,EAAM0E,SAAW6E,SAAOvJ,EAAM0E,SAAUua,MAAe,GACvDI,EAAe3Q,WAAa1O,EAAMud,kBAAkBvd,EAAM0E,SAAUtE,GACpEJ,EAAMiB,iBAAkB,EACxBqe,cAAYnW,UAAQpJ,EAAS,2BAA2B4C,iBACzDgd,MAAM,SAAUpG,GACf2F,EAASU,OAAOrG,MAGxB1Z,EAAapC,UAAU8hB,cAAgB,SAAUxf,GAC7C,GAAI8f,GAActiB,KAAKuF,cAAc,QAAUC,OAASC,MAAO,iBAC/DjD,GAAQoD,YAAY0c,GACpBN,iBAAgBhhB,OAAQshB,EAAatB,MAAOuB,UAAQC,SAAW,OAAS,UAE5ElgB,EAAapC,UAAU+gB,WAAa,SAAUzgB,EAAGqG,GAC7C,GAAIrE,GAAUkI,SAASC,eAAe9D,EAAKiY,MAAMtc,QAAQ0D,GAAGoG,QAAQ,SAAU,IAC9E,IAAI9J,EAAS,CACT,GAAIK,GAAQqC,eAAa1C,EAAS,eAAeK,KACjD7C,MAAK6Z,YAAYrX,EAASK,EAAOrC,KAGzC8B,EAAapC,UAAUuiB,gBAAkB,SAAUzhB,EAAQoR,EAAUhM,EAAMqW,GACvE,GAAIiG,GAAY9W,UAAQ5K,EAAQ,qBAC5B2hB,EAAeD,EAAU5d,iBAAiB,eAC1C4R,EAAagM,EAAU9d,cAAc,kCACrC8X,EAA4B,iBAAnB1c,KAAK+Q,UAA+B7L,eAAawR,EAAY,gBACpExR,eAAawd,EAAU9d,cAAc,kCAAmC,gBAC1EuE,EAA4B,iBAAnBnJ,KAAK+Q,UAA+B/Q,KAAKmQ,UAAUuM,EAAO7Z,MAAM,IAAM7C,KAAKmQ,UAAUuM,EAAO7Z,MACzG,IAAiC,gBAAtBuP,GAAS6G,cAAqDN,KAA5BvG,EAAS6G,SAAS2J,MAAqB,CAChF,GAAI/b,IAAST,KAAMA,EAAMqI,OAAQiU,EAAUxc,GAAImK,SAAUoM,EAASpM,SAAUtJ,MAAOoC,EAAOpC,MACtFyH,YAAa,wBACjBxO,MAAK4I,QAAQ,cAAe/B,OAE3B,CACD,GAAIoS,GAAW7G,EAAS6G,QACM,iBAAnBA,GAAS2J,MAChBvD,WAASpG,EAAS2J,MAAO9H,SAAUyE,SAAUoD,EAAahiB,OAAS,EAAIgiB,EAAeA,EAAa,GAAIhZ,OAAQvD,EAAKvD,MAChHwN,SAAUoM,EAASpM,SAAUtJ,MAAOoC,EAAOpC,MAAOoK,WAAYhI,EAAOQ,SAEvC,kBAAtByI,GAAS6G,UACrB7G,EAAS6G,SAAS2J,OAAQrD,SAAUoD,EAAahiB,OAAS,EAAIgiB,EAAeA,EAAa,GACtFhZ,OAAQvD,EAAKvD,MAAOwN,SAAUoM,EAASpM,SAAUtJ,MAAOoC,EAAOpC,MAAOoK,WAAYhI,EAAOQ,WAIzGrH,EAAapC,UAAUwb,YAAc,SAAU7N,GAC3C,GAAI0Q,GAAWrZ,eAAawF,SAASC,eAAekD,EAAW,cAAe,eAI9E,OAHuB,iBAAnB7N,KAAK+Q,YACLwN,EAAWrZ,eAAawF,SAASC,eAAekD,EAAW,cAAe,iBAEpD,iBAAnB7N,KAAK+Q,UAA+B/Q,KAAKmQ,UAAUoO,EAAS1b,MAAM,IAAM7C,KAAKmQ,UAAUoO,EAAS1b,QAE3GP,EAAapC,UAAU2iB,gBAAkB,SAAUhV,EAAUiV,EAAaC,GACtE,GAAI3Q,GAAWpS,KAAK0b,YAAY7N,EAChC,IAAIxE,oBAAkB+I,EAASvP,OAC3B,MAAOkgB,GAAWD,GAAe,EAAG,GAAK,EAAIA,KAAmB,EAEpE,IAAIA,GACA,KAAM1Q,EAASvP,gBAAiBjD,QAC5B,OAAQwS,EAASvP,WAIrB,IAAIuP,EAASvP,gBAAiBjD,OAC1B,MAAOwS,GAASvP,MAAM,EAG9B,OAAOuP,GAASvP,OAEpBP,EAAapC,UAAU8iB,kBAAoB,SAAUnV,EAAUzH,EAAMiK,EAAU4S,EAAKC,GAChF,GAAIC,GAEA7C,EADA8C,EAAapjB,KAAK0b,YAAY7N,GAE9BwV,EAA6C,gBAAxBD,GAAWnK,QAOpC,IALIqH,EADAtgB,KAAK0E,eAAiB1E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKsjB,UAAYD,GAA4B,IAAdjd,EAAKvD,MACzFuD,EAAKvD,MAGL7C,KAAK6iB,gBAAgBhV,GAAU,GAAO,GAExC,OAAbwC,GAAkC,UAAbA,IAA0BrQ,KAAKmH,SAASxG,SAAUyiB,EAAWzZ,OAWlF,CACgB,OAAb0G,GAAkC,UAAbA,IAErBiQ,GADA6C,EAAenjB,KAAK0E,eAAiB1E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKsC,EAAKvD,MAAQ7C,KAAK6iB,gBAAgBhV,GAAU,GAAM,IAC1GhE,KAAK,KAErC,IAAI0Z,OAAS,EACbA,IACInS,YAAapR,KAAKqI,KAAKC,YAAY,eACnCkb,MAAOxjB,KAAKqa,YAAY7I,KAAKxR,KAAMijB,IAEnCjjB,KAAKohB,YAAcphB,KAAKohB,WAAWqC,eACnCF,EAASnjB,KAAamjB,EAAQvjB,KAAKohB,WAAWqC,cAElD,IAAIC,GAAW,GAAIC,WAAQJ,EAC3BG,GAAS1R,SAAS,IAAMnE,EAAW,YAAcoV,GACjDS,EAAS7gB,MAAQyd,EACjBoD,EAASrH,eA1BT8G,GAAenjB,KAAK0E,eAAiB1E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKsC,EAAKvD,MAAQ7C,KAAK6iB,gBAAgBhV,GAAU,GAAM,GACtI7N,KAAKqgB,kBAAkB+C,EAAYvV,EAAUoV,EAAKE,EAAaC,EAAWzZ,QACjD,aAArB3J,KAAKyQ,aAA8BzQ,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,EACjFie,EAAYlY,MAAMgW,MAAQ,QAG1BkC,EAAYlY,MAAMgW,MAAQ,KAC1BkC,EAAYlY,MAAM4Y,SAAW,UAsBzCthB,EAAapC,UAAU2jB,kBAAoB,SAAUhW,EAAUzH,EAAMiK,EAAU4S,EAAKC,EAAa9Q,EAAUzR,GACvG,GAAIyiB,GAAapjB,KAAK0b,YAAY7N,GAC9BwV,EAA6C,gBAAxBD,GAAWnK,SAChCkK,EAAenjB,KAAK0E,eAAiB1E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,GAAK9D,KAAKsjB,UAAYD,GAAoC,gBAAfjd,GAAKvD,MAAsBuD,EAAKvD,MAAQ7C,KAAK6iB,gBAAgBhV,GAAU,GAAO,EAC5M,IAAkB,OAAbwC,GAAkC,UAAbA,IAA0BrQ,KAAKmH,SAASxG,SAAUyiB,EAAWzZ,OAWlF,GAAiB,OAAb0G,GAAkC,UAAbA,EAAsB,CAEhD,GAAIyT,IADJX,EAAenjB,KAAK0E,eAAiB1E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKsC,EAAKvD,MAAQ7C,KAAK6iB,gBAAgBhV,GAAU,GAAM,IAC7GhE,KAAK,KAC1Bka,MAAS,EACbA,IACI3S,YAAapR,KAAKqI,KAAKC,YAAY,eACnCkb,MAAOxjB,KAAKqa,YAAY7I,KAAKxR,KAAMijB,IAEnCjjB,KAAKohB,YAAcphB,KAAKohB,WAAWqC,eACnCM,EAAS3jB,KAAa2jB,EAAQ/jB,KAAKohB,WAAWqC,cAElD,IAAID,GAAQ,GAAIG,WAAQI,EACxBP,GAAMxR,SAAS,IAAMnE,EAAW,YAAcoV,GAC9CO,EAAM3gB,MAAQihB,EACdN,EAAMnH,eAEL,CAED,GAAIxa,IADJuQ,EAAWgR,GACSjb,YAAciK,EAASjK,WAAWtG,IAAOuQ,EAASjK,WAAWtG,IAAM,EACnFC,EAAOsQ,EAASjK,YAAciK,EAASjK,WAAWrG,IAAOsQ,EAASjK,WAAWrG,IAAMC,OAAOC,UAC1FwX,EAASpH,EAASoH,OAASpH,EAASoH,OAAS,GAC7C7Y,GAAS,GAAKyF,IACd+c,EAAc/c,EAAKvD,MAAMogB,GAAO7c,EAAKvD,MAAMogB,GAAOjjB,KAAK6iB,gBAAgBhV,GAAU,GAAM,GAE3F,IAAImW,OAAa,EACjBA,IACInhB,MAAQsgB,YAAuBvjB,OAASujB,EAAYF,GAAOE,EAC3D3J,OAAQA,EAAQ3X,IAAKA,EAAKC,IAAKA,EAAKkf,MAAO,OAC3CiD,KAAM7R,EAAS6R,KAAO7R,EAAS6R,KAAO,EACtCxS,OAAQzR,KAAKqa,YAAY7I,KAAKxR,KAAMijB,IAEpCjjB,KAAKohB,YAAcphB,KAAKohB,WAAW8C,sBACnCF,EAAa5jB,KAAa4jB,EAAYhkB,KAAKohB,WAAW8C,qBAE1D,IAAIC,GAAU,GAAIvJ,kBAAeoJ,EACjCG,GAAQnS,SAAS,IAAMnE,EAAW,YAAcoV,GAChDkB,EAAQ3hB,QAAQ2L,aAAa,aAAciE,EAAS1J,MAAQ,UAC5Dyb,EAAQ3hB,QAAQ4hB,QAAUpkB,KAAKqa,YAAY7I,KAAKxR,KAAMijB,OA/CtDE,GAAenjB,KAAK0E,eAAiB1E,KAAK+D,WAAa,GAAK/D,KAAK8D,YAAc,EAAKsC,EAAKvD,MAAQ7C,KAAK6iB,gBAAgBhV,GAAU,GAAM,GACtI7N,KAAKqgB,kBAAkB+C,EAAYvV,EAAUoV,EAAKE,EAAaC,EAAWzZ,QACtE3J,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,GAA0B,aAArBjF,KAAKyQ,YACxDyS,EAAYlY,MAAMgW,MAAQ,QAG1BkC,EAAYlY,MAAM4Y,SAAW,QAC7BV,EAAYlY,MAAMgW,MAAQ,OA2CtC1e,EAAapC,UAAUmkB,mBAAqB,SAAUxhB,EAAO2E,GACzD,GAAI8c,MACAC,EAAS1hB,EAAMoE,MAAM,IACzB,IAAa,WAATO,EACA,MAAO+c,EAGP,KAAK,GAAIxE,GAAI,EAAGyE,EAAOD,EAAO5jB,OAAQof,EAAIyE,EAAMzE,IAC5CuE,EAAO3d,KAAK5E,OAAOwiB,EAAOxE,IAE9B,OAAOuE,IAGfhiB,EAAapC,UAAUukB,UAAY,SAAU5hB,EAAO2W,GAChD,GAAIkL,GACApE,CACJ,IAAI9G,EAAQ,CACR,GAAImL,GAAU3kB,KAAK0Z,KAAKkL,eAAgBC,SAAU,OAAQrd,KAAM,YAChEkd,GAAY1kB,KAAKyZ,UAAUD,GAC3B8G,EAAgBqE,EAAQ9hB,GACpBwG,oBAAkBiX,KAClBA,EAAgBtgB,KAAK0Z,KAAK+K,UAAU5hB,EAAO6hB,QAI/CpE,GAAgB,GAAItY,MAAKnF,EAE7B,OAAOyd,IAEXhe,EAAapC,UAAU4kB,eAAiB,SAAU9jB,EAAQoR,EAAUhM,EAAMqW,EAAUsI,GAIhF,GAHAnY,YAAU5L,EAAOoE,cAAcR,cAAc,kBAAmB,WAChEoB,eAAahF,EAAOoE,cAAcR,cAAc,kBAAmB,UACnEgI,YAAU5L,EAAOoE,cAAcR,cAAc,kBAAmB,UAC5DwN,EAAS6G,WAAa7G,EAAS6G,SAAS9Y,QAAU4kB,GAClD/kB,KAAKyiB,gBAAgBzhB,EAAQoR,EAAUhM,EAAMqW,OAE5C,CACD,GAAIuI,EAEAA,GADkB,YAAlBvI,EAASjV,KACExH,KAAKsQ,eAAe3G,OAAS3J,KAAKsQ,eAAe3G,OAAOhJ,OAAS,EAGjE8b,EAASpM,UAAYoM,EAASpM,SAAS6C,WAAWpG,cAAc7H,QAAQ,YAAc,EAAI,EAAI,CAE7G,IAAI4I,GAAWjC,UAAQ5K,EAAQ,qBAAqBkF,GAChDgd,MAAc,GACd7S,EAAWoM,EAASpM,SAAS6C,UACjC,IAAIlS,EAAOgE,UAAUC,QAAQ,oBAAsB,GAAKjE,EAAOgE,UAAUC,QAAQ,kBAAoB,EAAG,CACpGie,EAAcliB,EAAOoE,cAAcR,cAAc,iBAC7C5E,KAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,GAA0B,aAArBjF,KAAKyQ,YACxDyS,EAAYlY,MAAMgW,MAAQ,OAGT,OAAb3Q,GAAkC,UAAbA,EACrBzD,YAAUsW,GAAc,kBAGxBld,eAAakd,GAAc,iBAGnC,KAAK,GAAI1iB,GAAI,EAAGA,EAAIwkB,EAAUxkB,IAC1B,OAAQic,EAASjV,MACb,IAAK,SAEGxH,KAAKgjB,kBAAkBnV,EAAUzH,EAAMiK,EAAU7P,EAAG0iB,EAExD,MACJ,KAAK,SAEGljB,KAAK6jB,kBAAkBhW,EAAUzH,EAAMiK,EAAU7P,EAAG0iB,EAAa9Q,EAAU4S,EAE/E,MACJ,KAAK,UACDhlB,KAAKilB,kBAAkB7S,EAAUhM,EAAMyH,EAAUrN,EACjD,MACJ,KAAK,OAEG,GAAI8f,GAAgB,GAAItY,MACpB8b,MAAS,GACT3a,MAAS,GACTqQ,EAASpH,EAASoH,OAClB0L,MAAW,GACXC,MAAa,GACbC,EAAQplB,KAAKqI,KAAKC,YAAY,eAC9B+a,EAA2C,gBAAtBjR,GAAS6G,QA6BlC,IA5BI7S,EAAKvD,QAAUwG,oBAAkBmQ,KACjCsK,EAAUkB,EAAW,EAAK5e,EAAKvD,MAAMrC,GAAK4F,EAAKvD,MAC/Cyd,EAAgBtgB,KAAKykB,UAAUX,EAAQtK,IAAW,GAAIxR,OAGrDoK,EAASrL,OAAUqL,EAASnR,MAAOmR,EAASvP,QAEzCyd,EADAlO,EAASvP,gBAAiBmF,MACVoK,EAASvP,MAGT7C,KAAKykB,UAAUrS,EAASvP,MAAOuP,EAASoH,UAG3DpH,EAASoH,QAAUpT,GAAuB,KAAfA,EAAKW,QAEjCyS,GADArQ,EAASnJ,KAAKmQ,UAAU/J,EAAKW,QACbyS,SAEfxZ,KAAK0E,eAAiB1E,KAAKsjB,UAAYD,IAAejd,IAEvDoT,GADArQ,EAASnJ,KAAKmQ,UAAU/J,EAAKW,QACbyS,OACZpT,EAAKvD,OACLihB,EAAUkB,EAAW,EAAK5e,EAAKvD,MAAMrC,GAAK4F,EAAKvD,MAC/Cyd,EAAgBtgB,KAAKykB,UAAUX,EAAQ3a,EAAOqQ,SAG9C8G,EAAgBla,EAAKvD,OAGzB2W,EAAQ,CACR,GAAI6L,GAAYrlB,KAAKyZ,UAAUD,EAC3B6L,GAAUR,UACVM,GACIG,OAAQtlB,KAAKulB,YAAa1iB,MAAOyd,EACjClP,YAAagU,EAAO5L,OAAQ6L,EAAW5T,OAAQzR,KAAKqa,YAAY7I,KAAKxR,KAAMQ,IAE3ER,KAAKohB,YAAcphB,KAAKohB,WAAWoE,kBACnCL,EAAa/kB,KAAa+kB,EAAYnlB,KAAKohB,WAAWoE,kBAE1DN,EAAW,GAAIO,cAAWN,KAG1BA,GACItiB,MAAOyd,EAAegF,OAAQtlB,KAAKulB,YAAanU,YAAagU,EAC7D5L,OAAQ6L,EAAU7L,OAAQ/H,OAAQzR,KAAKqa,YAAY7I,KAAKxR,KAAMQ,IAE9DR,KAAKohB,YAAcphB,KAAKohB,WAAWoE,kBACnCL,EAAa/kB,KAAa+kB,EAAYnlB,KAAKohB,WAAWoE,kBAE1DN,EAAW,GAAIO,cAAWN,QAI9BA,IACIG,OAAQtlB,KAAKulB,YAAa1iB,MAAOyd,EACjClP,YAAagU,EAAO3T,OAAQzR,KAAKqa,YAAY7I,KAAKxR,KAAMQ,IAExDR,KAAKohB,YAAcphB,KAAKohB,WAAWoE,kBACnCL,EAAa/kB,KAAa+kB,EAAYnlB,KAAKohB,WAAWoE,kBAE1DN,EAAW,GAAIO,cAAWN,EAG9B,IADAD,EAASlT,SAAS,IAAMnE,EAAW,YAAcrN,IAC5C4F,EAAKvD,MAAO,CACb,GAAImL,GAAOtD,SAASC,eAAekD,EAAW,YAAcrN,EAC5DR,MAAK6Z,YAAY7L,EAAMsS,EAAe,KAAMtgB,KAAKsD,kBACjDtD,KAAKsD,kBAAmB,OASxDhB,EAAapC,UAAU+kB,kBAAoB,SAAU7S,EAAUhM,EAAMyH,EAAUrN,GAC3E,GACIqC,GACA6iB,EAFAC,GAAU,CAGVtc,qBAAkBjD,EAAKoB,OAAS4K,IAChChM,EAAKoB,KAAO4K,EAAS5K,KAEzB,IAAIkB,EACJ,IAAI0J,EAASzI,OAAQ,CACbA,EAASyI,EAASzI,MACJ,aAAdvD,EAAKoB,MAAuB6B,oBAAkBjD,EAAKvD,OAG9CuP,EAASvP,MACd8iB,EAAUhc,EAAOnJ,GAAGsM,gBAAkBsF,EAASvP,MAAMqQ,WAAWpG,cAErD,IAANtM,IACLmlB,GAAU,GANVA,EAAUhc,EAAOnJ,GAAGsM,gBAAkB1G,EAAKvD,MAAMqQ,WAAWpG,cAQhE4Y,EAAW7iB,EAAQ6F,EAAQiB,EAAOnJ,OAEjC,CACD,GAAImJ,KAAU,GAAM,EACF,aAAdvD,EAAKoB,MAAuB6B,oBAAkBjD,EAAKvD,OAG9CuP,EAASvP,MACd8iB,EAAUhc,EAAOnJ,GAAG0S,WAAWpG,gBAAkBsF,EAASvP,MAAMqQ,WAAWpG,cAEhE,IAANtM,IAEDmlB,EADsB,iBAAfvf,GAAKvD,SACFuD,EAAKvD,OAPnB8iB,EAAUhc,EAAOnJ,GAAG0S,WAAWpG,gBAAkB1G,EAAKvD,MAAMqQ,WAAWpG,cAajD,iBAAf1G,GAAKvD,OAA6B,IAANrC,IACnCmlB,GAAWvf,EAAKvD,OAEpBA,EAAQ8G,EAAOnJ,GAAG0S,WAClBwS,EAAW/b,EAAOnJ,GAClBkI,EAAQ1I,KAAKqI,KAAKC,aAAa,OAAQ,SAAS9H,IAEpD,GAAIolB,EACJA,IACIld,MAAOA,EAAOoC,KAAM+C,EAAW,UAAWgY,QAASF,EAAS9iB,MAAOA,EACnE4O,OAAQzR,KAAKqa,YAAY7I,KAAKxR,KAAMQ,IAEpCR,KAAKohB,YAAcphB,KAAKohB,WAAW0E,mBACnCF,EAAWxlB,KAAawlB,EAAU5lB,KAAKohB,WAAW0E,kBAEtD,IAAIC,GAAc,GAAIC,eAAYJ,EAClCG,GAAY/T,SAAS,IAAMnE,EAAW,YAAcrN,GAChDmlB,GACA3lB,KAAK6Z,YAAYkM,EAAYvjB,QAASkjB,EAAU,GAAG,IAG3DpjB,EAAapC,UAAU+lB,iBAAmB,SAAUvJ,EAAQtW,GACxD,GAAI5F,GAEAuE,EADa2X,EAAOvL,WACHxQ,MACrB,KAAKH,EAAI,EAAGA,EAAIuE,EAAKvE,IACjB,GAAI4F,EAAKiK,WAAaqM,EAAOvL,WAAW3Q,GAAGqC,MACvC,MAAOrC,EAGf,OAAO,IAEX8B,EAAapC,UAAUgmB,oBAAsB,SAAUpK,EAAc3S,GAQjE,MAPInJ,MAAKwD,cAAgBsY,IAErBA,EAAe9b,KAAKmQ,UAAU2L,EAAajZ,QAE3CsG,GAAUA,EAAO8P,UAAY6C,GAAgBrc,OAAO4H,KAAKyU,GAAcnb,OAAS,IAChFmb,EAAa7C,SAAW9P,EAAO8P,UAE5B6C,GAEXxZ,EAAapC,UAAUse,aAAe,SAAUxd,EAAQoR,EAAU0J,EAAcqK,EAAU/f,EAAMqW,EAAUja,GACtG,GACI4jB,GADaplB,EAAO6P,uBACEwV,qBAAqB,SAAS,GACpDC,EAA6B,iBAAnBtmB,KAAK+Q,UAA+B7L,eAAakhB,EAAU,gBACnElhB,eAAakhB,EAAU,gBACzBjd,EAA4B,iBAAnBnJ,KAAK+Q,UAA+B/Q,KAAKmQ,UAAUmW,EAAQzjB,MAAM,IAExE7C,KAAKmQ,UAAUmW,EAAQzjB,MAC7B7C,MAAK8gB,aAAe3X,CACpB,IAAIuT,GAASxX,eAAalE,EAAO4D,cAAc,SAAU,eACrDuhB,KACA/T,EAAW5P,EAAQ0D,GAAGjB,QAAQ,aAAe,EAAImN,EAAWpS,KAAK8gB,cACpDvY,YACTmU,EAAO7Z,MAAQ,KACf6Z,EAAOL,WACPK,EAAOvL,WAAaiB,EAAS7J,UAC7BmU,EAAOvJ,MAAQnT,KAAKimB,iBAAiBvJ,EAAQtW,GAC7CsW,EAAO7Z,MAAQ4Z,EAASpM,SAAWqM,EAAOvL,WAAWuL,EAAOvJ,OAAOtQ,MAC9D7C,KAAK0e,mBAKNhC,EAAOL,YAJPK,EAAOvJ,OAAS,EAChBsJ,EAASpM,SAAWqM,EAAO7Z,MAAQ,IAO/C,IAAIwN,GAAWoM,EAASpM,SAAS6C,WAC7BqT,GAAiB,CACrB,IAAMlW,EAASpL,QAAQ,SAAW,GAAKoL,EAASpL,QAAQ,YAAc,GAAKoL,EAASpL,QAAQ,eAAiB,GAiErGkZ,EAAand,EAAOoE,cAAcR,cAAc,oBAEhDoB,eAAamY,GAAa,UAC1BvR,YAAUuR,GAAa,eApEkF,CAC7G,GAAItQ,GAAWjC,UAAQ5K,EAAQ,qBAAqBkF,EAUpD,IATA4V,EAAe9b,KAAKkmB,oBAAoBpK,EAAc3S,GAClD2S,OAA0CnD,KAA1BmD,EAAa7C,SACzB6C,EAAalU,UACbkU,EAAe9b,KAAKmQ,UAAU/J,EAAKW,QAGf,iBAAnB/G,KAAK+Q,eAAiD4H,KAAjBmD,IAC1CA,EAAe9b,KAAKmQ,UAAU/J,EAAKW,QAEnC+U,GAAgBA,EAAa7C,SAAU,CACvCjZ,KAAKgf,gBAAgBlD,EAAcjO,EAAW,aAC9C,IAAIG,GAAOE,SAAO,IAAML,EAAW,aAAc7M,EAAO2c,mBACpD3P,KAASA,EAAK2C,UAAU4J,SAAS,cACjC7G,SAAOxF,SAAO,IAAML,EAAW,aAAc7M,EAAO2c,qBAEnB,gBAA1B7B,GAAa7C,cAA0DN,KAAjCmD,EAAa7C,SAAS9Y,SAC/Da,EAAO2c,mBAAmBhN,UAAU4J,SAAS,qBAC7Cva,KAAK2T,iBAAiB9F,IAE1B7M,EAAO2c,mBAAmBtY,UAAY,IAO9C,GAJI8gB,IACAnmB,KAAKga,cAAc5T,EAAMwF,UAAQ5K,EAAQ,sBACzChB,KAAKoa,gBAAgBpZ,IAErBhB,KAAK0E,eAAkBgY,GAA2B,KAAjBA,EAAO7Z,MAAe,CAUvD,GATIsG,IACAiJ,EAAS6G,SAAW9P,EAAO8P,UAE3B7G,EAAS6G,WACTrM,YAAU5L,EAAO2c,oBAAqB,oBACtCvL,EAAS6G,SAAW9P,EAAO8P,SAC3BsN,EAAiBvmB,KAAKwmB,kBAAkBpU,EAAUvE,EAAU1E,EAAOpC,MAAOqL,EAASvP,OAC/EwN,EAAUrP,EAAQoF,IAEtBmgB,EAAgB,CAChB,GAAIpI,GAAand,EAAOoE,cAAcR,cAAc,gBAChD5E,MAAKwC,QAAQwC,UAAUC,QAAQ,aAAe,GAA0B,aAArBjF,KAAKyQ,YACxD0N,EAAWnT,MAAMgW,MAAQ,OAGzB7C,EAAWnT,MAAMgW,MAAQ,YAG5B,CACDhb,eAAahF,EAAO2c,oBAAqB,mBACzC,IAAI8I,GAAW,CAEXA,GADkB,YAAlBhK,EAASjV,KACExH,KAAKsQ,eAAe3G,OAAS3J,KAAKsQ,eAAe3G,OAAOhJ,OAAS,EAGhE0P,GAAYA,EAASvD,cAAc7H,QAAQ,YAAc,EAAK,EAAI,CAElF,KAAK,GAAIzE,GAAI,EAAGA,EAAIimB,EAAUjmB,IAAK,CAC/B,GAAIyU,GAAUjV,KAAKuF,cAAc,SAAWC,OAASgC,KAAM,OAAQtB,GAAI2H,EAAW,YAAcrN,IAChGQ,GAAO2c,mBAAmB/X,YAAYqP,IAG9CjV,KAAK8kB,eAAe9jB,EAAQoR,EAAUhM,EAAMqW,EAAU8J,MAWlEjkB,EAAapC,UAAUsmB,kBAAoB,SAAUpU,EAAU3D,EAAQ1H,EAAOsJ,EAAUrP,EAAQoF,GAC5F,GACIS,GADApE,EAAQzC,KAER+kB,GAAa,CACjB,IAAK3S,EAAS6G,SAGT,CACD,GAAiC,gBAAtB7G,GAAS6G,cAAsDN,KAA7BvG,EAAS6G,SAAS9Y,OAM3D,MALA0G,IAAS2H,YAAa,4BAA6BC,OAAQA,EAAQ1H,MAAOA,EAAOsJ,SAAUA,EAAUjK,KAAMA,EACvGsgB,gBAAgB,GACpB1mB,KAAK4I,QAAQ,cAAe/B,EAAM,SAAU8f,GACxC5B,EAAatiB,EAAMmkB,2BAA2BD,EAAoBvU,EAAU3D,EAAQ1H,EAAO/F,KAExF+jB,CAGP,IAAI9P,OAAU,GACVgE,EAAW7G,EAAS6G,QAOxB,KALIhE,EAD2B,gBAApBgE,GAAS9Y,OACNkf,WAASpG,EAAS9Y,OAAQ2a,SAAU/T,MAAOA,EAAOsJ,SAAUA,IAG5D4I,EAAS9Y,QAAS4G,MAAOA,EAAOsJ,SAAUA,cAEjCwW,SACnB5R,EAAQ/O,GAAKuI,EAAS,aACtB7B,YAAUqI,GAAU,cACpBjU,EAAO2c,mBAAmB/X,YAAYqP,GAClClO,EAAM9B,QAAQ,KAAO,GACrB2H,YAAUqI,GAAU,KAAOlO,OAG9B,IAAIkO,YAAmBrV,OAAO,CAC/BgN,WAASqI,EAAS,aAClB,KAAK,GAAIzU,GAAI,EAAGkV,EAAOT,EAAQtU,OAAQH,EAAIkV,EAAMlV,IAC7CyU,EAAQzU,GAAG0F,GAAKuI,EAAS,YAAcjO,EACvCQ,EAAO2c,mBAAmB/X,YAAYqP,EAAQzU,IAItD,MADAoM,aAAU5L,EAAO2c,oBAAqB,qBAC/B,EApCX,OAAO,GAwCfrb,EAAapC,UAAU0mB,2BAA6B,SAAU/f,EAAMuL,EAAU3D,EAAQ1H,EAAO/F,GACzF,GAAI6F,EAAK6f,eAAgB,CACrB,GAAIzR,OAAU,EACdjV,MAAK8mB,iBAAmB9mB,KAAK2O,gBAAsByD,EAAS6G,SAA0B7G,EAAS6G,UAC/F,IAAIrK,GAAa5O,KAAKwC,QAAQ0D,GAAKa,CAEnC,IAAI/G,KAAK+O,QACLkG,EAAUjV,KAAK8mB,iBAAiBjgB,EAAM7G,KAAMyO,EAAQG,GAAY,GAChE5N,EAAO2c,mBAAmB/X,YAAYqP,OAErC,IAAIjV,KAAKgP,UAAW,CACrB,GAAI+X,GAAc/mB,KAAK8mB,iBAAiBjgB,EAAM7G,KAAMyO,EAAQG,EAC5DqG,GAAuC,IAA5B8R,EAAY,GAAG7X,SAAkB6X,EAAY,GAAKA,EAAY,GACzE/lB,EAAO2c,mBAAmB/X,YAAYqP,OAEjCjV,MAAKmP,QACV8F,EAAUjV,KAAK8mB,iBAAiBjgB,EAAM7G,KAAM,WAAY4O,GAExDQ,SAAO6F,EAASjU,EAAO2c,sBAGvB1I,EAAUjV,KAAK8mB,iBAAiBjgB,EAAM7G,KAAM,WAAY4O,GAAY,GACpE5N,EAAO2c,mBAAmB/X,YAAYqP,GAI1C,OAFArI,aAAU5L,EAAO2c,oBAAqB,oBACtC3d,KAAK0P,wBACE,EAGP,OAAO,GAGfpN,EAAapC,UAAU8mB,aAAe,SAAUxkB,EAAS4D,GACrD,GAAI6c,GAAM,CACNzgB,GAAQwC,UAAUC,QAAQ,eAAiB,IAC3Cge,EAAM,EAEV,IAAIgE,GAAczkB,EAAQwC,UAAUiC,MAAM,OAAOgc,GAC7CziB,EAAIyS,SAASzQ,EAAQ0D,GAAG0P,OAAO,GAAI,EACvC,QAAQqR,GACJ,IAAK,WAED,GAAIpkB,GAAQqC,eAAa1C,EAASykB,GAAapkB,KAC/CuD,GAAKvD,MAAmB,KAAVA,EAAgBA,MAAQ8V,EACtC,MACJ,KAAK,UAGL,IAAK,eACDvS,EAAKvD,MAAQqC,eAAa1C,EAASykB,GAAapkB,KAChD,MACJ,KAAK,QAED,GAAIqkB,GAAchiB,eAAa1C,EAASykB,EACpCC,GAAYrB,UACc,iBAAfzf,GAAKvD,MACZuD,EAAKvD,MAA8B,SAAtBqkB,EAAYrkB,MAGrB7C,KAAKmQ,UAAU/J,EAAKW,OAAO4C,OAC3BvD,EAAKvD,MAAQqkB,EAAYrkB,MAGzBuD,EAAKvD,MAA8B,SAAtBqkB,EAAYrkB,OAIrCqkB,EAAYC,SACZ,MACJ,KAAK,iBACG/gB,EAAKiK,SAASpL,QAAQ,YAAc,GACV,gBAAfmB,GAAKvD,QACZuD,EAAKvD,UAETuD,EAAKvD,MAAMrC,GAAK0E,eAAa1C,EAASykB,GAAapkB,OAGnDuD,EAAKvD,MAAQqC,eAAa1C,EAASykB,GAAapkB,KAEpD,MACJ,KAAK,aAED,GAAIsG,GAASnJ,KAAKmQ,UAAU/J,EAAKW,OAE7ByS,EAASxZ,KAAKyZ,UAAUtQ,EAAOqQ,QAE/B4N,EAAeliB,eAAa1C,EAASykB,GAAapkB,KAClDuD,GAAKiK,SAASpL,QAAQ,YAAc,GACV,gBAAfmB,GAAKvD,QACZuD,EAAKvD,UAETuD,EAAKvD,MAAMrC,GAAKR,KAAK0Z,KAAKC,WAAWyN,EAAc5N,IAE9CnQ,oBAAkBmQ,EAAOA,SAAW4N,EACzChhB,EAAKvD,MAAQ7C,KAAK0Z,KAAKC,WAAWyN,GAGlChhB,EAAKvD,MADAukB,EACQpnB,KAAK0Z,KAAKC,WAAWyN,EAAc5N,GAGnC4N,CAEjB,MACJ,KAAK,cACDhhB,EAAKvD,MAAQqC,eAAa1C,EAASykB,GAAapkB,QAI5DP,EAAapC,UAAU2Z,YAAc,SAAU7Y,EAAQsf,EAAe9f,EAAG6mB,GASrE,IARA,GAIIxS,GACAiF,EALA/O,EAAYa,UAAQ5K,EAAQ,sBAC5BoF,EAAOpG,KAAKmN,eAAepC,GAC3BgD,EAAWnC,UAAQ5K,EAAQ,qBAC3BmS,EAAQ,EAGRjJ,EAAUa,EAAU7E,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACtD+G,EAAcjN,KAAKkN,cAAclN,KAAKoG,MACnC2H,GAAgD,OAApCA,EAAS8C,wBACxB9C,EAAWA,EAAS8C,uBACpBsC,GAEJ,IAAI9C,GAAWjK,EAAKC,MAAM8M,GAAO9C,SAAWjK,EAAKC,MAAM8M,GAAO9C,SAAS6C,WAAa,GAEhFzE,GADJV,EAAWnC,UAAQ5K,EAAQ,sBACLkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,GACxD,IAAI0F,UAAQ5K,EAAQ,mBAAqB4K,UAAQ5K,EAAQ,sBAAuB,CACxEhB,KAAKuc,eACLvb,EAAShB,KAAKuc,cAElB1H,EAAiC,iBAAnB7U,KAAK+Q,UAA+B7L,eAAalE,EAAQ,gBACnEkE,eAAalE,EAAQ,eAEzB,IAAImI,GAA4B,iBAAnBnJ,KAAK+Q,UAA+B/Q,KAAKmQ,UAAU0E,EAAYhS,MAAM,IAE5E7C,KAAKmQ,UAAU0E,EAAYhS,QAC5B7C,KAAK0E,eAAiB0B,EAAKC,MAAM8M,GAAOpM,OACzCX,EAAKC,MAAM8M,GAAOpM,MAAM+F,gBAAkB3D,EAAOpC,MAAM+F,iBACjDiB,EAASjJ,iBAAiB,kBAAqBuL,EAASpL,QAAQ,SAAW,IACzEoL,EAASpL,QAAQ,UAAY,KACjCmB,EAAKC,MAAM8M,GAAOtQ,MAAQ,IAGlC7C,KAAKsQ,eAAiBtQ,KAAKmQ,UAAUnQ,KAAKsQ,eAAevJ,OACzDX,EAAKC,MAAM8M,GAAOpM,MAAQ/G,KAAKsQ,eAAevJ,MAC9CX,EAAKC,MAAM8M,GAAO3L,KAAOxH,KAAKsQ,eAAe9I,KAC7CpB,EAAKC,MAAM8M,GAAOzK,MAAQ1I,KAAKsQ,eAAe5H,KAC9C,IAAI6Q,GAAc3N,UAAQ5K,EAAQ,kBAE9BwB,GADJ+W,EAAcA,GAA4B3N,UAAQ5K,EAAQ,uBAChC2c,mBAAmB/Y,cAAc,kBAC3DpC,GAAUA,GAAoB+W,EAAYoE,mBAAmBA,mBAAmB/Y,cAAc,mBAC9FyL,EAAWnL,eAAa1C,EAAS,gBAAgBK,MAAMqQ,WACvD9M,EAAKC,MAAM8M,GAAO9C,SAAWA,CAE7B,IAAIiX,GAAiB/N,EAAYoE,mBAAmBA,mBAChD4J,EAAaD,EAAexiB,iBAAiB,kBAC7CyiB,GAAW5mB,OAAS,IACpB4mB,EAAaD,EAAexiB,iBAAiB,kBAE7CyiB,EAAW5mB,OAAS,IACpB4mB,EAAaD,EAAexiB,iBAAiB,gBAEjDgV,GAAe5P,QAASA,EAASuE,OAAQA,EAAQ5L,MAAOuD,EAAKC,MAAM8M,GAAOpM,MAAOS,KAAM,QACvF,KAAK,GAAIggB,GAAM,EAAGA,EAAMD,EAAW5mB,OAAQ6mB,IACnCnX,EAASpL,QAAQ,SAAW,GAAKoL,EAASpL,QAAQ,UAAY,EAC9DmB,EAAKC,MAAM8M,GAAOtQ,MAAQ,KAG9B7C,KAAKgnB,aAAaO,EAAWC,GAAMphB,EAAKC,MAAM8M,GAE7CnT,MAAK0E,eACN1E,KAAK4I,QAAQ,SAAUkR,GAEvB9Z,KAAKwU,iBAAmBpO,EAAKC,MAAM8M,GAAOpM,OAAS/F,EAAOoE,cAAcJ,UAAUC,QAAQ,cAAgB,GAC1GC,eAAalE,EAAOoE,cAAe,WAAWD,UAElDnF,KAAKoN,YAAYH,EAAajN,KAAKkN,cAAclN,KAAKoG,MAAO,aAE5D,IAAIwF,UAAQ5K,EAAQ,oBAAqB,CAC1C6T,EAAc3P,eAAalE,EAAQ,gBACnCoF,EAAKC,MAAM8M,GAAO9C,SAAWwE,EAAYhS,MAAMqQ,UAC/C,IAAI6C,GAAYhI,EAASjJ,iBAAiB,gCAC1CgV,IAAe5P,QAASA,EAASuE,OAAQA,EAAQ5L,MAAOgS,EAAYhS,MAAO2E,KAAM,YAC7ExH,KAAKwU,iBAAmBpO,EAAKC,MAAM8M,GAAO9C,UAAYrP,EAAOoE,cAAcJ,UAAUC,QAAQ,cAAgB,GAC7GC,eAAalE,EAAOoE,cAAe,WAAWD,UAE9C4Q,EAAUpV,OAAS,KAAOoV,EAAU,GAAG/Q,UAAUC,QAAQ,eAAiB,KAC1EmB,EAAKC,MAAM8M,GAAOtQ,SAEtB,KAAK,GAAI4kB,GAAM,EAAGA,EAAM1R,EAAUpV,OAAQ8mB,IAClCrhB,EAAKC,MAAM8M,GAAO9C,SAASpL,QAAQ,SAAW,GAAKmB,EAAKC,MAAM8M,GAAO9C,SAASpL,QAAQ,UAAY,EAClGmB,EAAKC,MAAM8M,GAAOtQ,MAAQ,KAGrBkT,EAAU0R,GAAK9W,UAAU4J,SAAS,eAG3Cva,KAAKgnB,aAAajR,EAAU0R,GAAMrhB,EAAKC,MAAM8M,GAE5CnT,MAAK0E,eACN1E,KAAK4I,QAAQ,SAAUkR,GAE3B9Z,KAAKoN,YAAYH,EAAajN,KAAKkN,cAAclN,KAAKoG,MAAO,gBAExDwF,WAAQ5K,EAAQ,mBACrBhB,KAAK0nB,gBAAgB1mB,EAAQsf,EAAela,EAAM+M,EAAOpI,EAAWgD,EAAUvN,GACzE6mB,GACDrnB,KAAKoN,YAAYH,EAAajN,KAAKkN,cAAclN,KAAKoG,MAAO,WAIzE9D,EAAapC,UAAUkN,YAAc,SAAUua,EAAYC,EAAWpgB,GAC9CqgB,KAAKC,WAAY9kB,UAAW2kB,EAAW3kB,UAAWD,IAAK4kB,EAAW5kB,IAAKqD,KAAMuhB,EAAWthB,UACzFwhB,KAAKC,WAAY9kB,UAAW4kB,EAAU5kB,UAAWD,IAAK6kB,EAAU7kB,IAAKqD,KAAMwhB,EAAUvhB,UAE/FrG,KAAK0E,eACN1E,KAAK4I,QAAQ,cAAgBmf,aAAcJ,EAAYvhB,KAAMwhB,EAAWpgB,KAAMA,MAI1FlF,EAAapC,UAAUwnB,gBAAkB,SAAU1mB,EAAQsf,EAAela,EAAM+M,EAAOpI,EAAWgD,EAAUvN,GACxG,GAAIsZ,GACAkO,EACAC,GAAe,KAAM,UAAW,QAAS,aAI7C,IAHI7hB,EAAKC,MAAM8M,GAAO9C,WAClB2X,EAAO5hB,EAAKC,MAAM8M,GAAO9C,SAAS6C,WAAWpG,eAE3B,OAAlBwT,EAAwB,CACxB,GAAItf,EAAOgE,UAAUC,QAAQ,kBAAoB,GAAgC,WAA3BmB,EAAKC,MAAM8M,GAAO3L,OACnExH,KAAKoD,WAAY,CAGlB,IAAK,GAFD0gB,MACAoE,EAAmB5H,EACdP,EAAI,EAAGyE,EAAO0D,EAAiBvnB,OAAQof,EAAIyE,EAAMzE,IACnB,gBAAxBmI,GAAiBnI,IACxB+D,EAAOnd,KAAKwhB,WAAWD,EAAiBnI,IAG5C+D,GAAOnjB,SACP2f,EAAgBwD,GAGxB,GAAI9jB,KAAKoD,WACLgD,EAAKC,MAAM8M,GAAOtQ,MAAQyd,EAC1BxG,GAAe5P,QAASa,EAAU7E,GAAIuI,OAAQV,EAAS7H,GAAIrD,MAAOuD,EAAKC,MAAM8M,GAAOtQ,MAAO2E,KAAM,SAC5FxH,KAAK0E,eACN1E,KAAK4I,QAAQ,SAAUkR,OAG1B,IAAI9Y,EAAOgE,UAAUC,QAAQ,WAAa,GAAKjE,EAAOgE,UAAUC,QAAQ,cAAgB,EACrFgjB,EAAYhjB,QAAQ+iB,IAAS,EAC7B5hB,EAAKC,MAAM8M,GAAOtQ,MAAMrC,GAAK8f,EAG7Bla,EAAKC,MAAM8M,GAAOtQ,MAAQyd,MAG7B,IAAItf,EAAOgE,UAAUC,QAAQ,YAAc,EAC5CmB,EAAKC,MAAM8M,GAAOtQ,MAAQyd,MAEzB,IAAItf,EAAOgE,UAAUC,QAAQ,kBAAoB,EAClDmB,EAAKC,MAAM8M,GAAOtQ,MAAQyd,MAEzB,IAAItf,EAAOgE,UAAUC,QAAQ,cAAgB,EACjC,OAAT+iB,GAA0B,UAATA,GACb5hB,EAAKC,MAAM8M,GAAO3L,KAClBpB,EAAKC,MAAM8M,GAAOtQ,MAAQ7C,KAAKqkB,mBAAmB/D,EAAela,EAAKC,MAAM8M,GAAO3L,OAOvFpB,EAAKC,MAAM8M,GAAOtQ,MAAQyd,MAG7B,IAAItf,EAAOgE,UAAUC,QAAQ,iBAAmB,EAAG,CACpD,GAAIuU,GAASxZ,KAAKyZ,UAAUzZ,KAAKmQ,UAAUnQ,KAAKsQ,eAAevJ,OAAOyS,OAClEA,GAAOhS,OACHygB,EAAYhjB,QAAQ+iB,IAAS,GACU,gBAA5B5hB,GAAKC,MAAM8M,GAAOtQ,QACzBuD,EAAKC,MAAM8M,GAAOtQ,UAEtBuD,EAAKC,MAAM8M,GAAOtQ,MAAMrC,GAAKR,KAAK0Z,KAAKC,WAAW2G,EAAe9G,IAGjEpT,EAAKC,MAAM8M,GAAOtQ,MAAQ7C,KAAK0Z,KAAKC,WAAW2G,EAAe9G,IAI1ExZ,KAAKga,cAAc5T,EAAM2H,EAAUoF,OAG/BnS,GAAOgE,UAAUC,QAAQ,iBAAmB,GACxCgjB,EAAYhjB,QAAQ+iB,IAAS,GACU,gBAA5B5hB,GAAKC,MAAM8M,GAAOtQ,QACzBuD,EAAKC,MAAM8M,GAAOtQ,UAEtBuD,EAAKC,MAAM8M,GAAOtQ,MAAMrC,GAAK8f,GAOjCla,EAAKC,MAAM8M,GAAOtQ,MAAQyd,GAItChe,EAAapC,UAAU8Z,cAAgB,SAAU5T,EAAM2H,EAAUoF,GACxD9J,oBAAkB8J,KACnB/M,EAAOA,EAAKC,MAAM8M,GAEtB,IAAIiV,GAAmC,gBAAhBhiB,QACvB,IAAIpG,KAAKwU,kBAAoBnL,oBAAkB8J,KAAWiV,EAAWhiB,EAAKvD,MAAMlC,OAAS,EAAIyF,EAAKvD,QAAS,CACvG,GAAIoS,GAAUlH,EAASjJ,iBAAiB,2BACpCmQ,GAAQtU,OAAS,IACbsU,EAAQ,GAAGjQ,UAAUC,QAAQ,cAAgB,EAC7CC,eAAa+P,EAAQ,GAAI,WAAW9P,UAE/B8P,EAAQ,GAAG7P,cAAcJ,UAAUC,QAAQ,cAAgB,GAChEC,eAAa+P,EAAQ,GAAG7P,cAAe,WAAWD,UAElD8P,EAAQ,IAAMA,EAAQ,GAAG7P,cAAcJ,UAAUC,QAAQ,cAAgB,GACzEC,eAAa+P,EAAQ,GAAG7P,cAAe,WAAWD,aAKlE7C,EAAapC,UAAUuZ,UAAY,SAAUD,GACzC,GAAI6O,EAmBJ,OAlBI7O,GACwB,oBACpB6O,GAAkB7gB,KAAM,YACT,UAAXgS,GAAiC,QAAXA,GACtB6O,EAAc7gB,KAAO,OACrB6gB,EAAcxD,SAAWrL,GAGzB6O,EAAc7O,OAASA,GAI3B6O,GAAkB7gB,KAAM,WAAYqd,SAAUrL,EAAOqL,UAIzDwD,GAAkB7gB,KAAM,OAAQqd,SAAU,OAEvCwD,GAEX/lB,EAAapC,UAAUooB,eAAiB,SAAUC,EAAUniB,EAAMN,GAC9D,GAAI0iB,GAAWpiB,EAAKC,MAChBoiB,IACJ,KAAK3iB,EAAQ,CACT,IAAK,GAAIyD,GAAI,EAAG2L,EAAOsT,EAAS7nB,OAAQ4I,EAAI2L,EAAM3L,KAC9CnD,EAAOoiB,EAASjf,IACPlD,OACLoiB,EAAY9hB,KAAKP,EAGzB,OAAOqiB,GAAYF,GAEvB,MAAOniB,IASX9D,EAAapC,UAAUiF,QAAU,WAG7B,GAFAnF,KAAKyD,WAAY,EACEzD,KAAKwC,QACxB,CAGA,GAAIA,GACAhC,EACAuE,EACA8O,CACJnS,GAAOxB,UAAUiF,QAAQvE,KAAKZ,KAC9B,IAAI0oB,EAGJ,KADA3jB,GADAvC,EAAUxC,KAAKwC,QAAQsC,iBAAiB,oBAC1BnE,OACTH,EAAI,EAAGA,EAAIuE,EAAKvE,IACjB0E,eAAa1C,EAAQhC,GAAI,gBAAgB2E,UACzCuO,SAAOlR,EAAQhC,GAGnB,KADAqT,EAAU7T,KAAKwC,QAAQsC,iBAAiB,uCACnCtE,EAAI,EAAGA,EAAIqT,EAAQlT,OAAQH,IAC5B0E,eAAa2O,EAAQrT,GAAI,WAAW2E,SAIxC,KADAJ,GADAvC,EAAUxC,KAAKwC,QAAQsC,iBAAiB,8CAC1BnE,OACTH,EAAI,EAAGA,EAAIuE,EAAKvE,IACb0E,eAAa1C,EAAQhC,GAAI,gBACzB0E,eAAa1C,EAAQhC,GAAI,gBAAgB2E,UAGzCD,eAAa1C,EAAQhC,GAAI,gBAAgB2E,UAE7CuO,SAAOlR,EAAQhC,GAGnB,KADAqT,EAAU7T,KAAKwC,QAAQsC,iBAAiB,yCACnCtE,EAAI,EAAGA,EAAIqT,EAAQlT,OAAQH,IAC5B0E,eAAa2O,EAAQrT,GAAI,WAAW2E,SAIxC,KADAJ,GADAvC,EAAUxC,KAAKwC,QAAQsC,iBAAiB,gDAC1BnE,OACTH,EAAI,EAAGA,EAAIuE,EAAKvE,IACb0E,eAAa1C,EAAQhC,GAAI,kBACzB0E,eAAa1C,EAAQhC,GAAI,gBAAgB2E,UACzCuO,SAAOlR,EAAQhC,IAIvB,KADAqT,EAAU7T,KAAKwC,QAAQsC,iBAAiB,sCACnCtE,EAAI,EAAGA,EAAIqT,EAAQlT,OAAQH,IAC5B0E,eAAa2O,EAAQrT,GAAI,WAAW2E,SAWxC,IATAnF,KAAK0E,eAAgB,EACrB1E,KAAK2oB,eACL3oB,KAAKiG,UAAUjG,KAAKwC,QAAQ0D,GAAK,YAAc,GAC/ClG,KAAKwC,QAAQ6C,UAAY,GAErBrF,KAAK4oB,SAAW5oB,KAAK4oB,QAAQjoB,QAC7BX,KAAK2T,kBAET+U,EAAehe,SAAS5F,iBAAiB,4BAErC,IAAKtE,EAAI,EAAGA,EAAIkoB,EAAa/nB,OAAQH,IACjCkoB,EAAaloB,GAAGod,QAGxBjN,aAAU3Q,KAAKwC,YAAc,QAAS,eAAgB,aACtDxC,KAAKyD,WAAY,IASrBnB,EAAapC,UAAU2oB,SAAW,SAAUziB,EAAM8D,GAC9CA,EAAUlK,KAAKwC,QAAQ0D,GAAK,IAAMgE,EAClClK,KAAKsjB,UAAW,CAChB,KAAK,GAAI9iB,GAAI,EAAGuE,EAAMqB,EAAKzF,OAAQH,EAAIuE,EAAKvE,IACxCR,KAAK2N,eAAejD,SAASC,eAAeT,GAAU9D,EAAK5F,GAE/DR,MAAKsjB,UAAW,GASpBhhB,EAAapC,UAAUiY,UAAY,SAAU2Q,EAAQ5e,GACjD,GAAIlK,KAAKqD,cAAgBrD,KAAKwC,QAAQsC,iBAAiB,sBAAsBnE,QAAUX,KAAKwN,cAAe,CACvGtD,EAAUlK,KAAKwC,QAAQ0D,GAAK,IAAMgE,CAClC,IAAIa,GAAYL,SAASC,eAAeT,GACpC9D,EAAOpG,KAAKmN,eAAepC,EAE/B,IADe+d,EAAOnoB,OACR,CACVX,KAAKsjB,UAAW,CAChB,KAAK,GAAI9iB,GAAI,EAAGuE,EAAM+jB,EAAOnoB,OAAQH,EAAIuE,EAAKvE,IAC1CR,KAAK8C,aAAgBG,SAAU6lB,EAAOtoB,GAAGyC,SAAUD,UAAW8lB,EAAOtoB,GAAGwC,UACpED,IAAK+lB,EAAOtoB,GAAGuC,KACnB/C,KAAK+oB,YAAYD,EAAOtoB,GAAIuK,GAAW,EAAO+d,EAAOtoB,GAAGuC,IAE5D/C,MAAKsjB,UAAW,MAEf,CACD,GAAItgB,GAAY,MACZD,GAAM,EACNE,GAAW,CACXjD,MAAK8C,cACLE,EAAYhD,KAAK8C,YAAYE,UAC7BD,EAAM/C,KAAK8C,YAAYC,IACvBE,EAAWjD,KAAK8C,YAAYG,UAE5BjD,KAAK8D,WAAa,EACd9D,KAAK+F,mBACLK,EAAKC,MAAMM,MAAO3D,UAAaA,EAAWD,IAAOA,EAAKsD,WAGtDD,EAAKC,MAAMM,MAAO3D,UAAaA,EAAWqD,WAI1CrG,KAAK+F,mBACLK,EAAKC,MAAMgN,OAAOrT,KAAK8D,WAAa,EAAG,GAAKd,UAAWA,EAAWD,IAAKA,EAAKsD,SAAWpD,SAAUA,IAGjGmD,EAAKC,MAAMgN,OAAOrT,KAAK8D,WAAa,EAAG,GAAKd,UAAWA,EAAWqD,SAAWpD,SAAUA,IAI9FjD,KAAK6F,gBACN7F,KAAKsG,qBAAqByE,EAAW3E,KAIjD9D,EAAapC,UAAU8oB,YAAc,WAgCjC,GA/BAhpB,KAAK4P,eAAgB,EACjB5P,KAAK6R,UACLjF,YAAU5M,KAAKwC,SAAUxC,KAAK6R,SAASvF,QAAQ,OAAQ,KAAK2c,OAAOhiB,MAAM,MAEzEjH,KAAKyN,WACLb,YAAU5M,KAAKwC,SAAU,SAEzBxC,KAAKghB,QACLhhB,KAAKwC,QAAQwI,MAAMgW,MAAQhhB,KAAKghB,OAEhChhB,KAAKoL,SACLpL,KAAKwC,QAAQwI,MAAMI,OAASpL,KAAKoL,QAEjCpL,KAAKoG,KAAKC,MAAM1F,OAChBX,KAAK0E,eAAgB,EAGrB1E,KAAK8L,iBAAgB,EAAO9L,KAAKwC,SAEjC+f,UAAQC,UAAiC,aAArBxiB,KAAKyQ,aACrB8R,UAAQC,WACRxiB,KAAKwC,QAAQwI,MAAMgW,MAAQ,OAC3BhhB,KAAKwC,QAAQmO,UAAUC,IAAI,aAE/B5K,cAAYhG,KAAKwC,QAAQsC,iBAAiB,qBAAsB,qBAChE8H,WAAS5M,KAAKwC,QAAQsC,iBAAiB,qBAAsB,mBAC7D9E,KAAKyQ,YAAc,YAGnBzQ,KAAKyQ,YAAc,aAEnBzQ,KAAKkpB,YACDlpB,KAAK0E,cACL1E,KAAKwK,gBAGLxK,KAAKkM,4BAGR,CACD,GAAIlM,KAAK4H,QAAQjH,QAAUX,KAAK0E,cAAe,CAC3C1E,KAAK8L,iBAAgB,EAAO9L,KAAKwC,QAASxC,KAAKoG,KAAKpD,WAAW,EAAOhD,KAAKoG,KAAKrD,KAAK,EAAO/C,KAAKoG,KACjG,IAAI2F,GAASC,YAAWhM,KAAKoG,SAAU,EACvCpG,MAAKmD,aAAc,EACnBnD,KAAKiM,cAAcF,GACnB/L,KAAKmD,aAAc,MAEdnD,MAAK4H,QAAQjH,QAClBX,KAAK2N,eAAe3N,KAAKwC,QAAQoC,cAAc,yBAEnD5E,MAAKmpB,cACDnpB,KAAKopB,UACLppB,KAAKqpB,gBAIT,KAAK,GAFDC,GAAUtpB,KAAKwC,QAAQsC,iBAAiB,eACxCykB,MAAS,GACJ/oB,EAAI,EAAGA,EAAI8oB,EAAQ3oB,OAAQH,IAChC+oB,EAASD,EAAQ9N,KAAKhb,GACtBsX,eAAayR,GAAUxR,SAAU,aAI7CzV,EAAapC,UAAUsK,cAAgB,WACnC,GAAIgf,GAAcxpB,KAAKuF,cAAc,OACjCC,OACIC,MAAO,oBACPS,GAAIlG,KAAKwC,QAAQ0D,GAAK,sBAG1BujB,EAAWzpB,KAAKuF,cAAc,YAAcC,OAASC,MAAO,iBAAkB2jB,SAAU,QAAUM,OAAQ,qBAC1GC,EAAW3pB,KAAKuF,cAAc,UAAYC,OAASgC,KAAM,SAAU/B,MAAO,sDAC1EmkB,EAAU5pB,KAAKuF,cAAc,OAASC,OAASC,MAAO,qBAC1D+jB,GAAY5jB,YAAY6jB,GACxBA,EAASve,YAAclL,KAAKmL,gBAAgBnL,KAAKoG,MACjDujB,EAASze,YAAclL,KAAKqI,KAAKC,YAAY,QAC7CshB,EAAQhkB,YAAY+jB,GACpBH,EAAY5jB,YAAYgkB,GACxB5pB,KAAKwC,QAAQoD,YAAY4jB,IAE7BlnB,EAAapC,UAAUgM,sBAAwB,WAC3C,GAAI2d,GAAe7pB,KAAKuF,cAAc,OAClCC,OACIC,MAAO,0BACPmR,MAAO5W,KAAKqI,KAAKC,YAAY,sBAGrCtI,MAAKwC,QAAQoC,cAAc,mBAAmBgB,YAAYikB,IAE9DvnB,EAAapC,UAAU2H,WAAa,WACS,eAArC7H,KAAK8pB,cAAchd,cACnB9M,KAAK4H,QAAU,GAAI2Z,eAAYvhB,KAAK4H,SAASmiB,cAAa,GAAIlJ,UAAQmJ,WAAW,UAEvC,cAArChqB,KAAK8pB,cAAchd,gBACxB9M,KAAK4H,QAAU,GAAI2Z,eAAYvhB,KAAK4H,SAASmiB,cAAa,GAAIlJ,UAAQoJ,OAAO,YAGrF3nB,EAAapC,UAAUgqB,iBAAmB,WAGtC,GAFAlqB,KAAKwC,QAAQ6C,UAAY,GACzBrF,KAAKoX,eAAiB,GACjBpX,KAAK6F,eACN,GAAI7F,KAAK+F,oBACL,GAAI/F,KAAK+F,mBAAoB,CACzB,GAAIgQ,GAAY/V,KAAKuF,cAAc,UAAYC,OAASgC,KAAM,SAAU/B,MAAO,gBAC/EzF,MAAK+K,UAAUnG,cAAc,gBAAgB0J,aAAayH,EAAW/V,KAAK+K,UAAUnG,cAAc,yBAItG5E,MAAK+K,UAAUnG,cAAc,gBAAgBgZ,QAGrD5d,MAAKmG,eAAgBC,KAAMpG,KAAKmqB,cAAcnqB,KAAKoG,QAAS,GAC5DpG,KAAKgpB,eAET1mB,EAAapC,UAAUipB,YAAc,WAC7BnpB,KAAKyN,UACLb,WAAS5M,KAAKwC,QAAQsC,iBAAiB,gBAAiB,SAGxDkB,cAAYhG,KAAKwC,QAAQsC,iBAAiB,gBAAiB,UAGnExC,EAAapC,UAAUiqB,cAAgB,SAAU/jB,GAC7C,GAAIgkB,EACJ,IAAIhkB,EAAKC,MACL,IAAK,GAAI7F,GAAI,EAAGA,EAAI4F,EAAKC,MAAM1F,OAAQH,IACnC4pB,EAAUhkB,EAAKC,MAAM7F,GACrB4pB,EAAUpqB,KAAKmqB,cAAcC,GAC7BhkB,EAAKC,MAAM7F,GAAK4pB,CAYxB,OATK/gB,qBAAkBjD,EAAKrD,KAMnB/C,KAAK+F,qBAAuBsD,oBAAkBjD,EAAKpD,aACxDoD,EAAKrD,KAAM,IANP/C,KAAK+F,qBACLK,EAAKrD,KAAM,SAERqD,GAAKrD,KAKTqD,GAEX9D,EAAapC,UAAUmqB,kBAAoB,SAAUC,EAASC,GAE1D,IAAK,GAAIC,GAAK,EAAGC,EADAhrB,OAAO4H,KAAKijB,GACeE,EAAKC,EAAa9pB,OAAQ6pB,IAElE,OADWC,EAAaD,IAEpB,IAAK,cAED,GAAIzf,GAAY/K,KAAKwC,QAAQoC,cAAc,sBAEvC6F,EAAczK,KAAKwC,QAAQoC,cAAc,qBACzC0lB,GAAQpB,aACRne,EAAUC,MAAMC,QAAU,OACtBjL,KAAKwC,QAAQsC,iBAAiB,sBAAsBnE,OAAS,GAC7DX,KAAKwK,gBACLC,EAAczK,KAAKwC,QAAQoC,cAAc,uBAGzC5E,KAAKwC,QAAQoC,cAAc,mBAAmBsG,YAAclL,KAAKmL,gBAAgBnL,KAAKoG,MAE1FqE,EAAYO,MAAMC,QAAU,UAGxBF,EAAUjG,iBAAiB,oBAAoBnE,QAAU,GACzDX,KAAKkM,wBAETnB,EAAUC,MAAMC,QAAU,QAC1BR,EAAYO,MAAMC,QAAU,OAEhC,MACJ,KAAK,cACDjL,KAAKmnB,SACL,MACJ,KAAK,cACI9d,oBAAkBihB,EAAQhd,YAAYgC,aACnCgb,EAAQhd,YAAYgC,UACpBtJ,cAAYhG,KAAKwC,QAAQsC,iBAAiB,mBAAoB,iBAG9D8H,WAAS5M,KAAKwC,QAAQsC,iBAAiB,mBAAoB,kBAG9DuE,oBAAkBihB,EAAQhd,YAAYiC,YACnC+a,EAAQhd,YAAYiC,SACpBvJ,cAAYhG,KAAKwC,QAAQsC,iBAAiB,oBAAqB,iBAG/D8H,WAAS5M,KAAKwC,QAAQsC,iBAAiB,oBAAqB,kBAG/DuE,oBAAkBihB,EAAQhd,YAAYkC,cACnC8a,EAAQhd,YAAYkC,WACpBxJ,cAAYhG,KAAKwC,QAAQsC,iBAAiB,oBAAqB,iBAG/D8H,WAAS5M,KAAKwC,QAAQsC,iBAAiB,oBAAqB,kBAG/DuE,oBAAkBihB,EAAQhd,YAAYe,aACnCic,EAAQhd,YAAYe,UACpBrI,cAAYhG,KAAKwC,QAAQsC,iBAAiB,qBAAsB,iBAGhE8H,WAAS5M,KAAKwC,QAAQsC,iBAAiB,qBAAsB,kBAGhEuE,oBAAkBihB,EAAQhd,YAAYmC,cACnC6a,EAAQhd,YAAYmC,WACpBzJ,cAAYhG,KAAKwC,QAAQsC,iBAAiB,kBAAmB,iBAG7D8H,WAAS5M,KAAKwC,QAAQsC,iBAAiB,kBAAmB,kBAG7DuE,oBAAkBihB,EAAQhd,YAAYqK,eACnC2S,EAAQhd,YAAYqK,YACpB3R,cAAYhG,KAAKwC,QAAQsC,iBAAiB,kBAAmB,iBAG7D8H,WAAS5M,KAAKwC,QAAQsC,iBAAiB,kBAAmB,iBAGlE,MACJ,KAAK,WACGylB,EAAQ1Y,UACR7L,eAAahG,KAAKwC,SAAU+nB,EAAQ1Y,SAAS5K,MAAM,MAEnDqjB,EAAQzY,UACRjF,YAAU5M,KAAKwC,SAAU8nB,EAAQzY,SAASvF,QAAQ,OAAQ,KAAK2c,OAAOhiB,MAAM,KAEhF,MACJ,KAAK,YACGqjB,EAAQ7c,WACRb,YAAU5M,KAAKwC,SAAU,SACzBxC,KAAKmpB,gBAGLnjB,eAAahG,KAAKwC,SAAU,SAC5BxC,KAAKmpB,cAET,MACJ,KAAK,oBACDnpB,KAAK0qB,kBAAoBJ,EAAQI,iBACjC,MACJ,KAAK,aACD1qB,KAAKmR,WAAamZ,EAAQnZ,WAC1BnR,KAAKmnB,SACL,MACJ,KAAK,UACDnnB,KAAK4H,QAAU0iB,EAAQ1iB,QACvB5H,KAAK6H,aACL7H,KAAKyI,2BAA2BzI,KAAK4H,QACrC,MACJ,KAAK,gBACD5H,KAAK8pB,cAAgBQ,EAAQR,cAC7B9pB,KAAK6H,YACL,MACJ,KAAK,gBACD7H,KAAKwN,cAAgB8c,EAAQ9c,aAC7B,MACJ,KAAK,SACDxN,KAAKoL,OAASkf,EAAQlf,OACtBpL,KAAKwC,QAAQwI,MAAMI,OAASpL,KAAKoL,MACjC,MACJ,KAAK,OAC8B,IAA3BpL,KAAKoG,KAAKC,MAAM1F,QAAiB0I,oBAAkBrJ,KAAKoG,OACxDpG,KAAKyE,QAETzE,KAAKmG,eAAgBC,KAAMkkB,EAAQlkB,OAAQ,GAC3CkkB,EAAQlkB,KAAOpG,KAAKmZ,kBAAkBnZ,KAAKoG,MAAM,GACjDpG,KAAK2qB,SAAS3qB,KAAKoG,KACnB,MACJ,KAAK,QACDpG,KAAKghB,MAAQsJ,EAAQtJ,MACrBhhB,KAAKwC,QAAQwI,MAAMgW,MAAQhhB,KAAKghB,KAChC,MACJ,KAAK,SACDhhB,KAAKslB,OAASgF,EAAQhF,OACtBtlB,KAAK0Z,KAAO,GAAIkR,wBAAqB5qB,KAAKslB,QAC1CtlB,KAAKkD,UAAW,EAChBlD,KAAKmnB,UACLnnB,KAAKkD,UAAW,CAChB,MACJ,KAAK,qBACDlD,KAAKkqB,kBACL,MACJ,KAAK,WACDlqB,KAAK0C,WAAa4nB,EAAQlB,SAC1BppB,KAAKqpB,mBAKrB/mB,EAAapC,UAAU2qB,UAAY,WAC/B7qB,KAAKwC,QAAQ0D,GAAKlG,KAAKwC,QAAQ0D,IAAM4kB,cAAY,oBACjD9qB,KAAK+qB,eACDC,WAAY,cACZC,iBAAkB,sBAClBC,SAAU,YACVC,eAAgB,oBAChBC,SAAU,WACVC,eAAgB,mBAChBC,QAAS,WACTC,KAAM,OACNC,MAAO,QACPC,SAAU,YACVC,SAAU,YACVC,gBAAiB,qBACjBC,YAAa,eACbC,mBAAoB,wBACpBC,QAAS,UACTC,WAAY,cACZC,GAAI,KACJC,MAAO,SACPC,OAAQ,SACRC,YAAa,iBACbC,eAAgB,kBAChBC,WAAY,wBACZC,YAAa,eACbC,SAAU,YACVC,aAAc,gBACdC,KAAM,OACNC,kBAAmB,yBACnBC,iBAAkB,eAClBC,YAAa,eACbC,IAAK,MACLC,GAAI,KACJC,IAAK,MACLC,YAAa,cACbC,QAAS,WACTC,WAAY,eACZC,OAAQ,UACRC,UAAW,cACXC,KAAM,OACNC,MAAO,QACPC,UAAW,sBACXC,WAAY,cACZC,UAAW,aACXC,UAAW,aACXC,SAAU,YACVC,WAAY,cACZC,YAAa,gBAEjB7tB,KAAKqI,KAAO,GAAIylB,QAAK,eAAgB9tB,KAAK+qB,cAAe/qB,KAAKslB,QAC9DtlB,KAAK0Z,KAAO,GAAIkR,wBAAqB5qB,KAAKslB,QAC1CtlB,KAAKoX,eAAiB,EACtBpX,KAAK8d,iBAAmB,EACxB9d,KAAKoO,cAAgB,EACrBpO,KAAK0X,WAAa,EAClB1X,KAAK0E,eAAgB,EACrB1E,KAAK+tB,UACL/tB,KAAKwI,iBACDwlB,iBACMnrB,MAAO,aAAc5B,IAAKjB,KAAKqI,KAAKC,YAAY,gBAChDzF,MAAO,gBAAiB5B,IAAKjB,KAAKqI,KAAKC,YAAY,sBACnDzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAC9CzF,MAAO,cAAe5B,IAAKjB,KAAKqI,KAAKC,YAAY,oBACjDzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAC9CzF,MAAO,cAAe5B,IAAKjB,KAAKqI,KAAKC,YAAY,oBACjDzF,MAAO,QAAS5B,IAAKjB,KAAKqI,KAAKC,YAAY,WAC3CzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAC9CzF,MAAO,KAAM5B,IAAKjB,KAAKqI,KAAKC,YAAY,QACxCzF,MAAO,QAAS5B,IAAKjB,KAAKqI,KAAKC,YAAY,WAC3CzF,MAAO,UAAW5B,IAAKjB,KAAKqI,KAAKC,YAAY,aAC7CzF,MAAO,aAAc5B,IAAKjB,KAAKqI,KAAKC,YAAY,gBAEtD2lB,eACMprB,MAAO,QAAS5B,IAAKjB,KAAKqI,KAAKC,YAAY,WAC3CzF,MAAO,cAAe5B,IAAKjB,KAAKqI,KAAKC,YAAY,iBACjDzF,MAAO,qBAAsB5B,IAAKjB,KAAKqI,KAAKC,YAAY,wBACxDzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAC9CzF,MAAO,kBAAmB5B,IAAKjB,KAAKqI,KAAKC,YAAY,qBACrDzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAC9CzF,MAAO,UAAW5B,IAAKjB,KAAKqI,KAAKC,YAAY,aAC7CzF,MAAO,aAAc5B,IAAKjB,KAAKqI,KAAKC,YAAY,gBAEtD4lB,kBACMrrB,MAAO,QAAS5B,IAAKjB,KAAKqI,KAAKC,YAAY,WAC3CzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAEpD6lB,iBACMtrB,MAAO,QAAS5B,IAAKjB,KAAKqI,KAAKC,YAAY,WAC3CzF,MAAO,qBAAsB5B,IAAKjB,KAAKqI,KAAKC,YAAY,wBACxDzF,MAAO,cAAe5B,IAAKjB,KAAKqI,KAAKC,YAAY,iBACjDzF,MAAO,UAAW5B,IAAKjB,KAAKqI,KAAKC,YAAY,aAC7CzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAC9CzF,MAAO,aAAc5B,IAAKjB,KAAKqI,KAAKC,YAAY,gBAChDzF,MAAO,kBAAmB5B,IAAKjB,KAAKqI,KAAKC,YAAY,qBACrDzF,MAAO,WAAY5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAC9CzF,MAAO,KAAM5B,IAAKjB,KAAKqI,KAAKC,YAAY,QACxCzF,MAAO,QAAS5B,IAAKjB,KAAKqI,KAAKC,YAAY,YAGrDtI,KAAKuI,WACD6lB,MAAO,IAAKC,SAAU,KAAMC,YAAa,IAAKC,mBAAoB,KAAMC,SAAU,IAAKC,GAAI,KAAMC,MAAO,SACxGC,gBAAiB,KAAMC,WAAY,OAAQC,SAAU,OAAQC,QAAS,UAAWC,WAAY,cAAexU,SAAU,OACtHyU,OAAQ,UAAWC,UAAW,cAAeC,QAAS,WAAYC,WAAY,eAAgBC,cAAe,WAC7GC,YAAa,WAAYC,YAAa,YAE1CtvB,KAAKuvB,cACDnB,MAAO,IAAKC,SAAU,KAAMC,YAAa,IAAKC,mBAAoB,KAAMC,SAAU,IAAKC,GAAIzuB,KAAKqI,KAAKC,YAAY,MAAMknB,cACvHd,MAAO1uB,KAAKqI,KAAKC,YAAY,SAASknB,cAAeb,gBAAiB,KAAMC,WAAY5uB,KAAKqI,KAAKC,YAAY,QAAQknB,cACtHX,SAAU7uB,KAAKqI,KAAKC,YAAY,QAAQknB,cAAeV,QAAS9uB,KAAKqI,KAAKC,YAAY,WAAWknB,cACjGT,WAAY/uB,KAAKqI,KAAKC,YAAY,cAAcknB,cAAejV,SAAUva,KAAKqI,KAAKC,YAAY,QAAQknB,cACvGR,OAAQhvB,KAAKqI,KAAKC,YAAY,UAAUknB,cAAeP,UAAWjvB,KAAKqI,KAAKC,YAAY,aAAaknB,cACrGN,QAASlvB,KAAKqI,KAAKC,YAAY,WAAWknB,cAAeL,WAAYnvB,KAAKqI,KAAKC,YAAY,cAAcknB,cACzGJ,cAAepvB,KAAKqI,KAAKC,YAAY,WAAWknB,cAAeH,YAAarvB,KAAKqI,KAAKC,YAAY,WAAWknB,cAC7GF,YAAatvB,KAAKqI,KAAKC,YAAY,WAAWknB,eAE7CxvB,KAAK2C,SACN3C,KAAK2C,QAAWC,KAAM,QAASC,MAAO,WAG9CP,EAAapC,UAAUuvB,OAAS,WAC5BzvB,KAAKiG,aACLjG,KAAK6Y,QAEGjW,KAAM5C,KAAKqI,KAAKC,YAAY,YAC5BuP,QAAS,kCAGTjV,KAAM5C,KAAKqI,KAAKC,YAAY,gBAC5BuP,QAAS,iCAGjB7X,KAAK+N,SAAW/N,KAAKuO,eACrBvO,KAAK+K,UAAY/K,KAAK6V,eACtB,IAAI6Z,KACE7sB,MAAO,SAAU5B,IAAKjB,KAAKqI,KAAKC,YAAY,YAC5CzF,MAAO,YAAa5B,IAAKjB,KAAKqI,KAAKC,YAAY,eAEjDqnB,IACE9sB,MAAO,SAAU5B,IAAKjB,KAAKqI,KAAKC,YAAY,YAC5CzF,MAAO,YAAa5B,IAAKjB,KAAKqI,KAAKC,YAAY,cAErDtI,MAAKwI,gBAAgC,eAAIxI,KAAKwI,gBAAgC,eAAEonB,OAAOF,GACvF1vB,KAAKwI,gBAAgC,eAAIxI,KAAKwI,gBAAgC,eAAEonB,OAAOD,GACnF3vB,KAAKmR,qBAAsBoQ,gBAC3BvhB,KAAK2gB,YAAc3gB,KAAKmR,WACxBnR,KAAK6vB,oBAAmB,GAAIhP,UAAQiP,KAAK,MAGzC9vB,KAAK2gB,YAAc,GAAIY,eAAYvhB,KAAKmR,YACxCnR,KAAKmH,SAAWnH,KAAK2gB,YAAYoJ,aAAa,GAAIlJ,UAClD7gB,KAAK+vB,eAET/vB,KAAKgwB,kBAET1tB,EAAapC,UAAUyO,eAAiB,SAAUsK,GAC9C,GAAIA,EACA,IACI,MAAwB,kBAAbA,IAA2BvO,SAAS5F,iBAAiBmU,GAAUtY,OAC/DsvB,UAAiBvlB,SAAS9F,cAAcqU,GAAU5T,UAAU4jB,QAG5DiH,UAAQjX,GAGvB,MAAOkX,GACH,MAAOF,WAAiBhX,KAKpC3W,EAAapC,UAAU2vB,mBAAqB,SAAUjP,GAClD,GAAIne,GAAQzC,KACR8I,EAAO9I,KAAK2gB,YAAYkB,aAAajB,GACrCe,EAAW,GAAIC,WACnB9Y,GAAKoZ,KAAK,SAAUlG,GACZA,EAAEmG,QAAUnG,EAAEmG,OAAOnZ,OACrBvG,EAAM0E,SAAW6U,EAAEmG,OAAOnZ,OAG1BvG,EAAM0E,SAAW6U,EAAEhT,OAEvBvG,EAAMstB,gBACP3N,MAAM,SAAUpG,GACf2F,EAASU,OAAOrG,MAGxB1Z,EAAapC,UAAU6vB,YAAc,WACjC/vB,KAAKkH,aACLlH,KAAKgpB,cACLhpB,KAAKowB,cAET9tB,EAAapC,UAAUkwB,WAAa,WAChC,GAAIC,GAAUrwB,KAAKuG,YACnB+pB,gBAAa1f,IAAIyf,EAAS,QAASrwB,KAAKiK,kBAAmBjK,MAC3DswB,eAAa1f,IAAIyf,EAAS,WAAYrwB,KAAK+J,kBAAmB/J,MAC9DswB,eAAa1f,IAAIyf,EAAS,UAAWrwB,KAAK+J,kBAAmB/J,MAC7DswB,eAAa1f,IAAI5Q,KAAKwC,QAAS,UAAWxC,KAAKuwB,gBAAiBvwB,OAEpEsC,EAAapC,UAAUyoB,aAAe,WAClC,GAAI0H,GAAUrwB,KAAKuG,YACnB+pB,gBAAa1S,OAAOyS,EAAS,QAASrwB,KAAKiK,mBAC3CqmB,eAAa1S,OAAOyS,EAAS,WAAYrwB,KAAK+J,mBAC9CumB,eAAa1S,OAAOyS,EAAS,UAAWrwB,KAAK+J,mBAC7CumB,eAAa1S,OAAO5d,KAAKwC,QAAS,UAAWxC,KAAKuwB,kBAEtDjuB,EAAapC,UAAUiN,eAAiB,SAAUnM,EAAQwvB,GAItD,IAAK,GAHDC,GAAczvB,YAAkB6lB,SAAW7mB,KAAKiG,UAAUjF,EAAOkF,IAAMlG,KAAKiG,UAAU,GAAKjF,GAC3F+D,EAAMyrB,EAAWC,EAAW9vB,OAAS,EAAI8vB,EAAW9vB,OACpDyF,EAAOpG,KAAKoG,KACP5F,EAAI,EAAGA,EAAIuE,EAAKvE,IACrB4F,EAAOpG,KAAKsoB,eAAemI,EAAWjwB,GAAI4F,EAAY,IAAN5F,EAEpD,OAAO4F,IAQX9D,EAAapC,UAAU2L,YAAc,SAAU7K,GAC3C,GAEI0vB,GAFAjuB,EAAQzC,KACR+K,EAAY/J,CAEM,iBAAXA,IACP0vB,EAAU1wB,KAAKwC,QAAQ0D,GAAK,IAAMlF,EAClCA,EAAS0J,SAASC,eAAe+lB,IAGjCA,EAAU3lB,EAAU7E,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,GAE1D,IAAIW,IAASqD,QAASwmB,EAAS7jB,QAAQ,EAAOrF,KAAM,cAC/CxH,MAAK0E,cAMN1E,KAAK2wB,2BAA2B9pB,EAAM7F,GALtChB,KAAK4I,QAAQ,eAAgB/B,EAAM,SAAUmG,GACzCvK,EAAMkuB,2BAA2B3jB,EAAoBhM,MAOjEsB,EAAapC,UAAUywB,2BAA6B,SAAU9pB,EAAM7F,GAChE,IAAK6F,EAAKgG,OAAQ,CACd,GAAI9B,GAAY/J,EACZoF,EAAOpG,KAAKmN,eAAepC,GAAW,GACtCoI,EAAQ,EACR3S,MAAI,GACJuE,MAAM,GACNkI,EAAcjN,KAAKkN,cAAclN,KAAKoG,MACtCwqB,EAAW7lB,EAAU4S,mBACrBkT,EAAW9lB,EAAU8F,uBACrBrO,EAAUuI,EAAUjG,iBAAiB,sBACrCmQ,EAAUlK,EAAUjG,iBAAiB,aAEzC,KADAC,EAAMkQ,EAAQtU,OACTH,EAAI,EAAGA,EAAIuE,EAAKvE,IACjB0E,eAAa+P,EAAQzU,GAAI,WAAW2E,SAExC,KAAK3E,EAAI,EAAGuE,EAAMvC,EAAQ7B,OAAQH,EAAIuE,EAAKvE,UAChCR,MAAKiG,UAAUzD,EAAQhC,GAAG0F,GAErC,MAA4C,OAArC6E,EAAU8F,wBACb9F,EAAYA,EAAU8F,uBACtBsC,GAEAyd,IAAYA,EAAS5rB,UAAUC,QAAQ,oBAAsB,IAC7De,eAAa4qB,GAAW,mBACxBhkB,YAAUgkB,GAAW,iBACjBC,GAAYA,EAAS7rB,UAAUC,QAAQ,qBAAuB,GAC9D2H,YAAUikB,GAAW,sBAG7B,IAAI7iB,GAAOjD,EAAU3F,cAAcA,cAAcA,cAC7C0rB,IAEJ,IAAI9wB,KAAK+O,SAAW/O,KAAKgP,UAAW,CAChC,GAAI+hB,GAAU3qB,EAAKC,MAAM8M,GACrB6d,EAAehwB,EAAO8D,iBAAiB,oBAC3C,IAAIisB,GAAWA,EAAQ1qB,MACnB,IAAK,GAAIjF,GAAI,EAAGA,EAAI2vB,EAAQ1qB,MAAM1F,OAAQS,IAAK,CAC3C,GAAI+H,GAASnJ,KAAKmQ,UAAU4gB,EAAQ1qB,MAAMjF,GAAG2F,MAC7C,IAAIiqB,EAAa5vB,GAAI,CACjB,GAAI6vB,GAAqBD,EAAa5vB,GAAGwD,cAAc,oBACnDuE,KAAWA,EAAOoF,cAAiBvO,KAAKkxB,mBAAmB/nB,IAAW8nB,IACtEH,EAAanqB,KAAKqqB,EAAa5vB,GAAG8E,MAMtDwN,SAAO1S,GACHhB,KAAK6F,gBACL7F,KAAK2T,iBAAiB3S,EAAOkF,KAE7B4qB,EAAanwB,QACbX,KAAK2T,gBAAgBmd,GAEzB1qB,EAAKC,MAAMgN,OAAOF,EAAO,SAClBnT,MAAKiG,UAAUY,EAAKqD,SAC3BlK,KAAKmV,mBACLnV,KAAKsG,qBAAqB0H,EAAM5H,GAC3BpG,KAAK0E,eACN1E,KAAK4I,QAAQ,SAAU/B,GAE3B7G,KAAKoN,YAAYH,EAAajN,KAAKkN,cAAclN,KAAKoG,MAAO,iBAGrE9D,EAAapC,UAAUgxB,mBAAqB,SAAU/nB,GAGlD,MADSA,GAAO8P,WAAwC,gBAApB9P,GAAO8P,cAAoDN,KAA3BxP,EAAO8P,SAAS9Y,SAGxFmC,EAAapC,UAAUqL,WAAa,SAAUvK,GAC1C,GAAIyB,GAAQzC,KAIR6G,GAASqD,QAHG0B,UAAQ5K,EAAQ,sBACRkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAE3BuI,OADlB7C,UAAQ5K,EAAQ,qBAAqBkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACrC2G,QAAQ,EAAOrF,KAAM,aAC/DxH,MAAK0E,cAMN1E,KAAKmxB,0BAA0BtqB,EAAM7F,GALrChB,KAAK4I,QAAQ,eAAgB/B,EAAM,SAAUmG,GACzCvK,EAAM0uB,0BAA0BnkB,EAAoBhM,MAOhEsB,EAAapC,UAAUixB,0BAA4B,SAAUtqB,EAAM7F,GAC/D,IAAK6F,EAAKgG,OAAQ,CACd,GAAI9B,GAAYa,UAAQ5K,EAAQ,sBAC5BoF,EAAOpG,KAAKmN,eAAepC,GAC3BgD,EAAWnC,UAAQ5K,EAAQ,qBAC3BiM,EAAcjN,KAAKkN,cAAclN,KAAKoG,MACtCgrB,EAAcrjB,EACd6iB,EAAW7iB,EAAS4P,mBACpBkT,EAAW9iB,EAAS8C,uBACpBsC,EAAQ,EACR8B,EAAUlH,EAASjJ,iBAAiB,cACpCtE,MAAI,GACJuE,EAAMkQ,EAAQtU,MAClB,KAAKH,EAAI,EAAGA,EAAIuE,EAAKvE,IACjB0E,eAAa+P,EAAQzU,GAAI,WAAW2E,SAExC,MAA2C,OAApC4I,EAAS8C,wBACZ9C,EAAWA,EAAS8C,uBACpBsC,GAEJ,IAAIhK,GAASnJ,KAAKmQ,UAAU/J,EAAKC,MAAM8M,GAAOpM,MAC1CoC,IAAUA,EAAO8P,UAAYmY,EAAYxsB,cAAc,gBACvD5E,KAAKgf,gBAAgB7V,EAAQioB,EAAYxsB,cAAc,eAAesB,MAErE2qB,GAAYA,EAAS7rB,UAAUC,QAAQ,oBAAsB,IAC1D2rB,GACA5qB,eAAa4qB,GAAW,mBAG3BA,GAAYA,EAAS5rB,UAAUC,QAAQ,oBAAsB,IAC1D4rB,GACA7qB,eAAa6qB,GAAW,qBAGhC,IAAII,GAAqBG,EAAYxsB,cAAc,oBAEnD,KACI8O,SAAO0d,GAEX,MAAOC,IAEHA,MAIS,MAFG,QAKZloB,GAAUA,EAAOoF,cACjBvO,KAAK2T,iBAAiByd,EAAYlrB,KAElCiD,GAAUnJ,KAAKkxB,mBAAmB/nB,IAAW8nB,GAC7CjxB,KAAK2T,iBAAiByd,EAAYlrB,KAEtCE,EAAKC,MAAMgN,OAAOF,EAAO,GACnB/M,EAAKC,MAAM,IAAMD,EAAKC,MAAM,GAAGA,OACjCrG,KAAKsG,qBAAqByE,EAAW3E,EAGzC,KAAK,GADDqX,GAAczd,KAAKwC,QAAQsC,iBAAiB,cACvCwsB,EAAM,EAAGA,EAAM7T,EAAY9c,OAAQ2wB,IACxCpsB,eAAauY,EAAY6T,GAAM,WAAWnK,QAAQ1J,EAAY6T,GAE7DtxB,MAAK0E,eACN1E,KAAK4I,QAAQ,SAAU/B,GAE3B7G,KAAKoN,YAAYH,EAAajN,KAAKkN,cAAclN,KAAKoG,MAAO,gBAGrE9D,EAAapC,UAAU+L,cAAgB,SAAU7F,EAAMN,GAWnD,GAVI9F,KAAK6F,gBAAkBC,IACvB9F,KAAK8F,QAAS,GAElB9F,KAAKyE,QACLzE,KAAKoX,eAAiB,EACtBpX,KAAKoO,cAAgB,EACrBpO,KAAK0E,eAAgB,EACrB1E,KAAKmG,eAAgBC,KAAMA,IAAQ,GACnCA,EAAOpG,KAAKmZ,kBAAkBnZ,KAAKoG,MAAM,GACzCpG,KAAK+oB,YAAY/oB,KAAKoG,KAAMpG,KAAKwC,QAAQoC,cAAc,uBAAuB,EAAM5E,KAAKoG,KAAKrD,IAAK+C,GAC/FM,EAAKnD,SAAU,CACf,GAAIsuB,GAAgBvxB,KAAKwC,QAAQoC,cAAc,sBAAsBA,cAAc,kBACnF5E,MAAK0L,UAAU6lB,GAEnBvxB,KAAK0E,eAAgB,GAEzBpC,EAAapC,UAAUqwB,gBAAkB,SAAUvU,IAC3Chc,KAAKopB,UAA2B,KAAdpN,EAAEwV,SAAgC,KAAdxV,EAAEwV,SAAgC,KAAdxV,EAAEwV,SAC5DxV,EAAEyV,kBAGVnvB,EAAapC,UAAUyT,gBAAkB,SAAUqd,IAE3ChxB,KAAK+O,SAAW/O,KAAKgP,YACrBhP,KAAK0xB,cAAcV,IAG3B1uB,EAAapC,UAAUoG,qBAAuB,SAAUyE,EAAW1E,GAC/D,IAAKrG,KAAK6F,eAAgB,CACtB,GAAI7F,KAAKopB,SACL,MAEJ,IAAIuI,GAAQ5mB,EAAUnG,cAAc,gBAAgB0Z,kBAChDsT,EAAU7mB,EAAUnG,cAAc,mBAClCitB,EAAS9mB,EAAUnG,cAAc,iBACjC+sB,GAAQ,GACRC,EAAQE,UAAW,EACnBD,EAAOC,UAAW,GACdD,EAAOlU,mBAAmBhN,UAAU4J,SAAS,kBAC7CqX,EAAQjU,mBAAmBhN,UAAU4J,SAAS,oBAC9CsX,EAAOlU,mBAAmBhN,UAAUiN,OAAO,iBAC3CgU,EAAQjU,mBAAmBhN,UAAUiN,OAAO,kBAE5CvX,GAA6B,OAApBA,EAAMrD,UACf6uB,EAAOhM,SAAU,EAGjB+L,EAAQ/L,SAAU,IAItB+L,EAAQ/L,SAAU,EAClB+L,EAAQE,UAAW,EACnBD,EAAOhM,SAAU,EACjBgM,EAAOC,UAAW,EACdzrB,IACAwrB,EAAOlU,mBAAmBhN,UAAUC,IAAI,iBACxCghB,EAAQjU,mBAAmBhN,UAAUC,IAAI,qBAWzDtO,EAAapC,UAAUgN,cAAgB,SAAU6kB,GACxCA,IACDA,EAAc/xB,KAAKgyB,WAEvB,IAAIC,GAAeF,EAAY/uB,UAC3B0V,EAAeqZ,EAAYhvB,IAC3BylB,EAAWxc,YAAW+lB,EAAY1rB,UAAW,EAIjD,OAHYgD,qBAAkB0oB,EAAY9uB,UAEtCjD,KAAKmZ,mBAAoBnW,UAAWivB,EAAc5rB,MAAOmiB,EAAUzlB,IAAK2V,IAAgB,GADxF1Y,KAAKmZ,mBAAoBnW,UAAWivB,EAAc5rB,MAAOmiB,EAAUzlB,IAAK2V,EAAczV,SAAU8uB,EAAY9uB,WAAY,IAIhIX,EAAapC,UAAUiZ,kBAAoB,SAAU/S,EAAM8rB,GACvD,GAAI7oB,oBAAkBjD,GAClB,MAAO,KAEX,IAAIgkB,EACJ,IAAIhkB,EAAKC,OAASD,EAAKC,MAAM1F,SAAWlB,OAAO4H,KAAKjB,EAAKC,MAAM,IAAI1F,OAAS,GAAKuxB,GAE7E,IAAK,GADDhd,GAAO9O,EAAKC,MAAM1F,OACb4I,EAAI,EAAGA,EAAI2L,EAAM3L,IACtB6gB,EAAUhkB,EAAKC,MAAMkD,GACrB6gB,EAAUpqB,KAAKmZ,kBAAkBiR,EAAS8H,GAC1C9rB,EAAKC,MAAMkD,GAAK6gB,EACZ3qB,OAAO4H,KAAK+iB,GAASzpB,OAAS,GAAKuxB,IACnC9rB,EAAKC,MAAMgN,OAAO9J,EAAG,GACrBA,IACA2L,IAKZ,IAAIid,GAAY/rB,EAAKgN,MACrB,IAAKhN,EAAKW,OAAwB,KAAfX,EAAKW,QAAkBsC,oBAAkB8oB,IAAeA,GAAiC,aAAnBA,EAAU3qB,MAC5E,WAAnB2qB,EAAU3qB,MAMV,GALIpB,EAAKiK,WACDjK,EAAKiK,SAAS6C,WAAWjO,QAAQ,SAAW,GAAKmB,EAAKiK,SAAS6C,WAAWjO,QAAQ,UAAY,KAC9FmB,EAAKvD,MAAQ,MAGhB7C,KAAKmD,aAAenD,KAAK0qB,mBAAsC,KAAftkB,EAAKW,OAAkC,KAAlBX,EAAKiK,UAAmC,KAAfjK,EAAKvD,WACrF8V,KAAfvS,EAAKvD,OAA0BsvB,GAAaA,EAAUC,WAAa,CACnE,GAAIpvB,GAAYoD,EAAKpD,UACjBqvB,EAAajsB,EAAKnD,QACtBmD,IAASsC,MAAStC,EAAKsC,MAAO3B,MAASX,EAAKW,MAAOsJ,SAAYjK,EAAKiK,SAAU7I,KAAQpB,EAAKoB,KAAM3E,MAASuD,EAAKvD,OAC1GwG,oBAAkBgpB,KACnBjsB,EAAKnD,SAAWovB,GAEhBrvB,IACAoD,EAAKpD,UAAYA,GAEjBmvB,IAEA/rB,EAAKgN,OAAS+e,GAGK,OAAlB/rB,EAAKiK,UAAuC,UAAlBjK,EAAKiK,WAAyBjK,EAAKvD,OAA+B,IAAtBuD,EAAKvD,MAAMlC,SAClFyF,UAIJA,UAIJ,KAAI+rB,GAAiC,aAAnBA,EAAU3qB,MAA0C,WAAnB2qB,EAAU3qB,KAWxD,GAAK6B,oBAAkBjD,EAAKpD,YAAeqG,oBAAkBjD,EAAKC,OACnED,SAEC,CACD,GAAInD,GAAWmD,EAAKnD,QAEhBmD,GADApG,KAAK+F,oBACI/C,UAAaoD,EAAKpD,UAAWqD,MAASD,EAAKC,MAAOtD,IAAOqD,EAAKrD,MAG9DC,UAAaoD,EAAKpD,UAAWqD,MAASD,EAAKC,OAEnDgD,oBAAkBpG,KACnBmD,EAAKnD,SAAWA,GAEhBkvB,IAEA/rB,EAAKgN,OAAS+e,GAEQ,IAAtB/rB,EAAKC,MAAM1F,SACXyF,UA9ByE,CAC7E,GAAIksB,GAAWlsB,EAAKrD,KACpBqD,GAASsC,MAAStC,EAAKsC,MAAO3B,MAASX,EAAKW,MAAOsJ,SAAYjK,EAAKiK,SAAU7I,KAAQpB,EAAKoB,KAAM3E,MAASuD,EAAKvD,MAC3GG,UAAaoD,EAAKpD,UAAWqD,MAASD,EAAKC,QAG1C+M,OAAS+e,EACVnyB,KAAK+F,qBACLK,EAAKrD,IAAMuvB,GA0BvB,MAAOlsB,IAQX9D,EAAapC,UAAUyqB,SAAW,SAAUvkB,GACxC,GAAI2F,GAASC,YAAW5F,MAAU,EAC9BpG,MAAK6F,eACL7F,KAAKiM,cAAcF,GAAQ,GAG3B/L,KAAKiM,cAAcF,IAQ3BzJ,EAAapC,UAAU8xB,SAAW,WAC9B,GAAI5rB,EAeJ,OAbIA,GADApG,KAAK+F,oBACI/C,UAAWhD,KAAKoG,KAAKpD,UAAWqD,MAAOrG,KAAKoG,KAAKC,MAAOtD,IAAK/C,KAAKoG,KAAKrD,MAGvEC,UAAWhD,KAAKoG,KAAKpD,UAAWqD,MAAOrG,KAAKoG,KAAKC,OAEzDgD,oBAAkBrJ,KAAKoG,KAAKnD,YAC7BmD,EAAKnD,SAAWjD,KAAKoG,KAAKnD,UAG1BjD,KAAKoG,KAAKgN,SAEVhN,EAAKgN,OAASpT,KAAKoG,KAAKgN,QAErBhN,GAQX9D,EAAapC,UAAUqyB,QAAU,SAAUvkB,GACvC,GAAID,GACAgQ,EACA5K,EAAQ,CAQZ,IAPInF,YAAgBwkB,aAChBzkB,EAAWnC,UAAQoC,EAAM,sBAGzB+P,EAAS/d,KAAKwC,QAAQ0D,GAAK,IAAM8H,EACjCD,EAAWrD,SAASC,eAAeoT,IAEnC1U,oBAAkB0E,GAClB,MAAO,KAIX,KAFA,GAAIhD,GAAYa,UAAQmC,EAAU,sBAC9B3H,EAAOpG,KAAKmN,eAAepC,GACY,OAApCgD,EAAS8C,wBACZ9C,EAAWA,EAAS8C,uBACpBsC,GAEJ,OAAO/M,GAAKC,MAAM8M,IAQtB7Q,EAAapC,UAAUsM,SAAW,SAAUxL,GACpCA,YAAkB6lB,UAAW7lB,EAAOgE,UAAUC,QAAQ,qBAAuB,IAC7EjE,EAAS4K,UAAQ5K,EAAQ,sBAE7B,IAAI0vB,GAAW1vB,YAAkB6lB,SAAW7lB,EAAOkF,GAAKlG,KAAKwC,QAAQ0D,GAAK,IAAMlF,CAEhF,OADWhB,MAAKmN,eAAeujB,IASnCpuB,EAAapC,UAAUuyB,aAAe,SAAUC,GAC5C,GAAIlyB,GAEA0J,EADAnF,EAAM2tB,EAAY/xB,MAEtB,KAAKH,EAAI,EAAGA,EAAIuE,EAAKvE,IACjB0J,EAAUlK,KAAKwC,QAAQ0D,GAAK,IAAMwsB,EAAYlyB,GAC9CR,KAAK6L,YAAYnB,SAASC,eAAeT,KASjD5H,EAAapC,UAAUyyB,mBAAqB,WACxC,GAAIC,GAAY5yB,KAAK6yB,aAAa7yB,KAAKkN,cAAclN,KAAKoG,OACtD0sB,EAAmBzpB,oBAAkBupB,GAAa,GAAI/R,UAAU,GAAIA,UAAQkS,MAAMH,EACtF,OAAO5yB,MAAK2gB,YAAYkB,aAAaiR,IAQzCxwB,EAAapC,UAAU8yB,YAAc,SAAUC,GAC3C,GAAIzyB,GAEAiO,EADA1J,EAAMkuB,EAAWtyB,MAErB,KAAKH,EAAI,EAAGA,EAAIuE,EAAKvE,IACjBiO,EAASzO,KAAKwC,QAAQ0D,GAAK,IAAM+sB,EAAWzyB,GAC5CR,KAAKuL,WAAWb,SAASC,eAAe8D,KAShDnM,EAAapC,UAAUgzB,oBAAsB,SAAU9sB,GAInD,IAAK,GAHDwsB,GAAY5yB,KAAK6yB,aAAazsB,GAE9BzD,KACKnC,EAAI,EAAGuE,EAAMtF,OAAO4H,KAAKrH,KAAK4H,SAAUpH,EAAIuE,EAAIpE,OAAQH,IAC7DmC,EAAOgE,KAAK3G,KAAK4H,QAAQpH,GAAGuG,MAQhC,OANIX,GAAKC,MAAM1F,QACH,GAAIkgB,UAAQ3S,OAAOvL,GAAQowB,MAAMH,IAGjC,GAAI/R,UAAQ3S,OAAOvL,IAUnCL,EAAapC,UAAU2yB,aAAe,SAAUzsB,GAC5C,GACI+sB,GACAC,EACAC,EAEAlqB,EALAqf,EAAWpiB,EAAKC,MAIhBitB,GAAa,CAEjB,KAAK9K,EACD,MAAO2K,EAEX,KAAK,GAAI3yB,GAAI,EAAGuE,EAAMyjB,EAAS7nB,OAAQH,EAAIuE,EAAKvE,IAAK,CACjD,GAAI6P,GAAWmY,EAAShoB,GAAG6P,QAY3B,IAXiB,kBAAbA,EACAA,EAAW,mBAEO,gBAAbA,EACLA,EAAW,iBAEO,gBAAbA,IACLA,EAAW,kBAGfijB,GAAa,EADF7zB,OAAO4H,KAAKmhB,EAAShoB,IAEvByE,QAAQ,UAAY,GAAKujB,EAAShoB,GAAG6F,OAC1C+sB,EAAQpzB,KAAK6yB,aAAarK,EAAShoB,OAIvB2yB,EAFJA,EACuB,QAAnB/sB,EAAKpD,UACEmwB,EAAKI,IAAIH,GAGTD,EAAKK,GAAGJ,GAIZA,OAId,KAAK/pB,oBAAkBgH,KAAchH,oBAAkBgH,EAAS1P,QAAS,CAC1E,GAAIqnB,GAAOQ,EAAShoB,GAAG6P,SAASvD,cAC5B2mB,GAAe,EACfC,GAAgB,QAAS,WAAY,cAAe,qBAAsB,WAAY,kBAQ1F,IAPyB,WAArBlL,EAAShoB,GAAGgH,OACZ8rB,GAAatzB,KAAK2zB,WAEG,SAArBnL,EAAShoB,GAAGgH,MAAmBksB,EAAazuB,QAAQ+iB,IAAS,IAC7DsL,GAAa,GAEjBnqB,EAASnJ,KAAKmQ,UAAUqY,EAAShoB,GAAGuG,OAChCihB,EAAK/iB,QAAQ,SAAW,GAAK+iB,EAAK/iB,QAAQ,UAAY,EACtDujB,EAAShoB,GAAGqC,MAAQ,SAEnB,IAAyB,SAArB2lB,EAAShoB,GAAGgH,MAAqBghB,EAAShoB,GAAGqC,gBAAiBjD,OAanEyzB,EAAY7K,EAAShoB,GAAGqC,UAbmD,CAC3E,GAAI2W,GAASxZ,KAAKyZ,UAAUtQ,EAAOqQ,OAC9BnQ,qBAAkBmf,EAAShoB,GAAGqC,OAO/BwwB,EAAY,MANZA,EAAYrzB,KAAK4zB,QAAQpL,EAAShoB,GAAGqC,MAAO2W,GACxCka,EAAazuB,QAAQ+iB,IAAS,IAAMhoB,KAAK6zB,OAAOrL,EAAShoB,GAAGqC,SAC5D4wB,GAAe,IAU3B,GAAU,IAANjzB,EACIizB,IAAiBzL,EAAK/iB,QAAQ,OAAS,GAAK+iB,EAAK/iB,QAAQ,YAAc,GAAK+iB,EAAK/iB,QAAQ,SAAW,GACpG+iB,EAAK/iB,QAAQ,UAAY,IAAO+iB,EAAK/iB,QAAQ,WAAa,EAC1DkuB,EAAOM,EAAezzB,KAAK8zB,cAActL,EAAShoB,GAAI6yB,GAClDrzB,KAAK+zB,eAAevL,EAAShoB,IAInB,MADVqC,EAAQwwB,KAERF,EAAO,GAAIa,aAAUxL,EAAShoB,GAAGuG,MAAOsJ,EAAUgjB,EAAWC,QAKrE,IAAIG,IAAiBzL,EAAK/iB,QAAQ,OAAS,GAAK+iB,EAAK/iB,QAAQ,YAAc,GACvE+iB,EAAK/iB,QAAQ,SAAW,GAAK+iB,EAAK/iB,QAAQ,UAAY,IAAM+iB,EAAK/iB,QAAQ,WAAa,EACtFkuB,EAAOM,EAAezzB,KAAK8zB,cAActL,EAAShoB,GAAI6yB,EAAWF,EAAM/sB,EAAKpD,WACxEhD,KAAK+zB,eAAevL,EAAShoB,GAAI2yB,EAAM/sB,EAAKpD,eAGhD,IAAuB,QAAnBoD,EAAKpD,UAAqB,CACtBH,EAAQwwB,CACRF,IAAkB,KAAVtwB,EACRswB,EACMA,EAAKI,IAAI/K,EAAShoB,GAAGuG,MAAOsJ,EAAUgjB,EAAWC,GAExC,KAAVzwB,IACLswB,EAAO,GAAIa,aAAUxL,EAAShoB,GAAGuG,MAAOsJ,EAAUgjB,EAAWC,QAGhE,CACD,GAAIzwB,GAAQwwB,CACRF,IAAkB,KAAVtwB,EACRswB,EAAOA,EAAKK,GAAGhL,EAAShoB,GAAGuG,MAAOsJ,EAAUgjB,EAAWC,GAExC,KAAVzwB,IACLswB,EAAO,GAAIa,aAAUxL,EAAShoB,GAAGuG,MAAOsJ,EAAUgjB,EAAWC,MAYrF,MALItzB,MAAKmR,qBAAsBoQ,iBACtBlY,oBAAkB8pB,IAA4B,WAAlBA,EAAK9iB,UAA2C,cAAlB8iB,EAAK9iB,WAChE8iB,EAAK9iB,SAA6B,WAAlB8iB,EAAK9iB,SAAwB,QAAU,aAGxD8iB,GAEX7wB,EAAapC,UAAUqlB,UAAY,WAC/B,GACI0O,GAAej0B,KAAKslB,MAMxB,OAJiBjG,YADH,QAC2Brf,KAAKslB,OAHxB,+CAGkD4O,cAEpED,EAAe,MAEZA,GAEX3xB,EAAapC,UAAUiQ,UAAY,SAAUpJ,EAAO8B,GAIhD,IAAK,GAFDM,GADAvB,EAAU5H,KAAK4H,QAGVpH,EAAI,EAAGkV,GADhB9N,EAAUiB,GAAYjB,GACSjH,OAAQH,EAAIkV,EAAMlV,IAAK,CAClD,GAAIoH,EAAQpH,GAAGuG,QAAUA,EAAO,CAC5BoC,EAASvB,EAAQpH,EACjB,OAEC,GAAIoH,EAAQpH,GAAGoH,SAEhB,GADAuB,EAASnJ,KAAKmQ,UAAUpJ,EAAOa,EAAQpH,GAAGoH,SAEtC,UAGH,IAAIb,GAASA,EAAM9B,QAAQjF,KAAKgH,YAAc,GACxB,KAAnBhH,KAAKgH,WAAoBY,EAAQpH,GAAGuG,QAAUA,EAAME,MAAMjH,KAAKgH,WAAW,GAAI,CAC9EmC,EAASvB,EAAQpH,EACjB,QAIZ,MAAO2I,IASX7G,EAAapC,UAAU2O,aAAe,SAAU9H,GAE5C,MADa/G,MAAKmQ,UAAUpJ,GACdwB,WAElBjG,EAAapC,UAAUi0B,QAAU,SAAUC,EAAMC,GAO7C,MANIA,GACAD,EAAKE,SAAS,EAAG,EAAG,GAGpBF,EAAKE,SAAS,GAAI,GAAI,IAEnBF,GAEX9xB,EAAapC,UAAU4zB,cAAgB,SAAUtL,EAAU3lB,EAAO+vB,EAAW5vB,GACzE,GAAImwB,GACAoB,EAAYv0B,KAAKm0B,QAAQ,GAAInsB,MAAKnF,EAAMqF,YAAY,GACpDssB,EAAUx0B,KAAKm0B,QAAQtxB,EAC3B,QAAQ2lB,EAASnY,UACb,IAAK,QAED8iB,GADAA,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,qBAAsBwtB,IAC/ChB,IAAI/K,EAASzhB,MAAO,kBAAmBytB,EACnD,MACJ,KAAK,WAEDrB,GADAA,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,WAAYwtB,IACrCf,GAAGhL,EAASzhB,MAAO,cAAeytB,EAC9C,MACJ,KAAK,cACDrB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,cAAeytB,EACpD,MACJ,KAAK,qBACDrB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,qBAAsBwtB,EAC3D,MACJ,KAAK,WACDpB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,WAAYwtB,EACjD,MACJ,KAAK,kBACDpB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,kBAAmBytB,GAgBhE,MAbIrB,KACIP,EACkB,QAAd5vB,EACA4vB,EAAYA,EAAUW,IAAIJ,GAEP,OAAdnwB,IACL4vB,EAAYA,EAAUY,GAAGL,IAI7BP,EAAYO,GAGbP,GAEXtwB,EAAapC,UAAU6zB,eAAiB,SAAUvL,EAAUoK,EAAW5vB,GACnE,GAGImwB,GAHAtwB,EAAQ2lB,EAAS3lB,MACjBwN,EAAWmY,EAASnY,SAAS6C,WAC7BuhB,EAAYjM,EAAS3lB,MAErBsG,EAASnJ,KAAKmQ,UAAUqY,EAASzhB,OACjCyS,EAASxZ,KAAKyZ,UAAUtQ,EAAOqQ,OACnC,IAAInJ,EAASpL,QAAQ,SAAW,GAAKoL,EAASpL,QAAQ,UAAY,EAC9D,OAAQoL,GACJ,IAAK,SACD8iB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,SAAU0tB,EAC/C,MACJ,KAAK,YACDtB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,YAAa0tB,EAClD,MACJ,KAAK,UACDtB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,QAAS,GAC9C,MACJ,KAAK,aACDosB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,WAAY,IAI7D,KAAMsJ,EAASpL,QAAQ,SAAW,GAAKoL,EAASpL,QAAQ,UAAY,GAChE,IAAK,GAAIsE,GAAI,EAAG2L,EAAOrS,EAAMlC,OAAQ4I,EAAI2L,EAAM3L,IAC3C,GAAiB,KAAb1G,EAAM0G,KAA4B,OAAb8G,GAAkC,UAAbA,IAAyC,WAAhBlH,EAAO3B,KAC1E,GAAU,IAAN+B,EAAS,CACT,GAAImrB,GAAM,oBACV,QAAQrkB,GACJ,IAAK,UAEG8iB,EADgB,SAAhBhqB,EAAO3B,KACA,GAAIwsB,aAAUxL,EAASzhB,MAAO2tB,EAAK7xB,EAAM0G,IAGzC,GAAIyqB,aAAUxL,EAASzhB,MAAO2tB,EAAK7xB,EAAM0G,GAC3CvJ,KAAK6zB,OAAOhxB,EAAM0G,IAAMvJ,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,GAC5CxZ,KAAKm0B,QAAQn0B,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,IAAS,GAAS,KAElE,MACJ,KAAK,aAEG2Z,EADgB,SAAhBhqB,EAAO3B,KACA,GAAIwsB,aAAUxL,EAASzhB,MAAO,WAAYlE,EAAM0G,GAClDvJ,KAAK6zB,OAAOhxB,EAAM0G,IAAMvJ,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,GAC5CxZ,KAAKm0B,QAAQn0B,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,IAAS,GAAS,MAGvD,GAAIwa,aAAUxL,EAASzhB,MAAO,WAAYlE,EAAM0G,GAE3D,MACJ,KAAK,KACD4pB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,QAASlE,EAAM0G,GACpD,MACJ,KAAK,QACD4pB,EAAO,GAAIa,aAAUxL,EAASzhB,MAAO,WAAYlE,EAAM0G,SAI9D,CAED,OAAQif,EAASnY,UACb,IAAK,UAEG8iB,EADgB,SAAhBhqB,EAAO3B,KACA2rB,EAAKI,IAAI/K,EAASzhB,MAAO,kBAAmBlE,EAAM0G,GACpDvJ,KAAK6zB,OAAOhxB,EAAM0G,IAAMvJ,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,GAC5CxZ,KAAKm0B,QAAQn0B,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,IAAY3W,EAAM0G,IAGvD4pB,EAAKI,IAAI/K,EAASzhB,MAAO,kBAAmBlE,EAAM0G,GAE7D,MACJ,KAAK,aAEG4pB,EADgB,SAAhBhqB,EAAO3B,KACA2rB,EAAKK,GAAGhL,EAASzhB,MAd3B,cAcsClE,EAAM0G,GACpCvJ,KAAK6zB,OAAOhxB,EAAM0G,IAAMvJ,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,GAC5CxZ,KAAKm0B,QAAQn0B,KAAK4zB,QAAQ/wB,EAAM0G,GAAIiQ,IAAY3W,EAAM0G,IAGvD4pB,EAAKK,GAAGhL,EAASzhB,MAAO,cAAelE,EAAM0G,GAExD,MACJ,KAAK,KACD4pB,EAAOA,EAAKK,GAAGhL,EAASzhB,MAAO,QAASlE,EAAM0G,GAC9C,MACJ,KAAK,QACD4pB,EAAOA,EAAKI,IAAI/K,EAASzhB,MAAO,WAAYlE,EAAM0G,KAoB1E,MAbI4pB,KACIP,EACkB,QAAd5vB,EACA4vB,EAAYA,EAAUW,IAAIJ,GAEP,OAAdnwB,IACL4vB,EAAYA,EAAUY,GAAGL,IAI7BP,EAAYO,GAGbP,GAEXtwB,EAAapC,UAAU0zB,QAAU,SAAU/wB,EAAO2W,GAC9C,GAAImb,GAAW30B,KAAK0Z,KAAK+K,UAAU5hB,EAAO2W,EAa1C,OAZI3W,GAAMoC,QAAQ,MAAQ,GAAMpC,EAAMoC,QAAQ,KAAO,GAAKpC,EAAMoC,QAAQ,KAAO,GACxEpC,EAAMoC,QAAQ,KAAO,KACxB0vB,EAAW,GAAI3sB,OAENssB,SAASrhB,SAASpQ,EAAMoE,MAAM,KAAK,KAE5C0tB,EAASC,WAAW3hB,SAASpQ,EAAMoE,MAAM,KAAK,KAC1CpE,EAAMoE,MAAM,KAAK,IAEjB0tB,EAASE,WAAW5hB,SAASpQ,EAAMoE,MAAM,KAAK,MAG/C0tB,GAEXryB,EAAapC,UAAU2zB,OAAS,SAAUhxB,GACtC,SAAIA,GAASA,EAAMoC,QAAQ,MAAQ,IAKvC3C,EAAapC,UAAU6oB,YAAc,SAAU3iB,EAAM+X,EAAY2W,EAAS/xB,EAAK+C,GAC3E,GAAKgvB,EAGA,CACD,GAAI1uB,EAAKC,MAAM1F,OAAS,IAAMX,KAAK6F,eAAgB,CAE/C,GAAIgsB,GAAS1T,EAAWvZ,cAAc,kBAClCgtB,EAAUzT,EAAWvZ,cAAc,kBACvCitB,GAAOC,UAAW,EAClBF,EAAQE,UAAW,EACI,OAAnB1rB,EAAKpD,UACL6uB,EAAOhM,SAAU,EAGjB+L,EAAQ/L,SAAU,MAKtB7lB,MAAKsG,qBAAqB6X,EAK9B,IAHIne,KAAK6F,gBAAkBC,IACvBqY,EAAane,KAAK+0B,YAAY3uB,EAAMA,EAAKpD,UAAWhD,KAAKwC,QAAS4D,EAAKrD,IAAK+C,IAE5E9F,KAAK+F,qBAAuB/F,KAAK6F,eAAgB,CACjD,GAAImvB,GAAa7W,EAAWvZ,cAAc,eACtCwB,GAAKrD,IACL6J,YAAUooB,GAAa,mBAGvBhvB,eAAagvB,GAAa,wBA7BlC7W,GAAane,KAAK+0B,YAAY3uB,EAAMA,EAAKpD,UAAWmb,EAAYpb,EAiC1C,KAAtBqD,EAAKC,MAAM1F,QAAgBX,KAAK6F,iBAChCO,EAAKC,MAAM,IAAOqC,MAAS,GAAI3B,MAAS,GAAIsJ,SAAY,GAAI7I,KAAQ,GAAI3E,MAAS,IAErF,IAAI2lB,GAAWpiB,EAAKC,KACpB,KAAKgD,oBAAkBmf,GACnB,IAAK,GAAIhoB,GAAI,EAAGuE,EAAMyjB,EAAS7nB,OAAQH,EAAIuE,EAAKvE,IAAK,CACjD,GAAI6G,GAAO5H,OAAO4H,KAAKmhB,EAAShoB,GAChC,KAAK6I,oBAAkBmf,EAAShoB,GAAG6F,QAAUgB,EAAKpC,QAAQ,UAAY,GAAmC,IAA7BujB,EAAShoB,GAAG6F,MAAM1F,OAAe,CACzG,GAAIX,KAAKwC,QAAQsC,iBAAiB,sBAAsBnE,OAASX,KAAKwN,cAClE,MAAO,KAEX2Q,GAAane,KAAK+0B,YAAYvM,EAAShoB,GAAIgoB,EAAShoB,GAAGwC,UAAWmb,EAAYqK,EAAShoB,GAAGuC,KAC1Fob,EAAane,KAAK+oB,YAAYP,EAAShoB,GAAI2d,GAAY,OAGvDne,MAAKi1B,WAAWzM,EAAShoB,GAAI2d,EAEjC,KAAK9U,oBAAkBmf,EAAShoB,GAAG6F,QAAUmiB,EAAShoB,GAAGyC,SAAU,CAC/D,GAAIsuB,GAAgBpT,EAAWvZ,cAAc,gBAAgB8I,SAASlN,GAAGoE,cAAc,kBACvF5E,MAAK0L,UAAU6lB,GAEnB,GAAIloB,oBAAkBmf,EAAShoB,GAAG6F,QAAUmiB,EAAShoB,GAAGyC,SAAU,CAC9D,GAAIiyB,GAAiB/W,EAAWvZ,cAAc,gBAAgB8I,SAASlN,GAAGoE,cAAc,mBACxF5E,MAAKyL,SAASypB,IAU1B,MANI/W,KACAA,EAAavS,UAAQuS,EAAY,iBAEjCA,IACAA,EAAavS,UAAQuS,EAAY,uBAE9BA,GAEX7b,EAAapC,UAAU60B,YAAc,SAAU3uB,EAAMpD,EAAWmb,EAAYpb,EAAK+C,GAC7E9F,KAAK8L,iBAAgB,EAAMqS,EAAYnb,GAAW,EAAOD,EAAK+C,EAAQM,EACtE,IAAI5D,GAAU2b,EAAWrZ,iBAAiB,sBACtCqwB,EAAYhX,EAAWvZ,cAAc,gBAAgB8I,QACzD,OAAI1N,MAAKsN,YAAYkC,YAAcxP,KAAKiE,kBAAoBjE,KAAKkE,eAC7DlE,KAAKkE,eAAgB,EACrBlE,KAAKiE,kBAAmB,EACjBkxB,EAAUn1B,KAAK8D,WAAa,IAE9B9D,KAAKsN,YAAYkC,YAAcxP,KAAKiE,kBAAoBjE,KAAKgE,aAClEhE,KAAKgE,aAAc,EACnBhE,KAAKiE,kBAAmB,EACjBkxB,EAAUA,EAAUx0B,OAAS,IAG7B6B,EAAQA,EAAQ7B,OAAS,IAGxC2B,EAAapC,UAAU+0B,WAAa,SAAU7uB,EAAM+X,GAC5CA,EAAWnZ,UAAUC,QAAQ,sBAAwB,EACrDjF,KAAK2N,eAAewQ,EAAY/X,GAGhCpG,KAAK2N,eAAewQ,EAAWvZ,cAAc,sBAAuBwB,IAG5E9D,EAAapC,UAAUmpB,eAAiB,WAGpC,IAAK,GADDrb,GADShO,KAAKwC,QACAsC,iBAAiB,mHAC1BtE,EAAI,EAAGA,EAAIwN,EAAKrN,OAAQH,IACzBwN,EAAKxN,GAAGmQ,UAAU4J,SAAS,kBACTI,cAAY3M,EAAKxN,GAAIuR,gBAC3BqX,SAAWppB,KAAK0C,WAEvBsL,EAAKxN,GAAGmQ,UAAU4J,SAAS,kBACVrV,eAAa8I,EAAKxN,GAAI,gBAC5B4oB,SAAWppB,KAAK0C,WAE3BsL,EAAKxN,GAAGmQ,UAAU4J,SAAS,oBACRI,cAAY3M,EAAKxN,GAAIoa,kBAC3BwO,SAAWppB,KAAK0C,WAE7BsL,EAAKxN,GAAGmQ,UAAU4J,SAAS,aACfI,cAAY3M,EAAKxN,GAAImjB,WAC3ByF,SAAWppB,KAAK0C,WAEtBsL,EAAKxN,GAAGmQ,UAAU4J,SAAS,gBACZI,cAAY3M,EAAKxN,GAAIilB,cAC3B2D,SAAWppB,KAAK0C,WAEzBsL,EAAKxN,GAAGmQ,UAAU4J,SAAS,iBACXI,cAAY3M,EAAKxN,GAAI4D,eAC3BglB,SAAWppB,KAAK0C,WAE1BsL,EAAKxN,GAAGmQ,UAAU4J,SAAS,aACXI,cAAY3M,EAAKxN,GAAIwlB,eACtBH,UACZ7lB,KAAK0C,WACLsL,EAAKxN,GAAG4E,cAAc4F,MAAMC,QAAU,OAGtC+C,EAAKxN,GAAG4E,cAAc4F,MAAMC,QAAU,WAKtD,IAAImqB,GAAmBp1B,KAAKwC,QAAQsC,iBAAiB,kBACjDuwB,EAAoBr1B,KAAKwC,QAAQsC,iBAAiB,mBAClDwwB,EAAkBt1B,KAAKwC,QAAQsC,iBAAiB,kBAC/C9E,KAAK0C,YAAc1C,KAAK+N,SAAS4C,UAAU4J,SAAS,eACrDva,KAAK+N,SAAS4C,UAAUiN,OAAO,aAGnC,KAAK,GADD2X,IAASH,EAAkBC,EAAmBC,GACzC90B,EAAI,EAAGA,EAAI+0B,EAAM50B,OAAQH,IAC9B+0B,EAAM/0B,GAAG4f,QAAQ,SAAUpS,GACnBA,EAAK2C,UAAU4J,SAAS,cACxBvM,EAAK2C,UAAUiN,OAAO,cAGtB5P,EAAK2C,UAAUC,IAAI,eAI/B5Q,MAAKw1B,kBAETlzB,EAAapC,UAAUs1B,eAAiB,WACpC,GAAI/yB,GAAQzC,KAER+C,GAAM,CADE/C,MAAKwC,QAAQsC,iBAAiB,yDAEpCsb,QAAQ,SAAUpS,IAChBA,EAAK2C,UAAU4J,SAAS,gBAAmBvM,EAAK2C,UAAU4J,SAAS,oBAC/DvM,EAAK2C,UAAU4J,SAAS,cAIvBvM,EAAK2C,UAAU4J,SAAS,gBAAkBvM,EAAK2C,UAAU4J,SAAS,kBACvEvM,EAAK2C,UAAUiN,OAAO,kBAEjB5P,EAAK2C,UAAU4J,SAAS,gBAAkBvM,EAAK2C,UAAU4J,SAAS,cACvEvM,EAAK2C,UAAUiN,OAAO,cAEjB5P,EAAK2C,UAAU4J,SAAS,oBAC7BvM,EAAK2C,UAAUC,IAAI,kBACnB7N,GAAM,GAEDiL,EAAK6C,uBAAuBgV,SAAW7X,EAAK2C,UAAU4J,SAAS,eACpEvM,EAAK2C,UAAUiN,OAAO,cAClB7a,EACyB,QAArBiL,EAAK9C,YACL8C,EAAK2C,UAAUC,IAAI,kBAGnB5C,EAAK2C,UAAUC,IAAI,kBAIE,QAArB5C,EAAK9C,aAAyBzI,EAAMC,YACpCsL,EAAK2C,UAAUiN,OAAO,SACtB5P,EAAK2C,UAAUC,IAAI,oBAGfnO,EAAMsD,oBACNiI,EAAK2C,UAAUC,IAAI,SAEvB5C,EAAK2C,UAAUiN,OAAO,mBAED,OAArB5P,EAAK9C,aAAwBzI,EAAMC,WACnCsL,EAAK2C,UAAUC,IAAI,qBAGnB5C,EAAK2C,UAAUiN,OAAO,uBAIzB5P,EAAK2C,UAAU4J,SAAS,kBAI7BvM,EAAK2C,UAAUC,IAAI,eA9CnB5C,EAAK2C,UAAUC,IAAI,cACnB7N,GAAM,MAiDlBT,EAAapC,UAAUu1B,eAAiB,SAAU5yB,GAE9C,IAAK,GADD6yB,IAAY,OAAQ,OAAQ,MAAO,OAAQ,QAAS,OAAQ,OAAQ,SAAU,SAAU,MAAO,UAAW,SAAU,WAC/Gl1B,EAAI,EAAGuE,EAAM2wB,EAAS/0B,OAAQH,EAAIuE,EAAKvE,IAC5C,GAAIqC,EAAMiK,cAAc7H,QAAQywB,EAASl1B,KAAO,EAC5C,OAAO,CAGf,QAAO,GAEX8B,EAAapC,UAAUy1B,aAAe,SAAUtvB,EAAOuvB,EAAcC,EAAUC,GAC3E,GAAIhwB,IAAS,CACR+vB,IAAyB,KAAbA,EAKbA,GAAY,KAJZA,EAAW,GACX/vB,GAAS,EAKb,IAAI9C,GAAYqD,EAAMrD,SACtB,IAAIqD,EAAMtD,IAAK,CAIP8yB,GAFA/vB,EACoBgwB,EAAY91B,KAAKqI,KAAKC,YAAY,OAAOknB,cAAgB,KAAO,QAIhEsG,EAAY,IAAM91B,KAAKqI,KAAKC,YAAY,OAAOknB,cAAgB,KAAO,SAIlG,GAAInpB,EAAMA,MACN,IAAK,GAAIkD,GAAI,EAAG2L,EAAO7O,EAAMA,MAAM1F,OAAQ4I,EAAI2L,EAAM3L,IAAK,CACtD,GAAIlD,EAAMA,MAAMkD,GAAGlD,MACfwvB,EAAW71B,KAAK21B,aAAatvB,EAAMA,MAAMkD,GAAIqsB,EAAcC,EAAUC,OAEpE,CACD,GAAI1vB,GAAOC,EAAMA,MAAMkD,GACnBwsB,EAAW,GACXC,EAAcF,EAAY91B,KAAKuvB,aAAanpB,EAAKiK,UAAYrQ,KAAKuI,UAAUnC,EAAKiK,SACrF,IAAIjK,EAAKvD,gBAAiBjD,OACtB,GAAIwG,EAAKiK,SAAS6C,WAAWjO,QAAQ,YAAc,EAAG,CAClD,GAAIgxB,GAAgBH,EAAY,IAAM91B,KAAKqI,KAAKC,YAAY,OAAOknB,cAAgB,IAAM,OACvE,UAAdppB,EAAKoB,MAAoBxH,KAAKy1B,eAAervB,EAAKvD,MAAM,IAIxDkzB,GAAY3vB,EAAKvD,MAAM,GAAKozB,EAAgB7vB,EAAKvD,MAAM,GAHvDkzB,GAAY,IAAM3vB,EAAKvD,MAAM,GAAK,IAAMozB,EAAgB,IAAM7vB,EAAKvD,MAAM,GAAK,QAOlF,IAA6B,gBAAlBuD,GAAKvD,MAAM,IAAkC,OAAfuD,EAAKvD,MAAgB,CAC1DkzB,GAAY,KAAO3vB,EAAKvD,MAAM,GAAK,GACnC,KAAK,GAAIkd,GAAI,EAAGyE,EAAOpe,EAAKvD,MAAMlC,OAAQof,EAAIyE,EAAMzE,IAChDgW,GAAY,KAAO3vB,EAAKvD,MAAMkd,GAAK,GAEvCgW,IAAY,QAGZA,IAAY,IAAM3vB,EAAKvD,MAAQ,QAKnCuD,GAAKiK,SAAS6C,WAAWjO,QAAQ,eAAiB,EAClD8wB,GAAY3vB,EAAKvD,MAAQ,KAAOuD,EAAKvD,MAAQ,MAAQ,IAAMuD,EAAKvD,MAAQ,IAEnEuD,EAAKiK,SAAS6C,WAAWjO,QAAQ,aAAe,EACrD8wB,GAAY3vB,EAAKvD,MAAQ,MAAQuD,EAAKvD,MAAQ,KAAO,IAAMuD,EAAKvD,MAAQ,IAEnEuD,EAAKiK,SAAS6C,WAAWjO,QAAQ,aAAe,EACrD8wB,GAAY3vB,EAAKvD,MAAQ,MAAQuD,EAAKvD,MAAQ,MAAQ,IAAMuD,EAAKvD,MAAQ,IAGvD,WAAduD,EAAKoB,MAA2C,iBAAfpB,GAAKvD,OACtB,OAAfuD,EAAKvD,OAAmBuD,EAAKiK,SAAS6C,WAAWjO,QAAQ,UAAY,EACtE8wB,GAAY3vB,EAAKvD,MAEZuD,EAAKiK,SAAS6C,WAAWjO,QAAQ,UAAY,EAClD8wB,GAAY,KAGZA,GAAY,IAAM3vB,EAAKvD,MAAQ,GAI3C,IAAIuD,EAAKiK,SAAS6C,WAAWjO,QAAQ,SAAW,EACxC2wB,EACAxvB,EAAKW,MAAQ,IAAMX,EAAKW,MAAQ,IAG5BX,EAAKW,MAAM9B,QAAQ,MAAQ,IAC3BmB,EAAKW,MAAQ,IAAMX,EAAKW,MAAQ,KAGxC8uB,GAAYzvB,EAAKW,MAAQ,IAAMivB,MAE9B,CACD,GAAIE,GAAWF,CACO,aAAlB5vB,EAAKiK,SACL6lB,EAAW,IAEY,eAAlB9vB,EAAKiK,WACV6lB,EAAW,MAEXN,EACAxvB,EAAKW,MAAQ,IAAMX,EAAKW,MAAQ,IAG5BX,EAAKW,MAAM9B,QAAQ,MAAQ,IAC3BmB,EAAKW,MAAQ,IAAMX,EAAKW,MAAQ,KAGxC8uB,GAAYzvB,EAAKW,MAAQ,IAAMmvB,EAAW,IAAMH,EAEhD3vB,EAAKpD,WAAgC,KAAnBoD,EAAKpD,YACvBA,EAAYoD,EAAKpD,WAGzB,GAAIuG,IAAM2L,EAAO,EAAG,CAEZ9O,EAAOC,EAAMA,MAAMkD,IAEL,KAAdvG,GAAqBoD,GAA2B,KAAnBA,EAAKpD,WAAoBoD,EAAKgN,QAAUhN,EAAKgN,OAAO+iB,YACjFnzB,EAAYoD,EAAKpD,WAGrB6yB,GAAY,KADZ7yB,EAAY8yB,EAAY91B,KAAKqI,KAAKC,YAAYtF,EAAUwsB,eAAeA,cAAgBxsB,EAAUwsB,eACnE,KAU1C,MANK1pB,KACD+vB,GAAY,KAEZxvB,EAAMtD,MACN8yB,GAAY,KAETA,GASXvzB,EAAapC,UAAUk2B,gBAAkB,SAAUC,EAAWP,GAC1DO,EAAYA,EAAU/pB,QAAQ,KAAM,GACpC,IAAIgqB,GAAYt2B,KAAKu2B,gBAAgBF,EAAWP,EAChD91B,MAAK2qB,UAAW3nB,UAAWszB,EAAUtzB,UAAWD,IAAKuzB,EAAUvzB,IAAKsD,MAAOiwB,EAAUjwB,SASzF/D,EAAapC,UAAUq2B,gBAAkB,SAAUF,EAAWP,GAC1D91B,KAAK+tB,UACL/tB,KAAKw2B,UAAUH,EAAWP,GAC1B91B,KAAKmG,eAAgBC,MAAQpD,UAAW,MAAOD,KAAK,EAAOsD,YAAe,EAC1E,IAAID,GAAOpG,KAAKy2B,cAAcz2B,KAAK+tB,OAAQ/tB,KAAKoG,MAAO,GAAI0vB,EAC3D,OAAI91B,MAAK+F,oBACI/C,UAAWoD,EAAKpD,UAAWD,IAAKqD,EAAKrD,IAAKsD,MAAOD,EAAKC,QAGtDrD,UAAWoD,EAAKpD,UAAWqD,MAAOD,EAAKC,QAWxD/D,EAAapC,UAAUiL,gBAAkB,SAAU/E,EAAMswB,EAAaZ,GAMlE,MALK1vB,KACDA,EAAOpG,KAAKkN,iBAEhB9G,EAAOpG,KAAKmZ,kBAAkB/S,GAAM,GACpBpG,KAAK21B,aAAa31B,KAAKkN,cAAc9G,GAAOswB,EAAa,KAAMZ,GAAWxpB,QAAQ,KAAM,MAS5GhK,EAAapC,UAAUy2B,oBAAsB,SAAUvwB,GAC9CA,IACDA,EAAOpG,KAAKkN,gBAEhB,IAAIkI,IAAQwhB,IAAK,KAEjB,OADA52B,MAAK62B,OAAO,iBAAmBC,KAAM,kBAAmBC,kBAAkB,EAAOl0B,OAASuD,KAAMA,EAAMgP,IAAKA,KACpGA,EAAS,KAQpB9S,EAAapC,UAAU82B,oBAAsB,SAAUC,GACnD,GAAI7hB,IAAQwhB,IAAK,KACjB52B,MAAK62B,OAAO,iBAAmBC,KAAM,uBAAwBC,kBAAkB,EAAOl0B,OAAS+zB,IAAKK,EAAU7hB,IAAKA,IACnH,IAAIwhB,GAAMxhB,EAAS,GACnB,IAAIwhB,EAAK,CACLA,EAAMA,EAAItqB,QAAQ,KAAM,GACxB,IAAIgqB,GAAYt2B,KAAKu2B,gBAAgBK,EACrC52B,MAAK2qB,UAAW3nB,UAAWszB,EAAUtzB,UAAWD,IAAKuzB,EAAUvzB,IAAKsD,MAAOiwB,EAAUjwB,UAS7F/D,EAAapC,UAAUg3B,yBAA2B,SAAU9wB,GACnDA,IACDA,EAAOpG,KAAKkN,gBAEhB,IAAIkI,IAAQwhB,IAAK,KAEjB,OADA52B,MAAK62B,OAAO,iBAAmBC,KAAM,uBAAwBC,kBAAkB,EAAOl0B,OAASuD,KAAMA,EAAMgP,IAAKA,KACzGA,EAAS,KAQpB9S,EAAapC,UAAUi3B,yBAA2B,SAAUF,GACxD,GAAI7hB,IAAQwhB,IAAK,KACjB52B,MAAK62B,OAAO,iBAAmBC,KAAM,4BAA6BC,kBAAkB,EAAOl0B,OAAS+zB,IAAKK,EAAU7hB,IAAKA,IACxH,IAAIwhB,GAAMxhB,EAAS,GACnB,IAAIwhB,EAAK,CACLA,EAAMA,EAAItqB,QAAQ,KAAM,GACxB,IAAIgqB,GAAYt2B,KAAKu2B,gBAAgBK,EACrC52B,MAAK2qB,UAAW3nB,UAAWszB,EAAUtzB,UAAWD,IAAKuzB,EAAUvzB,IAAKsD,MAAOiwB,EAAUjwB,UAU7F/D,EAAapC,UAAUk3B,cAAgB,SAAUC,EAAYC,GACzDt3B,KAAKoG,MAASpD,UAAW,MAAOD,KAAK,EAAOsD,UAC5CrG,KAAK62B,OAAO,iBAAmBC,KAAM,cAAeC,kBAAkB,EAAOl0B,OAASw0B,WAAYxP,KAAK5f,MAAMovB,GAAajxB,KAAMpG,KAAKoG,KAAMkxB,YAAaA,MAQ5Jh1B,EAAapC,UAAUq3B,cAAgB,SAAUnxB,GACxCA,IACDA,EAAOpG,KAAKkN,gBAEhB,IAAIkI,IAAQiiB,WAAY,KAExB,OADAr3B,MAAK62B,OAAO,iBAAmBC,KAAM,oBAAqBC,kBAAkB,EAAOl0B,OAASuD,KAAMA,EAAMixB,WAAY,GAAIjiB,IAAKA,KACtHA,EAAgB,YAU3B9S,EAAapC,UAAUmO,UAAY,SAAUI,EAAQvE,EAASiJ,GAC1D,GAAIof,GAAUvyB,KAAKuyB,QAAQ9jB,EAAOnC,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,KAC7DsxB,EAAcx3B,KAAKsN,YAAYe,SACnCnE,GAAUA,EAAQoC,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACjDlG,KAAK+D,UAAYoP,EACjBnT,KAAKmE,mBAAoB,EACzBnE,KAAKsN,YAAYe,WAAY,EAC7BrO,KAAK6oB,WACGngB,MAAS6pB,EAAQ7pB,MAAO3B,MAASwrB,EAAQxrB,MAAOS,KAAQ+qB,EAAQ/qB,KAAM6I,SAAYkiB,EAAQliB,SAC1FxN,MAAS0vB,EAAQ1vB,QACjBqH,GACRlK,KAAK+D,WAAa,EAClB/D,KAAKmE,mBAAoB,EACzBnE,KAAKsN,YAAYe,UAAYmpB,EAC7BA,GAAc,GAUlBl1B,EAAapC,UAAUsP,WAAa,SAAUtF,EAASutB,EAAetkB,GAClEskB,EAAgBA,EAAcnrB,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,GAC7D,IAAIqG,GAAQvM,KAAKwM,SAASirB,GACtBC,EAAe13B,KAAKsN,YAAYkC,UACpCtF,GAAUA,EAAQoC,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACjDlG,KAAK8D,WAAaqP,EAClBnT,KAAKiE,kBAAmB,EACxBjE,KAAKsN,YAAYkC,YAAa,EAC9BxP,KAAKmY,YAAanV,UAAauJ,EAAMvJ,UAAWD,IAAOwJ,EAAMxJ,IAAKsD,MAASkG,EAAMlG,QAAU6D,GAC3FlK,KAAK8D,YAAc,EACnB9D,KAAKiE,kBAAmB,EACxBjE,KAAKsN,YAAYkC,WAAakoB,EAC9BA,GAAe,GAQnBp1B,EAAapC,UAAUqP,SAAW,SAAUd,GACpCA,EAAOxJ,QAAQjF,KAAKwC,QAAQ0D,IAAM,IAClCuI,EAASzO,KAAKwC,QAAQ0D,GAAK,IAAMuI,EAErC,IAAIzN,GAAS0J,SAASC,eAAe8D,GAAQ3J,iBAAiB,oBAAoB,EAClF9E,MAAKyL,SAASzK,IAQlBsB,EAAapC,UAAUoP,UAAY,SAAUpF,GACrCA,EAAQjF,QAAQjF,KAAKwC,QAAQ0D,IAAM,IACnCgE,EAAUlK,KAAKwC,QAAQ0D,GAAK,IAAMgE,EAEtC,IAAIlJ,GAAS0J,SAASC,eAAeT,GAASpF,iBAAiB,mBAAmB,EAClF9E,MAAK0L,UAAU1K,IAEnBsB,EAAapC,UAAUs2B,UAAY,SAAUH,EAAWP,GACpD,GACI6B,GADAC,EAAK,CAET,IACID,EAAMtB,EAAUzgB,MAAMgiB,GACtBA,GAAM53B,KAAK63B,gBAAgBF,EAAK7B,SACnB,KAAR6B,EACT,OAAO33B,MAAK+tB,QAEhBzrB,EAAapC,UAAU23B,gBAAkB,SAAUxB,EAAWP,GAC1D,GACIgC,GADAvvB,GAAa,IAAK,KAAM,KAAM,KAAM,IAAK,IAGzCuvB,GADAhC,GACc91B,KAAKqI,KAAKC,YAAY,OAAOknB,cAAexvB,KAAKqI,KAAKC,YAAY,MAAMknB,cAAexvB,KAAKqI,KAAKC,YAAY,OAAOknB,gBAGpH,MAAO,KAAM,MAE/B,IAAIuI,EAEAA,GADAjC,GACS91B,KAAKqI,KAAKC,YAAY,MAAMknB,cAAexvB,KAAKqI,KAAKC,YAAY,SAASknB,cAC/ExvB,KAAKqI,KAAKC,YAAY,QAAQknB,cAAexvB,KAAKqI,KAAKC,YAAY,WAAWknB,cAC9ExvB,KAAKqI,KAAKC,YAAY,WAAWknB,cAAexvB,KAAKqI,KAAKC,YAAY,cAAcknB,cACpFxvB,KAAKqI,KAAKC,YAAY,UAAUknB,cAAexvB,KAAKqI,KAAKC,YAAY,aAAaknB,cAClFxvB,KAAKqI,KAAKC,YAAY,WAAWknB,cAAexvB,KAAKqI,KAAKC,YAAY,cAAcknB,gBAG/E,KAAM,SAAU,OAAQ,WAAY,UAAW,cAAe,UAAW,cAAe,WAAY,eAKjH,KAAK,GAHDwI,GAEAC,EACKz3B,EAAI,EAAGkV,EAAOnN,EAAU5H,OAAQH,EAAIkV,EAAMlV,IAI/C,GAHAw3B,EAAW,QAAQE,KAAK3vB,EAAU/H,IAAM,MAAQ,GAExC,GAAI23B,QAAO,KAAO5vB,EAAU/H,GAAK,IAAMw3B,EAAU,MAC/CI,KAAK/B,GAEX,MADAr2B,MAAK+tB,OAAOpnB,MAAM,YAAa4B,EAAU/H,GAAGsM,gBACrCvE,EAAU/H,GAAGG,MAG5B,IAAI03B,GAAcr4B,KAAK+tB,OAAO/tB,KAAK+tB,OAAOptB,OAAS,EACnD,KAAK03B,GAAgBA,GAAkC,YAAnBA,EAAY,GAC5C,IAAK,GAAI73B,GAAI,EAAGkV,EAAOoiB,EAAWn3B,OAAQH,EAAIkV,EAAMlV,IAIhD,GAHAw3B,EAAW,QAAQE,KAAKJ,EAAWt3B,IAAM,MAAQ,GAEzC,GAAI23B,QAAO,KAAOL,EAAWt3B,GAAK,IAAMw3B,EAAU,MAChDI,KAAK/B,GAEX,MADAr2B,MAAK+tB,OAAOpnB,MAAM,aAAcmxB,EAAWt3B,GAAGsM,gBACvCgrB,EAAWt3B,GAAGG,MAIjC,KAAK,GAAIH,GAAI,EAAGkV,EAAOqiB,EAAMp3B,OAAQH,EAAIkV,EAAMlV,IAI3C,GAHAw3B,EAAW,QAAQE,KAAKH,EAAMv3B,IAAM,MAAQ,GAEpC,GAAI23B,QAAO,KAAOJ,EAAMv3B,GAAK,IAAMw3B,EAAU,MAC3CI,KAAK/B,GAEX,MADAr2B,MAAK+tB,OAAOpnB,MAAM,eAAgBoxB,EAAMv3B,GAAGsM,gBACpCirB,EAAMv3B,GAAGG,MAIxB,IAAI,MAAMy3B,KAAK/B,GAEX,MADAr2B,MAAK+tB,OAAOpnB,MAAM,OAAQ,MACnB,CAGX,IAAI,MAAMyxB,KAAK/B,GAEX,MADAr2B,MAAK+tB,OAAOpnB,MAAM,QAAS,MACpB,CAGX,IAAI,gBAAgByxB,KAAK/B,GAGrB,MAFA4B,GAAa,gBAAgBG,KAAK/B,GAAW,GAC7Cr2B,KAAK+tB,OAAOpnB,MAAM,SAAUsxB,IACrBA,EAAWt3B,MAGtB,IAAI,QAAQy3B,KAAK/B,GAGb,MAFA4B,GAAa,QAAQG,KAAK/B,GAAW,GACrCr2B,KAAK+tB,OAAOpnB,MAAM,SAAU,OACrBsxB,EAAWt3B,MAGtB,IAAI,8EAA8Ey3B,KAAK/B,GAInF,MAFA4B,GAAa,oFAAoFG,KAAK/B,GAAW,GACjHr2B,KAAK+tB,OAAOpnB,MAAM,UAAWsxB,IACtBA,EAAWt3B,MAGtB,IAAIX,KAAKs4B,gBAAkB,gFAAgFF,KAAK/B,GAI5G,MAFA4B,GAAa,gFAAgFG,KAAK/B,GAAW,GAC7Gr2B,KAAK+tB,OAAOpnB,MAAM,UAAWsxB,IACtBA,EAAWt3B,OAAS,CAE/B,IAAIX,KAAKu4B,mBAAmBlC,EAAWP,GAInC,MAFAmC,GAAa,qBAAqBG,KAAK/B,GAAW,GAClDr2B,KAAK+tB,OAAOpnB,MAAM,UAAWsxB,IACtBA,EAAWt3B,MAItB,IAAI,iCAAiCy3B,KAAK/B,GAAY,CAGlD,GAA0C,OAD1C4B,EAAa,iCAAiCG,KAAK/B,GAAW,IAC/C4B,EAAWt3B,OAAS,GAE/B,IAAK,GADD63B,IAAW,EACNjvB,EAAI0uB,EAAWt3B,OAAQ4I,EAAI8sB,EAAU11B,SAC1Cs3B,GAAc5B,EAAU9sB,GACH,MAAjB8sB,EAAU9sB,KACVivB,GAAW,IAEXA,GAA6B,MAAjBnC,EAAU9sB,IALwBA,SAUjD8sB,GAAU4B,EAAWt3B,SAA6C,MAAjC01B,EAAU4B,EAAWt3B,UAC1DX,KAAKy4B,eAAepC,EAAW4B,KAChCA,EAAaj4B,KAAK04B,qBAAqBrC,EAAW4B,GAItD,OADAj4B,MAAK+tB,OAAOpnB,MAAM,SAAUsxB,IACrBA,EAAWt3B,OAItB,MAAI,8BAA8By3B,KAAK/B,IAEnC4B,EAAa,8BAA8BG,KAAK/B,GAAW,GAC3Dr2B,KAAK+tB,OAAOpnB,MAAM,eAAgBsxB,IAC3BA,EAAWt3B,QAIlB,qBAAqBy3B,KAAK/B,IAE1B4B,EAAa,qBAAqBG,KAAK/B,GAAW,GAClDr2B,KAAK+tB,OAAOpnB,MAAM,SAAUsxB,IACrBA,EAAWt3B,QAIlB,uBAAuBy3B,KAAK/B,IAE5B4B,EAAa,uBAAuBG,KAAK/B,GAAW,GACpDr2B,KAAK+tB,OAAOpnB,MAAM,SAAUsxB,IACrBA,EAAWt3B,QAEf,GAEX2B,EAAapC,UAAUu4B,eAAiB,SAAUpC,EAAW4B,GACzD,MAAsE,QAAlE5B,EAAUzgB,MAAMqiB,EAAWt3B,OAAS,EAAGs3B,EAAWt3B,OAAS,IACO,OAAlE01B,EAAUzgB,MAAMqiB,EAAWt3B,OAAS,EAAGs3B,EAAWt3B,OAAS,IAKnE2B,EAAapC,UAAUw4B,qBAAuB,SAAUrC,EAAW4B,GAC/D,GAAI5B,EAAU4B,EAAWt3B,SAA6C,MAAjC01B,EAAU4B,EAAWt3B,UACrDX,KAAKy4B,eAAepC,EAAW4B,IAAgD,MAAjC5B,EAAU4B,EAAWt3B,QAAiB,CACrF,GAAIg4B,GAAUtC,EAAU/pB,QAAQ2rB,EAAY,GAExC5uB,qBAAkB,iCAAiC+uB,KAAKO,MAGxDV,GADkB,gCAAgCG,KAAKO,GAAS,GAEhEV,EAAaj4B,KAAK04B,qBAAqBrC,EAAW4B,IAG1D,MAAOA,IAEX31B,EAAapC,UAAUo4B,aAAe,WAClC,GAAIM,GAAa54B,KAAK+tB,OAAO/tB,KAAK+tB,OAAOptB,OAAS,EAClD,KAAKi4B,EACD,OAAO,CAGP,IAAIC,GAAY74B,KAAK+tB,OAAO/tB,KAAK+tB,OAAOptB,OAAS,GAC7Cm4B,EAAgB94B,KAAK+tB,OAAO/tB,KAAK+tB,OAAOptB,OAAS,EACrD,IAAsB,SAAlBi4B,EAAW,IAAkBC,GAA8B,eAAjBA,EAAU,GACpD,OAAO,CAGX,UAAsB,eAAlBD,EAAW,IAAwBE,GAAiBA,EAAc,GAAG7zB,QADnD,WAC8E,IAM5G3C,EAAapC,UAAUq4B,mBAAqB,SAAUlC,EAAWP,GAC7D,GAAI8C,GAAa54B,KAAK+tB,OAAO/tB,KAAK+tB,OAAOptB,OAAS,EAClD,KAAKi4B,EACD,OAAO,CAIP,IAAI,qBAAqBR,KAAK/B,GAAY,CACtC,GAAIwC,GAAY74B,KAAK+tB,OAAO/tB,KAAK+tB,OAAOptB,OAAS,GAC7Cm4B,EAAgB94B,KAAK+tB,OAAO/tB,KAAK+tB,OAAOptB,OAAS,EACrD,IAAsB,SAAlBi4B,EAAW,IAAkBC,GAA8B,eAAjBA,EAAU,GACpD,OAAO,CAEX,IAAIE,GAAkBjD,EAAY91B,KAAKqI,KAAKC,YAAY,WAAWwE,cAAgB,SACnF,IAAsB,eAAlB8rB,EAAW,IAAwBE,GAAiBA,EAAc,GAAG7zB,QAAQ8zB,GAAmB,EAChG,OAAO,EAInB,OAAO,GAEXz2B,EAAapC,UAAU84B,YAAc,SAAUn2B,EAAOwN,EAAUylB,GAC5D,GAAIvtB,IACA0wB,IAAK,QAASC,KAAM,WAAYC,IAAK,WAAYC,IAAK,cAAeC,KAAM,kBAC3EC,KAAM,qBAAsB7K,GAAM,KAAM8K,SAAU,QAASzK,QAAW,UAAW0K,cAAe,aAChGC,WAAY,UAAWC,UAAW,SAAUC,cAAe,YAAaC,eAAgB,aAE5F,IAAI9D,EAAW,CAEX,IAAK,GADD+D,GAAiBp6B,OAAO4H,KAAKrH,KAAKuvB,cAC7B/uB,EAAI,EAAGA,EAAIq5B,EAAel5B,OAAQH,IACvC,GAAIR,KAAKuvB,aAAasK,EAAer5B,MAAQ6P,EAASmf,cAClD,MAAI3sB,IAAgC,IAAvBA,EAAMoC,QAAQ,MAA0C,MAA5BpC,EAAMA,EAAMlC,OAAS,GACvB,aAA3B0P,EAASmf,cAAgC,cAAgB,WAE5D3sB,GAAgC,IAAvBA,EAAMoC,QAAQ,MAAcpC,EAAMoC,QAAQ,OAASpC,EAAMlC,OAAS,EAC7C,aAA3B0P,EAASmf,cAAgC,gBAAkB,aAE9D3sB,GAAgC,IAAvBA,EAAMoC,QAAQ,MAAcpC,EAAMoC,QAAQ,OAASpC,EAAMlC,OAAS,EAC7C,aAA3B0P,EAASmf,cAAgC,cAAgB,WAE9DqK,EAAer5B,EAG9B,OAAO,MAEX,GAAIqC,EAAO,CACP,GAA2B,IAAvBA,EAAMoC,QAAQ,MAA0C,MAA5BpC,EAAMA,EAAMlC,OAAS,GACjD,MAAqB,aAAb0P,EAA2B,cAAgB,UAElD,IAA2B,IAAvBxN,EAAMoC,QAAQ,MAAcpC,EAAMoC,QAAQ,OAASpC,EAAMlC,OAAS,EACvE,MAAqB,aAAb0P,EAA2B,gBAAkB,YAEpD,IAA2B,IAAvBxN,EAAMoC,QAAQ,MAAcpC,EAAMoC,QAAQ,OAASpC,EAAMlC,OAAS,EACvE,MAAqB,aAAb0P,EAA2B,cAAgB,eAGtD,CACD,GAAiB,aAAbA,EACA,MAAO,UAEN,IAAiB,SAAbA,EACL,MAAO,QAGf,MAAO9H,GAAU,GAAK8H,IAE1B/N,EAAapC,UAAU45B,kBAAoB,SAAUzzB,GACjD,GAAI+c,GAAapjB,KAAKmQ,UAAU9J,EAAMU,MACtC,OAAKsC,qBAAkB+Z,GAGhB,KAFIA,EAAW5b,MAI1BlF,EAAapC,UAAU8S,mBAAqB,SAAUjM,GAClD,GAAI2B,GAAQ,GACRqxB,EAAI,CACR,IAAuB,KAAnB/5B,KAAKgH,UAAkB,CAEvB,IAAK,GADD0Y,GAAY3Y,EAAME,MAAMjH,KAAKgH,WACxBxG,EAAI,EAAGA,EAAIkf,EAAU/e,OAAQH,IAClCkI,GAAS1I,KAAKg6B,kBAAkBta,EAAWlf,EAAI,KAC/Cu5B,EACQra,EAAU/e,SACd+H,GAAS1I,KAAKgH,UAGtB,OAAO0B,GAIP,MADgB1I,MAAKmQ,UAAUpJ,GAAO2B,OAI9CpG,EAAapC,UAAU85B,kBAAoB,SAAUjzB,EAAOkzB,GAGxD,IAAK,GAFDC,GAAY,GACZ3wB,EAAI,EACCwW,EAAI,EAAGA,EAAIka,EAAUla,IAC1Bma,GAAanzB,EAAMgZ,KACnBxW,EACQ0wB,IACJC,GAAal6B,KAAKgH,UAG1B,OAAOhH,MAAKmQ,UAAU+pB,GAAWxxB,OAErCpG,EAAapC,UAAUu2B,cAAgB,SAAU1I,EAAQ1nB,EAAOJ,EAAW6vB,GAcvE,IAAK,GAbDvsB,GACA2L,EACA9O,EACA+zB,EAGApa,EACAyE,EACAuV,EACAK,EACAC,EACAhqB,EAPAiqB,KACAC,KAOAC,GAAe,EACVh6B,EAAI,EAAGkV,EAAOqY,EAAOptB,OAAQH,EAAIkV,EAAMlV,IAC5C,GAAqB,YAAjButB,EAAOvtB,GAAG,GAAkB,CAC5B,GAAI2I,GAASnJ,KAAKmQ,UAAU4d,EAAOvtB,GAAG,GAEtC,IADA4F,GAASsC,MAAQS,GAAUA,EAAOT,MAASS,EAAOT,MAAQqlB,EAAOvtB,GAAG,GAAIuG,MAAOgnB,EAAOvtB,GAAG,IAChE,iBAArButB,EAAOvtB,EAAI,GAAG,GAAuB,CACrC,GAAIutB,EAAOvtB,EAAI,GAAG,GAAGyE,QAAQ,SAAW,GAAK8oB,EAAOvtB,EAAI,GAAG,GAAGyE,QAAQ,UAAY,EAC9EmB,EAAKiK,SAAWrQ,KAAKg5B,YAAY,IAAKjL,EAAOvtB,EAAI,GAAG,GAAIs1B,GACxD1vB,EAAKvD,MAAQ,KACbuD,EAAKoB,KAAOxH,KAAK85B,kBAAkB1zB,OAElC,CACD,GAAI4hB,GAAO+F,EAAOvtB,EAAI,GAAG,GAAKutB,EAAOvtB,EAAI,GAAG,GAAG8L,QAAQ,KAAM,IAAMyhB,EAAOvtB,EAAI,GAAG,EACjF4F,GAAKiK,SAAWrQ,KAAKg5B,YAAYhR,EAAM+F,EAAOvtB,EAAI,GAAG,GAAIs1B,GAe7D,IAbAzlB,EAAW0d,EAAOvtB,EAAI,GAAG,GAEzB+I,IADA/I,EACQ,EACR0U,EAAOQ,EACHogB,GAA+B,aAAlB1vB,EAAKiK,UAA6C,eAAlBjK,EAAKiK,UAA+C,aAAlBjK,EAAKiK,SACpFA,EAAW,OAENylB,GAA+B,gBAAlB1vB,EAAKiK,UAAgD,kBAAlBjK,EAAKiK,UAAkD,gBAAlBjK,EAAKiK,SAC/FA,EAAW,WAENylB,IACLzlB,EAAWjK,EAAKiK,UAEf9G,EAAI/I,EAAI,EAAG+I,EAAI2L,EAAM3L,IACtB,GAAI8G,EAASpL,QAAQ,WAAa,GAAsB,SAAjB8oB,EAAOxkB,GAAG,GAC7CixB,GAAe,MAEd,CAAA,GAAqB,UAAjBzM,EAAOxkB,GAAG,IAAkBixB,EAAc,CAC/Ch6B,EAAI+I,EACJixB,GAAe,CACf,OAGA,GAAInqB,EAASpL,QAAQ,SAAW,GAAKoL,EAASpL,QAAQ,UAAY,EAC9D,KAEJ,IAAIoL,EAASpL,QAAQ,SAAW,GAAsB,WAAjB8oB,EAAOxkB,GAAG,GAAiB,CACxDkxB,EAAM1M,EAAOxkB,GAAG,EAChBwkB,GAAOxkB,GAAG,IAA0B,MAApBwkB,EAAOxkB,GAAG,GAAG,KAC7BkxB,EAAM1M,EAAOxkB,GAAG,GAAGmxB,UAAU,EAAG3M,EAAOxkB,GAAG,GAAG5I,OAAS,IAE1D85B,EAAMA,EAAMA,EAAInuB,QAAQ,KAAM,IAAMyhB,EAAOxkB,GAAG,GAC9CnD,EAAKvD,MAAQ43B,EACbr0B,EAAKoB,KAAO,aAEX,IAAI6I,EAASpL,QAAQ,YAAc,EAAG,CACvC,GAAqB,YAAjB8oB,EAAOxkB,GAAG,IAAqC,SAAjBwkB,EAAOxkB,GAAG,GACxC,KAEJ,IAAqB,WAAjBwkB,EAAOxkB,GAAG,GACV+wB,EAAO3zB,KAAK5E,OAAOgsB,EAAOxkB,GAAG,SAE5B,IAAqB,WAAjBwkB,EAAOxkB,GAAG,GAAiB,CAC5BkxB,EAAM1M,EAAOxkB,GAAG,EAChBwkB,GAAOxkB,GAAG,IAA0B,MAApBwkB,EAAOxkB,GAAG,GAAG,KAC7BkxB,EAAM1M,EAAOxkB,GAAG,GAAGmxB,UAAU,EAAG3M,EAAOxkB,GAAG,GAAG5I,OAAS,IAE1D45B,EAAO5zB,KAAK8zB,QAIhB,IAAqB,WAAjB1M,EAAOxkB,GAAG,GACV+wB,EAAO3zB,KAAK5E,OAAOgsB,EAAOxkB,GAAG,SAE5B,IAAqB,WAAjBwkB,EAAOxkB,GAAG,GAAiB,CAChC,GAAIkxB,GAAM1M,EAAOxkB,GAAG,EAChBwkB,GAAOxkB,GAAG,IAA0B,MAApBwkB,EAAOxkB,GAAG,GAAG,KAC7BkxB,EAAM1M,EAAOxkB,GAAG,GAAGmxB,UAAU,EAAG3M,EAAOxkB,GAAG,GAAG5I,OAAS,IAE1D45B,EAAO5zB,KAAK8zB,GAGpBr0B,EAAKoB,KAAOxH,KAAK85B,kBAAkB1zB,GAGvCiK,EAASpL,QAAQ,QAAU,IACF,WAArB8oB,EAAOxkB,EAAI,GAAG,IACdnD,EAAKvD,MAAQy3B,EACbl0B,EAAKoB,KAAO,UAEc,WAArBumB,EAAOxkB,EAAI,GAAG,IACnBnD,EAAKvD,MAAQ03B,EACbn0B,EAAKoB,KAAO,UAEP6I,EAASpL,QAAQ,YAAc,GAA0B,eAArB8oB,EAAOxkB,EAAI,GAAG,KACjC,IAAlBgxB,EAAO55B,QACPyF,EAAKvD,MAAQ03B,EACbn0B,EAAKoB,KAAO,WAGZpB,EAAKvD,MAAQy3B,EACbl0B,EAAKoB,KAAO,WAGpB8yB,KACAC,KACAn0B,EAAKoB,KAAOxH,KAAK85B,kBAAkB1zB,QAGb,cAArB2nB,EAAOvtB,EAAI,GAAG,KACnB4F,EAAKiK,SAAWrQ,KAAKg5B,YAAYjL,EAAOvtB,EAAI,GAAG,GAAIutB,EAAOvtB,EAAI,GAAG,GAAIs1B,GAEhD,SAAjB1vB,EAAKiK,UAA4C,WAArB0d,EAAOvtB,EAAI,GAAG,IAAwC,OAArButB,EAAOvtB,EAAI,GAAG,GAC3E4F,EAAKiK,SAAW,UAGM,YAAjBjK,EAAKiK,UAA+C,WAArB0d,EAAOvtB,EAAI,GAAG,IAAwC,OAArButB,EAAOvtB,EAAI,GAAG,KACnF4F,EAAKiK,SAAW,cAGK,WAArB0d,EAAOvtB,EAAI,GAAG,IACd4F,EAAKoB,KAAO,SACZpB,EAAKvD,MAAQd,OAAOgsB,EAAOvtB,EAAI,GAAG,MAGlC4F,EAAKoB,KAAO,UACRizB,EAAM1M,EAAOvtB,EAAI,GAAG,KACF,MAAXi6B,EAAI,KACXA,EAAMA,EAAIC,UAAU,EAAGD,EAAI95B,OAAS,IAExCyF,EAAKvD,MAAQ43B,GAEjBr0B,EAAKoB,KAAOxH,KAAK85B,kBAAkB1zB,GAEvCC,GAAMA,MAAMM,KAAKP,OAEhB,CAAA,GAAqB,SAAjB2nB,EAAOvtB,GAAG,GAAe,CAC9B,GAAuB,SAAjButB,EAAO,GAAG,KAAwC,QAArBA,EAAOvtB,EAAI,GAAG,IAAgBs1B,GAAa91B,KAAKqI,KAAKC,YAAY,OAAOwE,gBAAkBihB,EAAOvtB,EAAI,GAAG,IACvI,QAWJ,KATAR,KAAK+tB,OAASA,EAAO1a,OAAO7S,EAAI,EAAGkV,GAAQlV,EAAI,IAE3C25B,EADAn6B,KAAK+F,oBACQ/C,UAAW,MAAOqD,SAAWtD,KAAK,IAGlCC,UAAW,MAAOqD,UAEnCg0B,EAAW,EACX7V,EAAOne,EAAMA,MAAM1F,OACdof,EAAI,EAAGA,EAAIyE,EAAMzE,IACd1Z,EAAMA,MAAM0Z,GAAG1Z,OACfg0B,GAMR,OAHAp0B,GAAUU,KAAK0zB,GACfh0B,EAAMA,MAAMM,KAAKwzB,GACjBA,EAAWn6B,KAAKy2B,cAAcz2B,KAAK+tB,OAAQoM,EAAUl0B,EAAW6vB,GACzDzvB,EAEN,GAAqB,eAAjB0nB,EAAOvtB,GAAG,GACM,QAAjButB,EAAOvtB,GAAG,IAAiBs1B,GAAa91B,KAAKqI,KAAKC,YAAY,OAAOwE,gBAAkBihB,EAAOvtB,GAAG,GACjG6F,EAAMtD,KAAM,EAGZsD,EAAMrD,UAAY+qB,EAAOvtB,GAAG,OAG/B,IAAqB,UAAjButB,EAAOvtB,GAAG,GAAgB,CAK/B,IAJAR,KAAK+tB,OAASA,EAAO1a,OAAO7S,EAAI,EAAGkV,GAAQlV,EAAI,IAC/CyF,EAAU00B,MACVt0B,EAAQrG,KAAKoG,KACbg0B,EAAOn0B,EAAUtF,OACZo5B,EAAI,EAAGA,EAAIK,EAAML,IAClB1zB,EAAQrG,KAAKsoB,eAAeriB,EAAU8zB,GAAI1zB,EAAa,IAAN0zB,EAErD,OAAO/5B,MAAKy2B,cAAcz2B,KAAK+tB,OAAQ1nB,EAAOJ,EAAW6vB,IAGjE,MAAOzvB,IAEX/D,EAAapC,UAAU06B,mBAAqB,SAAU7M,EAAQ9K,GAC1D,GACIlD,GADAld,EAAQ,EAEZ,KAAKkd,EAAIkD,EAAKlD,EAAIgO,EAAOptB,SACA,WAAjBotB,EAAOhO,GAAG,IAAoC,MAAjBgO,EAAOhO,GAAG,IAA+B,OAAjBgO,EAAOhO,GAAG,IADtCA,IAKX,KAAVld,IACAogB,GAAO,GAEU,OAAjB8K,EAAOhO,GAAG,GACVld,GAASkrB,EAAOhO,GAAG,GAGnBld,EAAQ,IAIpB,QAASA,MAAOA,EAAOogB,IAAKA,IAQhC3gB,EAAapC,UAAUyL,WAAa,SAAU3K,GAC1C,GACI65B,GACAnK,EAFA3lB,EAAY/J,EAAO4K,QAAQ,gBAAgBA,QAAQ,qBAGjC,iBAAX5K,IACP0vB,EAAU1wB,KAAKwC,QAAQ0D,GAAK,IAAMlF,EAClCA,EAAS0J,SAASC,eAAe+lB,KAGjCmK,EAAc75B,EAAOkF,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACvDwqB,EAAU3lB,EAAU7E,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAE1D,IAAIqG,GAAQvM,KAAKwM,SAASquB,EAC1B76B,MAAK8D,WAAalE,MAAMM,UAAU+E,QAAQrE,KAAKI,EAAO4K,QAAQ,gBAAgB8B,SAAU1M,EAAO4K,QAAQ,uBACvG5L,KAAKmY,YAAanV,UAAauJ,EAAMvJ,UAAWD,IAAOwJ,EAAMxJ,IAAKsD,MAASkG,EAAMlG,QAAUqqB,GAC3F1wB,KAAK8D,YAAc,GAEvBxB,EAAapC,UAAUsL,UAAY,SAAUxK,GAMzC,IAAK,GALD+M,GAAWnC,UAAQ5K,EAAQ,qBAC3B+J,EAAY/J,EAAO4K,QAAQ,gBAAgBA,QAAQ,sBACnD2mB,EAAUvyB,KAAKuyB,QAAQvxB,GACvB0vB,EAAU3lB,EAAU7E,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IACtD8qB,EAAejmB,EAAUjG,iBAAiB,qBACrCtE,EAAI,EAAGkV,EAAOsb,EAAarwB,OAAQH,EAAIkV,EAAMlV,IAC9CuN,EAAS7H,KAAO8qB,EAAaxwB,GAAG0F,KAChClG,KAAK+D,UAAYvD,EAGzBR,MAAK6oB,WAAYngB,MAAS6pB,EAAQ7pB,MAAO3B,MAASwrB,EAAQxrB,MAAOS,KAAQ+qB,EAAQ/qB,KAAM6I,SAAYkiB,EAAQliB,SACnGxN,MAAS0vB,EAAQ1vB,QAAU6tB,GACnC1wB,KAAK+D,WAAa,GAEtBzB,EAAapC,UAAUuL,SAAW,SAAUzK,GACxC,GAAI+M,GAAWnC,UAAQ5K,EAAQ,qBAC3BoF,EAAOpG,KAAKuyB,QAAQxkB,EAAS7H,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,IAC/D6H,GAAS4C,UAAU4J,SAAS,cAC5BnU,EAAKnD,UAAW,EAChBjD,KAAK6D,UAAY7D,KAAK6D,UAAUi3B,OAAO,SAAUC,GAAY,MAAOA,KAAahtB,EAAS7H,KAC1F6H,EAAS4C,UAAUiN,OAAO,aAC1B5d,KAAKg7B,oBAAoBh6B,EAAQ+M,GAAU,GAC3C/M,EAAO0M,SAAS,GAAGiD,UAAUC,IAAI,YACjC5P,EAAO0M,SAAS,GAAGiD,UAAUiN,OAAO,UACpC5c,EAAOmN,aAAa,QAASnO,KAAKqI,KAAKC,YAAY,eAGnDlC,EAAKnD,UAAW,EACZjD,KAAK6D,UAAUoB,QAAQ8I,EAAS7H,IAAM,GACtClG,KAAK6D,UAAUwP,OAAOrT,KAAK6D,UAAUlD,OAAS,EAAG,EAAGoN,EAAS7H,IAEjE6H,EAAS4C,UAAUC,IAAI,aACvB5Q,KAAKg7B,oBAAoBh6B,EAAQ+M,GAAU,GAC3C/M,EAAO0M,SAAS,GAAGiD,UAAUC,IAAI,UACjC5P,EAAO0M,SAAS,GAAGiD,UAAUiN,OAAO,YACpC5c,EAAOmN,aAAa,QAASnO,KAAKqI,KAAKC,YAAY,iBAG3DhG,EAAapC,UAAUwL,UAAY,SAAU1K,GACzC,GAAI+J,GAAYa,UAAQ5K,EAAQ,sBAC5BuL,EAAQvM,KAAKwM,SAASzB,EAAU7E,GAAGoG,QAAQtM,KAAKwC,QAAQ0D,GAAK,IAAK,KAClEJ,EAASiF,EAAU7E,GAAGjB,QAAQ,WAAa,CAC/C,IAAI8F,EAAU4F,UAAU4J,SAAS,aACzBzU,IACIm1B,MACKj4B,UAAYuJ,EAAMvJ,UAC3Bi4B,EAASl4B,IAAMwJ,EAAMxJ,IACrBk4B,EAASh4B,UAAW,EACpBjD,KAAKmG,eAAgBC,KAAM60B,IAAY,IAGvC1uB,EAAMtJ,UAAW,EAErBjD,KAAK6D,UAAY7D,KAAK6D,UAAUi3B,OAAO,SAAUC,GAAY,MAAOA,KAAahwB,EAAU7E,KAC3F6E,EAAU4F,UAAUiN,OAAO,aAC3B5d,KAAKk7B,sBAAsBl6B,EAAQ+J,GAAW,GAC9C/J,EAAO0M,SAAS,GAAGiD,UAAUC,IAAI,YACjC5P,EAAO0M,SAAS,GAAGiD,UAAUiN,OAAO,UACpC5c,EAAOmN,aAAa,QAASnO,KAAKqI,KAAKC,YAAY,cACnDtI,KAAKm7B,sBAEJ,CACD,GAAIr1B,EAAQ,CACR,GAAIm1B,KACJA,GAASj4B,UAAYuJ,EAAMvJ,UAC3Bi4B,EAASl4B,IAAMwJ,EAAMxJ,IACrBk4B,EAASh4B,UAAW,EACpBjD,KAAKmG,eAAgBC,KAAM60B,IAAY,OAGvC1uB,GAAMtJ,UAAW,CAEjBjD,MAAK6D,UAAUoB,QAAQ8F,EAAU7E,IAAM,GACvClG,KAAK6D,UAAUwP,OAAOrT,KAAK6D,UAAUlD,OAAS,EAAG,EAAGoK,EAAU7E,IAElE6E,EAAU4F,UAAUC,IAAI,aACxB5Q,KAAKk7B,sBAAsBl6B,EAAQ+J,GAAW,GAC9C/J,EAAO0M,SAAS,GAAGiD,UAAUC,IAAI,UACjC5P,EAAO0M,SAAS,GAAGiD,UAAUiN,OAAO,YACpC5c,EAAOmN,aAAa,QAASnO,KAAKqI,KAAKC,YAAY,kBAG3DhG,EAAapC,UAAUi7B,gBAAkB,WACrC,IAAK,GAAI36B,GAAI,EAAGA,EAAIR,KAAK6D,UAAUlD,OAAQH,IAEvC,GADaR,KAAK6D,UAAUrD,GAAGyG,MAAM,KAC1BtG,OAAS,EAAG,CACnB,GAAIoN,GAAW/N,KAAKwC,QAAQoC,cAAc,IAAM5E,KAAK6D,UAAUrD,IAC3DQ,EAAS+M,EAASnJ,cAAc,qBACpCmJ,EAAWnC,UAAQ5K,EAAQ,sBACb2P,UAAU4J,SAAS,cAC7Bva,KAAKyL,SAASzK,OAGjB,CACD,GAAI+J,GAAY/K,KAAKwC,QAAQoC,cAAc,IAAM5E,KAAK6D,UAAUrD,IAC5DQ,EAAS+J,EAAUnG,cAAc,oBACrCmG,EAAYa,UAAQ5K,EAAQ,uBACb2P,UAAU4J,SAAS,cAC9Bva,KAAK0L,UAAU1K,KAK/BsB,EAAapC,UAAUg7B,sBAAwB,SAAUl6B,EAAQ+J,EAAWqwB,GASxE,IAAK,GARDxJ,GAAU7mB,EAAUjG,iBAAiB,mBACrC+sB,EAAS9mB,EAAUjG,iBAAiB,kBACpC0T,EAAUzN,EAAUjG,iBAAiB,gBACrCu2B,EAAUtwB,EAAUjG,iBAAiB,cACrCw2B,EAAgBvwB,EAAUjG,iBAAiB,kBAC3Cy2B,EAAWxwB,EAAUjG,iBAAiB,mBACtCqwB,EAAYpqB,EAAUjG,iBAAiB,oBACvC02B,EAAgBzwB,EAAUjG,iBAAiB,sBACtCtE,EAAI,EAAGA,EAAIoxB,EAAQjxB,OAAQH,IAC5B46B,GACII,EAAch7B,IAAMg7B,EAAch7B,GAAGmQ,UAAU4J,SAAS,cACxDihB,EAAch7B,GAAGmQ,UAAUC,IAAI,aAEnCghB,EAAQpxB,GAAGsxB,UAAW,EACtBD,EAAOrxB,GAAGsxB,UAAW,EACrBuJ,EAAQ76B,GAAGsxB,UAAW,EAClBtZ,EAAQhY,KACRgY,EAAQhY,GAAGsxB,UAAW,GAEtBwJ,EAAc96B,KACd86B,EAAc96B,GAAGsxB,UAAW,GAE5BqD,EAAU30B,KACV20B,EAAU30B,GAAGsxB,UAAW,GAE5BF,EAAQpxB,GAAG4E,cAAcuL,UAAUC,IAAI,cACnC2qB,EAAS/6B,KAAOQ,IAChBu6B,EAAS/6B,GAAGsxB,UAAW,EACvByJ,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUiN,OAAO,YACzC2d,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUC,IAAI,aAItC4qB,EAAch7B,IACdg7B,EAAch7B,GAAGmQ,UAAUiN,OAAO,aAEtCgU,EAAQpxB,GAAGsxB,UAAW,EACtBD,EAAOrxB,GAAGsxB,UAAW,EACrBuJ,EAAQ76B,GAAGsxB,UAAW,EACtByJ,EAAS/6B,GAAGsxB,UAAW,EACnBtZ,EAAQhY,KACRgY,EAAQhY,GAAGsxB,UAAW,GAEtBwJ,EAAc96B,KACd86B,EAAc96B,GAAGsxB,UAAW,GAE5BqD,EAAU30B,KACV20B,EAAU30B,GAAGsxB,UAAW,GAE5BF,EAAQpxB,GAAG4E,cAAcuL,UAAUiN,OAAO,cAC1C2d,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUiN,OAAO,UACzC2d,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUC,IAAI,YAG9C5Q,MAAKg7B,oBAAoBh6B,EAAQ+J,EAAWqwB,IAEhD94B,EAAapC,UAAU86B,oBAAsB,SAAUh6B,EAAQ+J,EAAWqwB,GAYtE,IAAK,GAXDK,GAAa1wB,EAAUjG,iBAAiB,6BACxC42B,EAAiB3wB,EAAUjG,iBAAiB,+BAC5C62B,EAAc5wB,EAAUjG,iBAAiB,wBACzC2V,EAAc1P,EAAUjG,iBAAiB,2BACzC82B,EAAkB7wB,EAAUjG,iBAAiB,yBAC7C+2B,EAAkB9wB,EAAUjG,iBAAiB,sBAC7Cg3B,EAAqB/wB,EAAUjG,iBAAiB,4BAChDi3B,EAAahxB,EAAUjG,iBAAiB,kBACxCy2B,EAAWxwB,EAAUjG,iBAAiB,gBACtCqwB,EAAYpqB,EAAUjG,iBAAiB,iBACvCiJ,EAAWhD,EAAUjG,iBAAiB,qBACjCtE,EAAI,EAAGA,EAAIu7B,EAAWp7B,OAAQH,IAC/B46B,GACIrtB,EAASvN,IAAMuN,EAASvN,GAAGmQ,UAAU4J,SAAS,cAC9CxM,EAASvN,GAAGmQ,UAAUC,IAAI,aAE9BmrB,EAAWv7B,GAAGsxB,UAAW,EACrBqD,EAAU30B,KACV20B,EAAU30B,GAAGsxB,UAAW,GAExByJ,EAAS/6B,KAAOQ,IAChBu6B,EAAS/6B,GAAGsxB,UAAW,EACvByJ,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUiN,OAAO,YACzC2d,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUC,IAAI,aAItC7C,EAASvN,IACTuN,EAASvN,GAAGmQ,UAAUiN,OAAO,aAE7BuX,EAAU30B,KACV20B,EAAU30B,GAAGsxB,UAAW,GAE5BiK,EAAWv7B,GAAGsxB,UAAW,EACzByJ,EAAS/6B,GAAGsxB,UAAW,EACvByJ,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUiN,OAAO,UACzC2d,EAAS/6B,GAAGkN,SAAS,GAAGiD,UAAUC,IAAI,YAU9C,KAASpQ,EAAI,EAAGA,EAAIi7B,EAAW96B,OAAQH,IACrB0E,eAAau2B,EAAWj7B,GAAI,gBAE1Bw7B,SADZZ,CAOR,KAAS56B,EAAI,EAAGA,EAAIk7B,EAAe/6B,OAAQH,IAC1B0E,eAAaw2B,EAAel7B,GAAI,kBAE9Bw7B,SADXZ,CAOR,KAAS56B,EAAI,EAAGA,EAAIm7B,EAAYh7B,OAAQH,IAC1B0E,eAAay2B,EAAYn7B,GAAI,WAE3Bw7B,SADRZ,CAOR,KAAS56B,EAAI,EAAGA,EAAIia,EAAY9Z,OAAQH,IAC1B0E,eAAauV,EAAYja,GAAI,cAE3Bw7B,SADRZ,CAOR,KAAS56B,EAAI,EAAGA,EAAIo7B,EAAgBj7B,OAAQH,IAC1B0E,eAAa02B,EAAgBp7B,GAAI,YAE/BsxB,WADZsJ,CAOR,KAAS56B,EAAI,EAAGA,EAAIq7B,EAAgBl7B,OAAQH,IAC1B0E,eAAa22B,EAAgBr7B,GAAI,SAE/BsxB,WADZsJ,CAOR,KAAS56B,EAAI,EAAGA,EAAIs7B,EAAmBn7B,OAAQH,IAC1B0E,eAAa42B,EAAmBt7B,GAAI,eAElCw7B,SADfZ,GAQZt6B,GACIm7B,WACD35B,EAAapC,UAAW,cAAW,IACtCY,GACIm7B,WACD35B,EAAapC,UAAW,kBAAe,IAC1CY,GACIm7B,WACD35B,EAAapC,UAAW,mBAAgB,IAC3CY,GACIm7B,WACD35B,EAAapC,UAAW,aAAU,IACrCY,GACIm7B,WACD35B,EAAapC,UAAW,gBAAa,IACxCY,GACIm7B,WACD35B,EAAapC,UAAW,iBAAc,IACzCY,GACIo7B,aAAY75B,IACbC,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,sBAAmB,IAC9CY,GACIa,WAAS,YACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,gBACDW,EAAapC,UAAW,cAAW,IACtCY,GACIa,WAAS,OACVW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,WAAS,OACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,OACVW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,cACDW,EAAapC,UAAW,qBAAkB,IAC7CY,GACIa,WAAS,KACVW,EAAapC,UAAW,eAAY,IACvCY,GACIa,gBACDW,EAAapC,UAAW,iBAAc,IACzCY,GACIa,WAAS,eACVW,EAAapC,UAAW,kBAAe,IAC1CY,GACIa,YAAS,IACVW,EAAapC,UAAW,wBAAqB,IAChDY,GACIa,WAAS,YACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,IACVW,EAAapC,UAAW,oBAAiB,IAC5CY,GACIa,WAAS,SACVW,EAAapC,UAAW,aAAU,IACrCY,GACIa,WAAS,SACVW,EAAapC,UAAW,YAAS,IACpCY,GACIa,YAAS,IACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIa,WAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,eAAY,IACvCY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,YAAS,IACVW,EAAapC,UAAW,sBAAmB,IAC9CY,GACIa,YAAS,IACVW,EAAapC,UAAW,yBAAsB,IACjDY,GACIa,WAAS,KACVW,EAAapC,UAAW,gBAAa,IACxCY,GACIo7B,WAAUl5B,UAAW,MAAOqD,UAAanE,IAC1CI,EAAapC,UAAW,WAAQ,IACnCoC,EAAexB,GACXq7B,yBACD75B,IAEL85B,aC9+LEC,EAA8B,WAC9B,QAASA,GAAaC,GAClBt8B,KAAKs8B,OAASA,EACdt8B,KAAKu8B,mBA0qBT,MAxqBAF,GAAan8B,UAAUiF,QAAU,WACzBnF,KAAKs8B,OAAOE,aAGhBx8B,KAAKy8B,uBAETJ,EAAan8B,UAAUq8B,iBAAmB,WAClCv8B,KAAKs8B,OAAOE,cAGhBx8B,KAAKs8B,OAAOI,GAAG,gBAAiB18B,KAAK28B,aAAc38B,MACnDA,KAAKs8B,OAAOI,GAAG,YAAa18B,KAAKmF,QAASnF,QAE9Cq8B,EAAan8B,UAAUu8B,oBAAsB,WACzCz8B,KAAKs8B,OAAOM,IAAI,gBAAiB58B,KAAK28B,cACtC38B,KAAKs8B,OAAOM,IAAI,YAAa58B,KAAKmF,UAEtCk3B,EAAan8B,UAAUy8B,aAAe,SAAU91B,GAC5C,OAAQA,EAAKiwB,MACT,IAAK,oBACDjwB,EAAKhE,MAAW,IAAc,WAAI7C,KAAK68B,kBAAkBh2B,EAAKhE,MAAY,KAAGgE,EAAKhE,MAAkB,WACpG,MACJ,KAAK,cACD7C,KAAK88B,YAAYj2B,EAAKhE,MAAkB,WAAGgE,EAAKhE,MAAY,KAAGgE,EAAKhE,MAAmB,YACvF,MACJ,KAAK,kBACDgE,EAAKhE,MAAW,IAAO,IAAI7C,KAAK+8B,gBAAgBl2B,EAAKhE,MAAY,KACjE,MACJ,KAAK,uBACDgE,EAAKhE,MAAW,IAAO,IAAI7C,KAAKg9B,qBAAqBn2B,EAAKhE,MAAY,KACtE,MACJ,KAAK,uBACDgE,EAAKhE,MAAW,IAAO,IAAI7C,KAAKi9B,qBAAqBp2B,EAAKhE,MAAW,IACrE,MACJ,KAAK,4BACDgE,EAAKhE,MAAW,IAAO,IAAI7C,KAAKk9B,0BAA0Br2B,EAAKhE,MAAW,OAItFw5B,EAAan8B,UAAU28B,kBAAoB,SAAUz2B,EAAMixB,GAWvD,MAVAA,GAAa,IACU,OAAnBjxB,EAAKpD,WACLq0B,GAAc,UACdA,EAAar3B,KAAKm9B,kBAAkB/2B,EAAKC,MAAOgxB,GAAc,MAG9DA,GAAc,WACdA,EAAar3B,KAAKm9B,kBAAkB/2B,EAAKC,MAAOgxB,GAAc,KAElEA,GAAc,KAGlBgF,EAAan8B,UAAUk9B,6BAA+B,SAAU/sB,GAC5D,GAAIgtB,EACJ,QAAQhtB,GACJ,IAAK,MACDgtB,EAAgB,UAChB,MACJ,KAAK,MACDA,EAAgB,aAChB,MACJ,KAAK,OACDA,EAAgB,oBAChB,MACJ,KAAK,MACDA,EAAgB,UAChB,MACJ,KAAK,OACDA,EAAgB,iBAChB,MACJ,KAAK,OACDA,EAAgB,QAGxB,MAAOA,IAGXhB,EAAan8B,UAAUi9B,kBAAoB,SAAU92B,EAAOgxB,GACxD,GAAI50B,GAAQzC,KACRQ,EAAI,CA4KR,OA1KA6F,GAAM+Z,QAAQ,SAAU5E,GACpBhb,IACA62B,GAAc,QACK1e,KAAf6C,EAAKnV,QACkB,OAAnBmV,EAAKxY,WACLq0B,GAAc,WACdA,EAAa50B,EAAM06B,kBAAkB3hB,EAAKnV,MAAOgxB,GAAc,MAG/DA,GAAc,YACdA,EAAa50B,EAAM06B,kBAAkB3hB,EAAKnV,MAAOgxB,GAAc,KAGvE,IAAIiG,GAAsB,WAAd9hB,EAAKhU,MAAuC,OAAlBgU,EAAKnL,UAAuC,UAAlBmL,EAAKnL,UAAwBmL,EAAK3Y,OAA+B,KAAtB2Y,EAAK3Y,MAAMomB,OAAgBzN,EAAK3Y,MAAMyJ,QAAQ,KAAM,MAAQ,EACrJ,YAAdkP,EAAKhU,MAAwC,OAAlBgU,EAAKnL,UAAuC,UAAlBmL,EAAKnL,WAAyBmL,EAAK3Y,OAA+B,IAAtB2Y,EAAK3Y,MAAMlC,SAC5G28B,EAAQ9hB,EAAK3Y,MAAM,GAAGyJ,QAAQ,KAAM,MAExC,IAAIvF,GAAQyU,EAAKzU,MAAQyU,EAAKzU,MAAM2zB,UAAU,GAAK,EACnD,QAAQlf,EAAKnL,UACT,IAAK,WACDgnB,GAAc,IAAMtwB,EAAQ,gBAAkBu2B,EAAQ,IACtD,MACJ,KAAK,cACDjG,GAAc,IAAMtwB,EAAQ,wBAA0ByU,EAAK3Y,MAAQ,KACnE,MACJ,KAAK,aACDw0B,GAAc,IAAMtwB,EAAQ,iBAAmBu2B,EAAQ,IACvD,MACJ,KAAK,gBACDjG,GAAc,IAAMtwB,EAAQ,yBAA2ByU,EAAK3Y,MAAQ,KACpE,MACJ,KAAK,WACDw0B,GAAc,IAAMtwB,EAAQ,gBAAkBu2B,EAAQ,KACtD,MACJ,KAAK,cACDjG,GAAc,IAAMtwB,EAAQ,wBAA0ByU,EAAK3Y,MAAQ,MACnE,MACJ,KAAK,SACDw0B,GAAc,IAAMtwB,EAAQ,SAC5B,MACJ,KAAK,YACDswB,GAAc,IAAMtwB,EAAQ,iBAC5B,MACJ,KAAK,UACDswB,GAAc,IAAMtwB,EAAQ,OAC5B,MACJ,KAAK,aACDswB,GAAc,IAAMtwB,EAAQ,eAC5B,MACJ,KAAK,QACiB,WAAdyU,EAAKhU,KACL6vB,GAAc,IAAMtwB,EAAQ,MAAQu2B,EAAQ,IAEzB,SAAd9hB,EAAKhU,KACV6vB,GAAc,IAAMtwB,EAAQ,MAAQyU,EAAK3Y,MAAQ,KAE5C2Y,EAAKhU,KACV6vB,GAAc,IAAMtwB,EAAQ,KAAOyU,EAAK3Y,MAK5C,MACJ,KAAK,WACiB,WAAd2Y,EAAKhU,KACL6vB,GAAc,IAAMtwB,EAAQ,aAAeu2B,EAAQ,KAEhC,SAAd9hB,EAAKhU,KACV6vB,GAAc,IAAMtwB,EAAQ,aAAeyU,EAAK3Y,MAAQ,KAGxDw0B,GAAc,IAAMtwB,EAAQ,YAAcyU,EAAK3Y,MAAQ,GAE3D,MACJ,KAAK,KACiB,WAAd2Y,EAAKhU,KACDgU,EAAK3Y,MAAMlC,OAAS,GAGpBJ,GADIA,EAAIib,EAAK3Y,MAAM+G,IAAI,SAAU2zB,EAAGh0B,GAAK,MAAQA,GAAIiS,EAAK3Y,MAAMlC,OAAS,IAAO48B,EAAI,IAAO,KAAQrqB,YAC7FsqB,SAAS,KAAOj9B,EAAEm6B,UAAU,EAAGn6B,EAAEI,OAAS,GAAKJ,EACrD82B,GAAc,IAAMtwB,EAAQ,gBAAkBxG,EAAI,MAGlD82B,GAAc,IAAMtwB,EAAQ,iBAAmBu2B,EAAQ,MAGxC,WAAd9hB,EAAKhU,OACNgU,EAAK3Y,MAAMlC,OAAS,EACpB02B,GAAc,IAAMtwB,EAAQ,gBAAkByU,EAAK3Y,MAAMqQ,WAAa,KAGtEmkB,GAAc,IAAMtwB,EAAQ,gBAAkByU,EAAK3Y,MAAQ,KAGnE,MACJ,KAAK,QACD,GAAkB,WAAd2Y,EAAKhU,KACL,GAAIgU,EAAK3Y,MAAMlC,OAAS,EAAG,CAEvB,GAAIJ,GAAIib,EAAK3Y,MAAM+G,IAAI,SAAU2zB,EAAGh0B,GAAK,MAAQA,GAAIiS,EAAK3Y,MAAMlC,OAAS,IAAO48B,EAAI,IAAO,KAAQrqB,UACnG3S,GAAIA,EAAEi9B,SAAS,KAAOj9B,EAAEm6B,UAAU,EAAGn6B,EAAEI,OAAS,GAAKJ,EACrD82B,GAAc,IAAMtwB,EAAQ,iBAAmBxG,EAAI,SAGnD82B,IAAc,IAAMtwB,EAAQ,kBAAoBu2B,EAAQ,UAGzC,WAAd9hB,EAAKhU,OACNgU,EAAK3Y,MAAMlC,OAAS,EACpB02B,GAAc,IAAMtwB,EAAQ,iBAAmByU,EAAK3Y,MAAMqQ,WAAa,KAGvEmkB,GAAc,IAAMtwB,EAAQ,iBAAmByU,EAAK3Y,MAAQ,KAGpE,MACJ,KAAK,cACiB,WAAd2Y,EAAKhU,KACL6vB,GAAc,IAAMtwB,EAAQ,eAAiByU,EAAK3Y,MAAQ,IAG1Dw0B,GAAc,IAAMtwB,EAAQ,gBAAkByU,EAAK3Y,MAAQ,IAE/D,MACJ,KAAK,qBACiB,WAAd2Y,EAAKhU,KACL6vB,GAAc,IAAMtwB,EAAQ,gBAAkByU,EAAK3Y,MAAQ,IAG3Dw0B,GAAc,IAAMtwB,EAAQ,iBAAmByU,EAAK3Y,MAAQ,IAEhE,MACJ,KAAK,UACiB,WAAd2Y,EAAKhU,KACL6vB,GAAc,IAAMtwB,EAAQ,cAAgByU,EAAK3Y,MAAM,GAAK,YAAc2Y,EAAK3Y,MAAM,GAAK,IAG1Fw0B,GAAc,IAAMtwB,EAAQ,gBAAkByU,EAAK3Y,MAAM,GAAK,eAAiB2Y,EAAK3Y,MAAM,GAAK,IAEnG,MACJ,KAAK,aACiB,WAAd2Y,EAAKhU,KACL6vB,GAAc,YAActwB,EAAQ,aAAeyU,EAAK3Y,MAAM,GAAK,SAAWkE,EAAQ,aAAeyU,EAAK3Y,MAAM,GAAK,MAGrHw0B,GAAc,YAActwB,EAAQ,eAAiByU,EAAK3Y,MAAM,GAAK,UAAYkE,EAAQ,eAAiByU,EAAK3Y,MAAM,GAAK,MAE9H,MACJ,KAAK,WACiB,WAAd2Y,EAAKhU,KACL6vB,GAAc,IAAMtwB,EAAQ,eAAiByU,EAAK3Y,MAAQ,IAG1Dw0B,GAAc,IAAMtwB,EAAQ,gBAAkByU,EAAK3Y,MAAQ,IAE/D,MACJ,KAAK,kBACiB,WAAd2Y,EAAKhU,KACL6vB,GAAc,IAAMtwB,EAAQ,gBAAkByU,EAAK3Y,MAAQ,IAG3Dw0B,GAAc,IAAMtwB,EAAQ,iBAAmByU,EAAK3Y,MAAQ,KAIxEw0B,GAAc,IACVhxB,EAAM1F,SAAWH,IACjB62B,GAAc,OAGfA,GAEXgF,EAAan8B,UAAU48B,YAAc,SAAUzF,EAAYjxB,EAAMkxB,GAC7D,GAAImG,EACAh+B,QAAO4H,KAAKgwB,GAAYpyB,QAAQ,SAAW,GAC3Cw4B,EAAYpG,EAAiB,KAC7BjxB,EAAKpD,UAAY,OAEZvD,OAAO4H,KAAKgwB,GAAYpyB,QAAQ,QAAU,IAC/Cw4B,EAAYpG,EAAgB,IAC5BjxB,EAAKpD,UAAY,MAErBoD,EAAKC,SACLrG,KAAK09B,eAAeD,EAAWr3B,EAAKC,MAAOixB,IAE/C+E,EAAan8B,UAAUw9B,eAAiB,SAAUD,EAAWp3B,EAAOixB,GAahE,IAAK,GAZD+F,GACA71B,EAEAm2B,EACA18B,EACA28B,EACA56B,EACAH,EACAs3B,EACA/zB,EACAy3B,EACAxK,EACK7yB,EAAI,EAAGuE,EAAM04B,EAAU98B,OAAQH,EAAIuE,EAAKvE,IAAK,CAClD,GAAIs9B,MACAC,IAGJ,IAFA/6B,EAAYvD,OAAO4H,KAAKo2B,EAAUj9B,IAAI,GACtCqC,EAAQ46B,EAAUj9B,GAAGwC,GACH,SAAdA,EAEIm3B,EADAn6B,KAAKs8B,OAAOv2B,oBACC/C,UAAWA,EAAUsJ,QAAQ,IAAK,IAAKjG,SAAWtD,KAAK,IAGvDC,UAAWA,EAAUsJ,QAAQ,IAAK,IAAKjG,UAExDA,EAAMM,KAAKwzB,GACXn6B,KAAK09B,eAAeD,EAAUj9B,GAAGwC,GAAYqD,EAAMA,EAAM1F,OAAS,GAAG0F,MAAOixB,OAE3E,IAAkB,QAAdt0B,EAAqB,CAC1B,GAAIg7B,OAAa,GAEbC,KACA52B,KACA62B,KACAC,KAGAC,KAEAC,KACAC,IACA1+B,OAAM2+B,QAAQ17B,IAA2B,IAAjBA,EAAMlC,SAE9B09B,EAAkBx7B,GADlBwE,EAAO5H,OAAO4H,KAAKxE,IACU,IAC7By7B,EAAmBz7B,EAAMwE,EAAK,IACC,gBAApBg3B,KACPJ,EAAcx+B,OAAO4H,KAAKg3B,GAAiB,GAE3CH,EADYz+B,OAAO4H,KAAKg3B,EAAgB5+B,OAAO4H,KAAKg3B,GAAiB,KAChD,GACrBF,EAAY1+B,OAAO4H,KAAKi3B,EAAiB7+B,OAAO4H,KAAKi3B,GAAkB,KAAK,GAC3D,QAAbJ,GAAoC,QAAdC,IACtBd,EAAgB,aAOhBj3B,GAASW,MAAOk3B,EAAav1B,MAAOu1B,EAAap7B,MADjDwwB,GAJA+K,EAAaC,EAAgBJ,GAAaC,GAE5BI,EAAiBL,GAAaE,IAGuB9tB,SAAUgtB,EAAe71B,KAF5FA,EAA6B,gBAAf42B,GAA0B,SAAW,QAGnD/3B,EAAMM,KAAKP,GACX43B,GAAa,KAIpBA,IAEG7D,EADAn6B,KAAKs8B,OAAOv2B,oBACC/C,UAAWA,EAAUsJ,QAAQ,IAAK,IAAKjG,SAAWtD,KAAK,IAGvDC,UAAWA,EAAUsJ,QAAQ,IAAK,IAAKjG,UAExDA,EAAMM,KAAKwzB,GACXn6B,KAAK09B,eAAeD,EAAUj9B,GAAGwC,GAAYqD,EAAMA,EAAM1F,OAAS,GAAG0F,MAAOixB,QAG/E,CAUD,GARc,QADdz0B,EAAQ46B,EAAUj9B,GAAGwC,MAEjBq6B,EAAgB,UAEC,iBAAVx6B,KACPw6B,EAAgB,QAChB71B,EAAO,UACP6rB,EAAYxwB,GAEO,mBACnBwwB,EAAYxwB,EACZ2E,EAAO,SACP61B,EAAgB,YAEf,IAAuB,oBAAsB,OAAVx6B,EAAgB,CACpDg7B,EAASp+B,OAAO4H,KAAKxE,EACrB,KAAK,GAAI2kB,GAAM,EAAGA,EAAMqW,EAAOl9B,OAAQ6mB,IACnCvmB,EAAM48B,EAAOrW,GACbmW,EAAc,EAAQE,EAAOrW,IACjB,QAARvmB,GAAiBoI,oBAAkBs0B,KACnCN,EAAgB,YAChBhK,EAAY,MAEJ,QAARpyB,GAAwC,iBAAhB08B,KACxBN,EAAgB,WAChBhK,EAAYsK,EACZn2B,EAAO,WAEPq2B,EAAOl9B,QAAU,GAAKk9B,EAAOrW,IACD,oBACxB6V,EAAgB,aAChBr6B,EAAYvD,OAAO4H,KAAKs2B,GAAa,GACrCC,GAAgBn+B,OAAO4H,KAAKs2B,EAAY36B,IAAY,IAEpD86B,EAAqBn3B,KAAKg3B,EAAY36B,GAAW46B,IACjDp2B,EAAO,WAGP61B,EAAgB,UAChBS,EAAqBn3B,KAAKg3B,IAED,qBACzBn2B,EAAO,WAGmB,oBAA4B,OAAhBm2B,EAC9B,SAAR18B,GAAkD,WAAhCxB,OAAO4H,KAAKs2B,GAAa,GACvCA,EAAoB,OAAE14B,QAAQ,MAAQ,GACtCo4B,EAAgB,gBAChBhK,EAAYsK,EAAoB,OAAErxB,QAAQ,IAAK,KAE1CqxB,EAAoB,OAAE14B,QAAQ,MAAQ,GAC3Co4B,EAAgB,cAChBhK,EAAYsK,EAAoB,OAAErxB,QAAQ,IAAK,MAG/C+wB,EAAgB,cAChBhK,EAAYsK,EAAoB,SAIpCN,EAAwB,QAARp8B,EAAgB,KAAO,QACvC88B,EAAkBJ,EAClBn2B,EAAmC,gBAApBm2B,GAAY,GAAmB,SAAW,UAG/B,qBAC9BN,EAAgBr9B,KAAKo9B,6BAA6Bn8B,GAClDuG,EAAO,SACP6rB,EAAYsK,GAEa,qBACb,WAAR18B,IACAo8B,EAAgB,WAChBhK,EAAYsK,EACZn2B,EAAO,UAEC,QAARvG,IACoB,OAAhB08B,GAAwBA,EAAYh9B,OAAS,GAAKoH,MAAMC,KAAKC,MAAM01B,KACnEN,EAAgB,WAChBhK,EAAYsK,GAEPt0B,oBAAkBs0B,IACvBN,EAAgB,YAChBhK,EAAYsK,GAES,KAAhBA,IACLN,EAAgB,aAChBhK,EAAYsK,GAEhBn2B,EAAO,UAEPm2B,EAAY14B,QAAQ,MAAQ,IAC5Bo4B,EAAgB,aAChBhK,EAAYsK,EAAYrxB,QAAQ,IAAK,IACrC9E,EAAO,UAEPm2B,EAAY14B,QAAQ,MAAQ,GAAa,SAARhE,IACjCo8B,EAAgB,WAChBhK,EAAYsK,EAAYrxB,QAAQ,IAAK,IACrC9E,EAAO,UAENO,MAAMC,KAAKC,MAAM01B,MAClBN,EAAgBA,GAAiBr9B,KAAKo9B,6BAA6Bn8B,GACnEuG,EAAO,OACP6rB,EAAYsK,QAKnB96B,IAA4B,qBAAakF,MAAMC,KAAKC,MAAMpF,KAC/Dw6B,EAAgB,QAChBhK,EAAYxwB,EACZ2E,EAAO,QAEiB,oBAAsB,KAAV3E,GAA0B,SAAVA,GAA8B,UAAVA,GACxEw6B,EAAgB,QAChBhK,EAAYxwB,EACZ2E,EAAO,UAEiB,oBAAsB,KAAV3E,IACpCw6B,EAAgB,UAChBhK,EAAYxwB,EACZ2E,EAAO,SAGPpB,GADA03B,GAAwBA,EAAqBn9B,OAAS,GAC7CoG,MAAO/D,EAAW0F,MAAO1F,EAAWH,MAAOi7B,EAAsBztB,SAAUgtB,EAAe71B,KAAMA,GAEpGu2B,GAAmBA,EAAgBp9B,OAAS,GACxCoG,MAAO/D,EAAW0F,MAAO1F,EAAWH,MAAOk7B,EAAiB1tB,SAAUgtB,EAAe71B,KAAMA,IAG3FT,MAAO/D,EAAW0F,MAAO1F,EAAWH,MAAOwwB,EAAWhjB,SAAUgtB,EAAe71B,KAAMA,GAElGnB,EAAMM,KAAKP,GACXi3B,EAAgB,MAI5BhB,EAAan8B,UAAU+8B,qBAAuB,SAAUrG,GAKpD,IAAK,GAJD4H,GAAW5H,EAAIA,IACf6H,EAAc7H,EAAI8H,OAClBC,EAAQH,EAASv3B,MAAM,KACvB23B,EAAYD,EAAM,GACbn+B,EAAI,EAAGA,EAAIi+B,EAAY99B,OAAQH,IACpCo+B,GAA0C,gBAApBH,GAAYj+B,GAAmB,IAAMi+B,EAAYj+B,GAAK,IAAMm+B,EAAMn+B,EAAI,GAAKi+B,EAAYj+B,GAAKm+B,EAAMn+B,EAAI,EAMhI,OAJIo+B,GAAUj+B,QAAU,GAAsB,MAAjBi+B,EAAU,IAAkD,MAApCA,EAAUA,EAAUj+B,OAAS,KAC9Ei+B,EAAYA,EAAUhpB,MAAM,GAAI,IAEpCgpB,EAAYA,EAAUtyB,QAAQ,eAAgB,gBAAgBA,QAAQ,QAAS,aAGnF+vB,EAAan8B,UAAUg9B,0BAA4B,SAAUtG,GACzD,GAAIiI,GAAgBjI,EAAIA,IACpB8H,EAAS9H,EAAI8H,OACbE,EAAYC,CAUhB,OATAp/B,QAAO4H,KAAKq3B,GAAQte,QAAQ,SAAU0e,GAClC,GAAIC,GAAaL,EAAOI,EACxBA,GAAY,IAAMA,EAClBF,EAAYA,EAAUtyB,QAAQwyB,EAAmC,mBAAW,IAAMC,EAAa,IAAMC,OAAOD,MAE5GH,EAAUj+B,QAAU,GAAsB,MAAjBi+B,EAAU,IAAkD,MAApCA,EAAUA,EAAUj+B,OAAS,KAC9Ei+B,EAAYA,EAAUhpB,MAAM,GAAI,IAEpCgpB,EAAYA,EAAUtyB,QAAQ,eAAgB,gBAAgBA,QAAQ,QAAS,aAGnF+vB,EAAan8B,UAAU68B,gBAAkB,SAAUkC,GAC/C,GAAIC,GAASlzB,YAAWizB,EAAQ,MAAM,GAElCp8B,EAAQ7C,KAAKm/B,gBAAgBD,GAAQ,EACzC,OAAOl/B,MAAKo/B,mBAAmBp/B,KAAKs8B,OAAOnxB,gBAAgB+zB,GAASr8B,EAAe,UAEvFw5B,EAAan8B,UAAU88B,qBAAuB,SAAUiC,GACpD,GAAIC,GAASlzB,YAAWizB,EAAQ,MAAM,GAElCp8B,EAAQ7C,KAAKm/B,gBAAgBD,GAAQ,EACzC,OAAOl/B,MAAKq/B,wBAAwBr/B,KAAKs8B,OAAOnxB,gBAAgB+zB,GAASr8B,EAAoB,eAEjGw5B,EAAan8B,UAAUk/B,mBAAqB,SAAUrrB,EAASsf,GAE3D,OAASuD,IAAK,IADO7iB,EAAQzH,QAAQ,QAAS,IACT,IAAKoyB,OAAQrL,IAEtDgJ,EAAan8B,UAAUm/B,wBAA0B,SAAUtrB,EAASsf,GAEhE,OAASuD,IAAK,IADO7iB,EAAQzH,QAAQ,QAAS,IACT,IAAKoyB,OAAQrL,IAGtDgJ,EAAan8B,UAAUi/B,gBAAkB,SAAU/4B,EAAMk5B,GACrD,GAAIC,MACAC,KACAC,IACJ,OAAOz/B,MAAK0/B,YAAYt5B,EAAKC,MAAOi5B,EAAkBC,EAASC,EAAcC,IAEjFpD,EAAan8B,UAAUw/B,YAAc,SAAUr5B,EAAOi5B,EAAkBC,EAExEC,EAAcC,GACV,GAAIp2B,oBAAkBhD,GAClB,OAASk5B,QAASA,EAASC,aAAcA,EAE7C,KAAK,GAAIh/B,GAAI,EAAGA,EAAI6F,EAAM1F,OAAQH,IAC9B,GAAI6F,EAAM7F,GAAG6F,MAGTk5B,GADI18B,EAAQ7C,KAAK0/B,YAAYr5B,EAAM7F,GAAG6F,MAAOi5B,EAAkBC,EAASC,EAAcC,IAC7D,QACzBD,EAAe38B,EAAoB,iBAElC,CACD,GAAI88B,OAAa,EACjB,IAAIt5B,EAAM7F,GAAGqC,gBAAiBjD,OAE1B,IAAK,GAAI2J,GAAI,EAAGA,EAAKlD,EAAM7F,SAAUG,OAAQ4I,IACrC+1B,IACAK,EAAa3/B,KAAK4/B,kBAAkBv5B,EAAM7F,GAAGuG,MAAO04B,IAEnDp2B,oBAAkBhD,EAAM7F,GAAGqC,MAAM0G,MACZ,WAAlBlD,EAAM7F,GAAGgH,MAAqBnB,EAAM7F,GAAGgH,KACnC83B,EACAE,EAAaG,GAAct5B,EAAM7F,GAAGqC,MAAM0G,GAG1Cg2B,EAAQ54B,KAAKN,EAAM7F,GAAGqC,MAAM0G,KAapClD,EAAM7F,GAAGqC,MAAM0G,GADf+1B,EACoB,IAAMK,EAGN,QAQ5B,IAHIL,IACAK,EAAa3/B,KAAK4/B,kBAAkBv5B,EAAM7F,GAAGuG,MAAO04B,IAEpDp5B,EAAM7F,GAAG6P,SAASpL,QAAQ,QAAU,IACd,WAAlBoB,EAAM7F,GAAGgH,MAAwC,WAAlBnB,EAAM7F,GAAGgH,OAAyC,KAAnBnB,EAAM7F,GAAGqC,OAAmC,IAAnBwD,EAAM7F,GAAGqC,QAAe,CAC/G,GAAsB,WAAlBwD,EAAM7F,GAAGgH,MAAuC,SAAlBnB,EAAM7F,GAAGgH,KACvC,GAAInB,EAAM7F,GAAG6P,SAASpL,QAAQ,SAAW,EAAG,CACxC,GAAIpC,GAAQwD,EAAM7F,GAAGqC,MAAMqQ,UAC3B,QAAQ7M,EAAM7F,GAAG6P,UACb,IAAK,aACL,IAAK,gBACDxN,GAAgB,GAChB,MACJ,KAAK,WACL,IAAK,cACDA,EAAQ,IAAMA,CACd,MACJ,KAAK,WACL,IAAK,cACDA,EAAQ,IAAMA,EAAQ,IAG1By8B,EAEAE,EAAaG,GAAc98B,EAI3B08B,EAAQ54B,KAAK9D,OAIby8B,GAEAE,EAAaG,GAAc,GAI3BJ,EAAQ54B,KAAK,IAES,YAAtBN,EAAM7F,GAAG6P,SACThK,EAAM7F,GAAG6P,SAAW,QAGpBhK,EAAM7F,GAAG6P,SAAW,eAKvBhH,qBAAkBhD,EAAM7F,GAAGqC,SACxBy8B,EAEAE,EAAaG,GAAct5B,EAAM7F,GAAGqC,MAIpC08B,EAAQ54B,KAAKN,EAAM7F,GAAGqC,OAK9BwD,GAAM7F,GAAGqC,MADTy8B,EACiB,IAAMK,EAGN,KAOzC,OAASJ,QAASA,EAASC,aAAcA,IAE7CnD,EAAan8B,UAAU0/B,kBAAoB,SAAU74B,EAAO04B,GACxD,GAAII,GAAW,IACf,IAAIJ,EAAgB9+B,OAAS,EACzB,IAAK,GAAIH,GAAIi/B,EAAgB9+B,OAAS,EAAGH,GAAK,EAAGA,IAAK,CAClD,GAAIs/B,GAAYL,EAAgBj/B,EAChC,IAAIs/B,EAAU76B,QAAQ8B,IAAU,EAAG,CAE/B84B,EAAW94B,EAAQ,KADTkM,SAAS6sB,EAAU74B,MAAM,KAAK,GAAI,IAAM,GAElDw4B,EAAgB94B,KAAKk5B,EACrB,QAQZ,MAJKA,KACDA,EAAW94B,EAAQ,KACnB04B,EAAgB94B,KAAKk5B,IAElBA,GAEXxD,EAAan8B,UAAUsG,cAAgB,WACnC,MAAO,iBAEJ61B,WC7qBX0D,GAAmB17B,OAAO27B"}
|