@limetech/lime-elements 37.65.1 → 37.65.2
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 +9 -0
- package/dist/cjs/limel-form.cjs.entry.js +14 -12
- package/dist/cjs/limel-form.cjs.entry.js.map +1 -1
- package/dist/cjs/limel-table.cjs.entry.js +6 -3
- package/dist/cjs/limel-table.cjs.entry.js.map +1 -1
- package/dist/collection/components/form/templates/grid-layout.js +14 -12
- package/dist/collection/components/form/templates/grid-layout.js.map +1 -1
- package/dist/collection/components/table/table.js +6 -3
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/esm/limel-form.entry.js +14 -12
- package/dist/esm/limel-form.entry.js.map +1 -1
- package/dist/esm/limel-table.entry.js +6 -3
- package/dist/esm/limel-table.entry.js.map +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-1cd7fdef.entry.js → p-9cc9d83e.entry.js} +2 -2
- package/dist/lime-elements/p-9cc9d83e.entry.js.map +1 -0
- package/dist/lime-elements/{p-c864b34b.entry.js → p-da0be036.entry.js} +2 -2
- package/dist/lime-elements/p-da0be036.entry.js.map +1 -0
- package/package.json +5 -5
- package/dist/lime-elements/p-1cd7fdef.entry.js.map +0 -1
- package/dist/lime-elements/p-c864b34b.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_typeof","Symbol","iterator","obj","constructor","prototype","Array","findIndex","Object","defineProperty","value","predicate","this","TypeError","o","len","length","thisArg","arguments","k","kValue","call","find","undefined","String","includes","search","start","RegExp","indexOf","searchElement","fromIndex","n","Math","max","abs","sameValueZero","x","y","isNaN","assign","target","varArgs","to","index","nextSource","nextKey","hasOwnProperty","writable","configurable","ColumnManager","table","blockHozScrollEvent","headersElement","createHeadersElement","element","createHeaderElement","rowManager","columns","columnsByIndex","columnsByField","scrollLeft","insertBefore","firstChild","el","document","createElement","classList","add","options","headerVisible","initialize","setRowManager","manager","getElement","getHeadersElement","scrollHorizontal","left","hozAdjust","scrollWidth","clientWidth","style","marginLeft","modExists","modules","frozenColumns","generateColumnsFromRowData","data","cols","definitions","autoColumnsDefinitions","row","sorter","key","col","field","title","isArray","match","push","forEach","def","setColumns","self","removeChild","reset","i","_addColumn","_reIndexColumns","responsiveLayout","virtualDomHoz","vdomHoz","reinitialize","redraw","definition","before","nextToColumn","column","Column","colEl","findColumnIndex","parentIndex","getTopColumn","nextEl","splice","parentNode","nextSibling","unshift","appendChild","columnRendered","registerColumnField","registerColumnPosition","reRegisterPosition","_verticalAlignHeaders","minHeight","height","clearVerticalAlign","getHeight","verticalAlign","columnHeaderVertAlign","adjustTableSize","findColumn","subject","ColumnComponent","_getSelf","HTMLElement","getColumnByField","getColumnsByFieldRoot","root","_this","matches","keys","fieldRoot","split","getColumnByIndex","getFirstVisibileColumn","visible","getColumns","getRealColumns","traverse","callback","getDefinitions","active","output","getDefinition","getDefinitionTree","getComponents","structured","getComponent","getWidth","width","moveColumn","from","after","moveColumnActual","columnCalcs","recalc","activeRows","parent","isGroup","_moveColumnInArray","columnMoved","columnManager","persistence","config","save","updateRows","_this2","toIndex","rows","dataTree","concat","getTreeChildren","cells","cell","scrollToColumn","position","ifVisible","_this3","offset","adjust","Promise","resolve","reject","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","offsetWidth","min","console","warn","generateCells","generateCell","getFlexBaseWidth","totalWidth","fixedWidth","scrollHeight","clientHeight","minWidth","colWidth","columnMinWidth","parseInt","addColumn","_this4","layout","getMode","reinitializeWidth","deregisterColumn","getField","force","Tabulator","helpers","elVisible","resetScroll","update","footerManager","_column","type","getCells","getVisibility","isVisible","show","hide","toggle","delete","getSubColumns","getParentColumn","scrollTo","getTable","headerFilterFocus","filter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","move","toColumn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","setWidth","result","validate","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","tooltip","hozAlign","vertAlign","fieldStructure","getFieldValue","setFieldValue","titleFormatterRendered","setField","invalidOptionWarnings","checkDefinition","cellEvents","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","widthStyled","maxWidth","maxWidthStyled","minWidthStyled","widthFixed","component","_mapDepricatedFunctionality","newCol","attachColumn","checkColumnVisibility","rowHandle","movableRows","moveRow","setHandle","_buildHeader","bindModuleColumns","setAttribute","_this5","defaultOptionList","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","hideInHtml","htmlOutput","align","downloadTitle","titleDownload","setTooltip","headerTooltip","tooltipsHeader","localize","bind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","resizableColumns","resizeColumns","initializeColumn","headerFilter","headerFilterPlaceholder","setHeaderFilterColumnPlaceholder","movableColumns","topCalc","bottomCalc","addEventListener","e","dblTap","tapHold","tap","headerClick","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","setTimeout","headerTapHold","cellEdited","cellEditing","cellEditCancelled","_this6","sort","headerContextMenu","headerClickMenu","headerMenu","menu","initializeColumnHeader","format","editor","edit","validator","mutator","accessor","cssClass","classeNames","className","setMinWidth","columnMaxWidth","setMaxWidth","tooltips","cellHozAlign","cellVertAlign","textAlign","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","columnTitleChanged","text","_formatColumnHeaderTitle","_this7","formatter","contents","params","mockCell","onRendered","titleFormatter","getFormatter","getValue","titleFormatterParams","Node","innerHTML","_this8","dataObj","structure","_i","_i2","alignment","parentHeight","getGroupElement","offsetHeight","paddingTop","rowNumColumn","getFirstColumn","getLastColumn","updateBranches","colDefs","columnVisibilityChanged","silent","responsiveToggle","display","updateColumnVisibility","matchChildWidths","childWidth","child","setWidthActual","floor","checkCellHeights","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","_this9","currentCell","cancelEdit","cellCount","_i3","invalid","Cell","_nextVisibleColumn","_prevVisibleColumn","hideHeaderFilterElements","fitToData","showHeaderFilterElements","clearWidth","_this10","then","catch","err","deleteCell","RowManager","createHolderElement","tableElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsCount","displayRows","displayRowsCount","scrollTop","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","redrawBlock","redrawBlockRestoreConfig","redrawBlockRederInPosition","getTableElement","getRowPosition","setColumnManager","setRenderMode","groupBy","groupRows","scrollHeaders","top","dir","scrollVertical","ajaxProgressiveLoad","ajax","nextPage","findRow","Row","RowComponent","_match","getRowFromDataObject","getRowFromPosition","scrollToRow","_this11","rowIndex","getDisplayRows","rowEl","rowTop","scrollToRowPosition","scrollToRowIfVisible","elOffset","_virtualRenderFill","offsetTop","setData","renderInPosition","columnsChanged","_this12","pagination","_setDataActual","reRenderInPosition","autoColumns","dataLoading","_wipeElements","history","clear","selectRow","clearSelectionData","reactiveData","watchData","refreshActiveData","dataLoaded","error","wipe","deleteRow","blockRedraw","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","rowDeleted","dataChanged","getData","updateGroupRows","addRow","pos","addRowActual","action","addRows","_this13","findAddRowPos","reverse","item","addRowPos","dispRows","paginationAddRow","page","getPageSize","assignRowToGroup","getGroup","_moveRowInArray","rowAdded","posFrom","posTo","moveRowActual","rowMoved","_this14","Group","prevDisplayRow","toGroup","fromGroup","removeRow","insertRow","end","_i4","styleRow","clearData","getRowIndex","findRowIndex","getDisplayRowIndex","nextDisplayRow","rowOnly","nextRow","prevRow","list","transform","getRows","getDataCount","_genRemoteRequest","_this15","ajaxSorting","sorters","getSort","paginationDataSentNames","ajaxFiltering","filters","getFilters","setParams","sendRequest","filterRefresh","setPage","loadData","sorterRefresh","loadOrignalData","progressiveLoad","stage","skipStage","cascadeOrder","selectable","selectablePersistence","deselectRows","slice","resetDisplayRows","frozenRows","isFrozen","getDisplayIndex","setDisplayIndex","getNextDisplayIndex","setDisplayRows","setMaxRows","dataChange","renderTable","layoutColumnsOnNewData","_this16","getCell","_generateContents","getVisibleRows","viewable","topEdge","bottomEdge","topFound","topRow","bottomRow","selectedRows","getRenderMode","topOffset","diff","virtualDom","renderStarted","_simpleRender","renderEmptyScroll","placeholder","renderComplete","_clearVirtualDom","checkClassicModeGroupHeaderWidth","onlyGroupHeaders","paddingBottom","visibility","remove","forceMove","holder","topPad","rowsHeight","topPadHeight","heightOccupied","ceil","rowHeight","normalizeHeight","vDomScrollHeight","countGroups","topDiff","bottomDiff","margin","_addTopRow","_removeBottomRow","_removeTopRow","_addBottomRow","topRowHeight","initialized","_quickNormalizeRowHeight","bottomRowHeight","initialHeight","otherHeight","getBoundingClientRect","external","maxHeight","virtualDomBuffer","resizeTable","autoResize","restoreRedraw","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","VDomHoz","holderEl","leftCol","rightCol","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","window","compatabilityCheck","frozen","ok","rtl","_this17","scroll","deinitialize","change","collsWidth","colEnd","group","getGroups","fitDataLayoutOverride","_i5","_this18","old","colPos","leftPos","rightPos","paddingLeft","paddingRight","reinitChanged","renitializeRows","_this19","_this20","reinitializeRow","addColRight","removeColLeft","addColLeft","removeColRight","colPositionAdjust","_i6","oldWidth","widthDiff","cellRendered","prepend","initializeRow","_i7","_row","getIndex","getPosition","pageTo","setPageToRow","moveToRow","updateData","select","selectRows","deselect","toggleSelect","toggleRow","isSelected","isRowSelected","freeze","freezeRow","unfreeze","unfreezeRow","treeCollapse","collapseRow","treeExpand","expandRow","treeToggle","getTreeParent","addTreeChild","addTreeChildRow","reformat","getNextRow","getPrevRow","heightStyled","manualHeight","outerHeight","created","create","generateElement","detachElement","rowContextMenu","rowClickMenu","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","_this21","deleteCells","layoutRow","rowFormatter","resizableRows","resizeRows","reinitializeHeight","children","setHeight","clearHeight","transformRow","watchRow","updatedData","_this22","tempData","newRowData","JSON","parse","block","attrname","unblock","setValueProcessData","groupUpdateOnCellEdit","reassignRowToGroup","redrawNeeded","rowUpdated","getCellIndex","findCell","findNextEditableCell","nextCell","allowEdit","check","findPrevEditableCell","prevCell","toRow","_this23","deleteActual","detatchModules","rowDelete","recalcRowGroup","_deselectRow","detachRow","_i8","CellComponent","_cell","getOldValue","getInitialValue","initialValue","getRow","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","isEdited","edited","clearEdited","isValid","clearValidation","nav","checkHeight","oldValue","loaded","build","_configureCell","vertAligns","bottom","middle","hozAligns","right","center","alignItems","justifyContent","classNames","tooltipGenerationMode","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","initializeCell","preventDefault","selection","range","body","createTextRange","moveToElementText","getSelection","createRange","selectNode","removeAllRanges","addRange","val","formatValue","containerOnly","layoutElement","changed","newValue","transformCell","contextMenu","clickMenu","editCell","editing","getCurrentCell","valid","clearComponentHistory","calcs","next","prev","up","down","FooterManager","links","_initialize","footerElement","querySelector","append","activate","deactivate","link","footerRedraw","browserSlow","browserMobile","initializeElement","initializeOptions","_create","comms","register","defaultOptions","columnVertAlign","initialSort","initialFilter","initialHeaderFilter","columnHeaderSortMulti","sortOrderReverse","headerSort","headerSortTristate","headerSortElement","textDirection","keybindings","tabEndNewRow","clipboard","clipboardCopyStyled","clipboardCopyConfig","clipboardCopyFormatter","clipboardCopyRowRange","clipboardPasteParser","clipboardPasteAction","clipboardCopied","clipboardPasted","clipboardPasteError","downloadDataFormatter","downloadReady","blob","downloadComplete","downloadConfig","downloadRowRange","dataTreeFilter","dataTreeSort","dataTreeElementColumn","dataTreeBranchElement","dataTreeChildIndent","dataTreeChildField","dataTreeCollapseElement","dataTreeExpandElement","dataTreeStartExpanded","dataTreeRowExpanded","dataTreeRowCollapsed","dataTreeChildColumnCalcs","dataTreeSelectPropagate","printAsHtml","printFormatter","printHeader","printFooter","printCopyStyle","printStyled","printVisibleRows","printRowRange","printConfig","selectableRangeMode","selectableRollingSelection","selectableCheck","headerFilterLiveFilterDelay","locale","langs","persistentLayout","persistentSort","persistentFilter","persistenceID","persistenceMode","persistenceReaderFunc","persistenceWriterFunc","responsiveLayoutCollapseStartOpen","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","paginationSize","paginationInitialPage","paginationButtonCount","paginationSizeSelector","paginationElement","paginationDataSent","paginationDataReceived","ajaxURL","ajaxURLGenerator","ajaxParams","ajaxConfig","ajaxContentType","ajaxRequestFunc","ajaxLoader","ajaxLoaderLoading","ajaxLoaderError","ajaxProgressiveLoadDelay","ajaxProgressiveLoadScrollMargin","groupStartOpen","groupValues","groupHeader","groupHeaderPrint","groupHeaderClipboard","groupHeaderHtmlOutput","groupHeaderDownload","htmlOutputConfig","movableRowsConnectedTables","movableRowsConnectedElements","movableRowsSender","movableRowsReceiver","movableRowsSendingStart","movableRowsSent","movableRowsSentFailed","movableRowsSendingStop","movableRowsReceivingStart","movableRowsReceived","movableRowsReceivedFailed","movableRowsReceivingStop","movableRowsElementDrop","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","tableBuilding","tableBuilt","rowSelectionChanged","rowSelected","rowDeselected","rowResized","columnResized","htmlImporting","htmlImported","dataEdited","ajaxRequesting","ajaxResponse","ajaxError","dataFiltering","dataFiltered","dataSorting","dataSorted","groupToggleElement","groupClosedShowCalcs","dataGrouping","dataGrouped","groupVisibilityChanged","groupClick","groupDblClick","groupContext","groupContextMenu","groupClickMenu","groupTap","groupDblTap","groupTapHold","pageLoaded","localized","validationMode","validationFailed","historyUndo","historyRedo","rtlCheck","getComputedStyle","direction","clipboardCopyHeader","columnHeaders","_clearSelection","empty","_clearObjectPointers","bindModules","tagName","htmlTableImport","parseTable","_buildElement","_loadInitialData","_this24","mod","_detectBrowser","setHeaderFilterPlaceholder","installLang","setLocale","span","load","setSort","setFilter","print","destroy","deregister","unwatchData","clearBindings","ua","navigator","userAgent","vendor","opera","test","substr","setDataFromLocalFile","extensions","_this25","input","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveRequest","_setData","inPosition","setConfig","setUrl","getUrl","searchRows","searchData","getHtml","export","printFullscreen","getAjaxUrl","replaceData","_this26","responses","addData","_this27","updateOrAddData","_this28","newRows","_this29","count","successCount","foundRows","doneCheck","a","b","_this30","updateOrAddRow","_this31","updateRow","_this32","_this33","fromRow","copyToClipboard","selector","copy","getColumnDefinitions","getColumnLayout","parseColumns","setColumnLayout","mergeDefinition","showColumn","hideColumn","toggleColumn","_this34","deleteColumn","_this35","updateColumnDefinition","_this36","fromColumn","_this37","getLocale","getLang","sortList","getSorters","clearSort","refreshFilter","addFilter","all","getHeaderFilters","removeFilter","clearFilter","clearHeaderFilter","deselectRow","toggleSelectRow","getSelectedRows","getSelectedData","getInvalidCells","clearCellValidation","_this38","setMaxPage","_this39","setPageSize","size","previousPage","getPage","getPageMax","setGroupBy","groups","setGroupValues","setGroupStartOpen","values","setGroupHeader","getGroupedData","getEditedCells","clearCellEdited","_this40","getCalcResults","getResults","recalcAll","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","undo","redo","getHistoryUndoSize","getHistoryRedoSize","clearHistory","download","filename","downloadToTab","tableComms","module","receive","moduleBindings","extendModule","name","property","source","registerModule","plugin","required","box","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","deepClone","clone","Date","tables","lookupTable","query","results","querySelectorAll","matchElement","findTable","Layout","mode","modes","fitData","fitDataFill","fitDataTable","fitDataStretch","_this41","colsWidth","gap","lastCol","responsive","fitColumns","flexWidth","flexGrowUnits","flexColWidth","flexColumns","fixedShrinkColumns","flexShrinkUnits","overflowWidth","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Localize","lang","bindings","langList","default","headerFilters","_setLangProp","desiredLocale","traverseLang","trans","path","prop","language","toLowerCase","prefix","_executeBindings","getText","pathArray","_getLangElement","level","rootPath","_loop","binding","items","loading","page_size","page_title","first","first_title","last","last_title","prev_title","next_title","Comms","getConnections","selectors","connections","connection","con","send","commsReceived","Accessor","allowedTypes","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","colCompnent","Ajax","url","urlGenerator","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","requestOrder","template","trim","content","defaultLoaderPromise","defaultURLGenerator","initializeProgressive","getParams","_loadDefaultConfig","method","defaultConfig","_loadDataProgressive","_loadDataStandard","_this42","generateParamsList","serializeParams","encoded","encodeURIComponent","join","_this43","requestNo","showLoader","hideLoader","showError","shouldLoad","contentType","contentTypeFormatters","headers","Accept","location","origin","credentials","fetch","response","json","status","statusText","stringify","form","FormData","CalcComponent","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","rowsToData","generateRow","recalcGroup","getRowGroup","_this44","getChildGroups","rowData","generateRowData","generateTopRow","generateBottomRow","_this45","open","getFilteredTreeChildren","disable","enable","paramKey","hasTopCalcs","hasBottomCalcs","getKey","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","avg","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","toString","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","_this46","plain","html","generateExportList","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","paste","setPasteParser","setPasteAction","internal","sel","textRange","selectNodeContents","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","headerFindSuccess","columnMap","shift","replace","insert","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","dummyEl","firstCol","tabIndex","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","_this47","oldControl","replaceChild","_this48","getChildren","allChildren","_this49","generateChildren","subChildren","sub","_this50","childData","childRow","childIndex","findChildIndex","_this51","recurse","_this52","checkForRestyle","getChildField","Download","interceptCallback","downloadFunc","buildLink","mime","triggerDownload","downloaders","_group","getRowCount","newTab","Blob","URL","createObjectURL","msSaveOrOpenBlob","intercept","csv","setFileContents","delimiter","fileContents","depth","bom","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","orientation","unit","parseRow","styles","colSpan","rowSpan","doc","autoTable","addPageContent","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","SheetNames","Sheets","generateSheet","merges","worksheet","s","c","r","j","sheet_add_aoa","encode_range","sheetOnly","sheets","sheet","s2ab","buf","ArrayBuffer","view","Uint8Array","charCodeAt","write","bookType","bookSST","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editable","editorParams","editors","clearEditor","cancel","cellEl","variableHeight","contains","preventScroll","button","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","rendered","cellEditor","success","blur","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","editIndex","cellValue","padding","boxSizing","elementAttributes","getAttribute","onChange","textarea","vertNav","verticalNavigation","whiteSpace","resize","heightNow","selectionStart","stopImmediatePropagation","number","step","blurFunc","removeEventListener","_this53","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","fillList","listItemFormatter","toggleItem","chooseItem","setCurrentItem","scrollIntoView","behavior","inline","fillInput","unsetItem","hideList","chooseItems","unsetItems","_i9","cancelItem","showList","removeScrollListener","scrollTovalue","character","fromCharCode","startsWith","cursor","readOnly","autocomplete","_this54","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","emptyPlaceholder","current","freetext","allowEmpty","log","showInputValue","star","maxStars","getElementsByTagName","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","percent","handle","bar","mouseDrag","mouseDragWidth","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","indeterminate","checked","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTable","genereateTableElement","_this55","_this56","columnGroups","colData","processColumnGroup","_this57","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","_i10","_i11","_this58","rowGroups","exportCols","_this59","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","_this60","generator","_this61","cellWrapper","formatCells","formatExportValue","renderedCallback","props","lookup","color","fromStyle","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","filterType","tagType","attrType","filterChangeCheck","filterFunc","prevSuccess","emptyFunc","headerFilterFunc","headerFilterFuncParams","fieldVal","colVal","func","generateHeaderFilterElement","_this62","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","hasAttribute","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","filtersToArray","_this63","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","_","filterVal","rowVal","filterParams","regex","like","keywords","separator","keyword","matchAll","starts","ends","endsWith","in","_in","Format","lookupFormatter","formatterPrint","formatterClipboard","formatterHtmlOutput","crossElement","formatters","plaintext","sanitizeHTML","entityMap","emptyToSpace","formatterParams","money","floatVal","integer","decimal","rgx","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","datetime","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","timezone","tz","datetimediff","suffix","humanize","date","duration","starActive","starInactive","traffic","colors","percentValue","legendAlign","legend","legendColor","barEl","legendEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","_this64","checkbox","registerRowSelectCheckbox","registerHeaderSelectCheckbox","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","edge","frozenCheck","_this65","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","_this66","leftParents","parentEl","getColGroupParentElement","_this67","_i12","FrozenRows","styleRows","GroupComponent","getParentGroup","toggleVisibility","groupManager","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","initializeGroupHeader","_this68","allowedValues","_createGroup","toggleElement","initializeGroup","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","scrollHeader","removeGroup","getHeadersAndRows","noCalc","_visSet","compoment","getPath","addBindingsd","childNodes","GroupRows","langValue","lookupFunc","generateGroups","groupComponents","_this69","pullGroupListData","groupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","samePath","every","groupPath","groupId","History","undoers","redoers","cellEdit","rowAdd","newRow","_rebindRow","rowMove","oldRow","HtmlTableImport","fieldIndex","hasIndex","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","optionsList","attrib","_attribValue","_findCol","exists","textContent","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","mergedBindings","_key","mapBindings","bindEvents","_this70","_loop2","actions","mapBinding","symbolsList","ctrl","meta","symbols","code","checkBinding","ctrlKey","shiftKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","_this71","headerMenuEl","LoadMenuEvent","loadMenu","_this72","_this73","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","_i13","pop","_this74","docHeight","innerHeight","parentOffset","touches","pageX","pageY","menus","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","startXMove","prevColWidth","nextColWidthLast","prevColWidthLast","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","columnHolder","xPos","scrollPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","mouseup","tableRowDrop","previousSibling","startYMove","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","elementRowDrop","_this75","connectionTables","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","senders","receiver","receivers","fromTable","_delete","toTable","Mutator","enabled","lookupMutator","mutators","mutatorEdit","Page","initialLoad","pageSizes","dataReceivedNames","dataSentNames","pagesElement","firstBut","prevBut","nextBut","lastBut","pageSizeSelect","generatePageSizeSelectList","_this76","_i14","hidden","pageSelectLabel","testElRow","testElCell","paginationDataReceivedNames","trigger","_this77","_this78","_setPageButtons","leftSize","rightSize","_i15","_generatePageButton","_this79","_this80","_i16","_this81","_getRemotePage","_this82","oldParams","pageParams","_parseRemoteData","last_page","footer","current_page","Persistence","id","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","localStorage","removeItem","retreivedData","readers","writers","retreiveData","getOwnPropertyDescriptor","set","get","oldCols","newCols","_findColumn","validateSorters","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","local","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Print","manualBlock","replaceTable","cleanup","scrollX","scrollY","footerEl","tableEl","footerContent","ReactiveData","origFuncs","currentVersion","version","enumerable","args","arg","apply","startRow","oldRows","watchKey","watchTreeChildren","childField","rebuildTree","unwatchRow","ResizeColumns","startColumn","startWidth","prevHandle","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","resizable","mouseMove","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerHeight","containerWidth","_this83","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","formatCollapsedData","order","generateCollapsedContent","_iterator","_isArray","_i17","_ref","done","generateCollapsedRowContent","colCount","working","generateCollapsedRowData","mockCellComponent","titleData","valueData","node_content","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","_rowSelectionChanged","endSelect","selected","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","_this84","rowMatch","rowInfo","checkboxEl","childRowSelection","_i18","selectedRow","_iterator2","_isArray2","_i19","_ref2","_iterator3","_isArray3","_i20","_ref3","_child","Sort","arrowEl","sorterParams","startingDir","headerSortStartingDir","newSortList","findSorter","sortListActual","rowComponents","clearColumnHeaders","sortObj","setColumnHeader","_sortItems","_this85","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","emptyAlign","string","localeCompare","time","boolean","array","calc","d","alphanum","as","bs","a1","b1","L","rx","rd","isFinite","Validate","invalidCells","_extractValidator","substring","_buildValidator","parameters","validators","invalidIndex","float","numeric","minLength","maxLength","reg","unique","cellData","ca","esca","pe","m","escape","es","ColumnDefinitionFactory","pool","horizontalAlign","headerComponent","formatHeader","_a","createFormatter","aggregator","getColumnAggregator","customElement","propsFactory","setElementProperties","formatCell","columnElementExists","createCustomComponent","isNativeElement","customElementExists","customElements","createResizeObserver","properties","pickBy","negate","isEventListener","listeners","entries","getEventName","eventListener","RESIZE_TIMEOUT","COLUMN_PADDING","newWidth","createColumnSorter","isAggregatorFunction","ElementPool","isFree","usedElements","has","releaseAll","release","WeakMap","Selection","getDataByIndex","toggleRange","selectedItems","lowerBound","upperBound","updatedIndexes","updatedItems","lastToggledIndex","indexes","Set","toggleSelection","toggleSelectionFromLastIndex","LIMEL_CHECKBOX","getRowId","TableSelection","selectEvent","rowSelectorCellClick","ev","clickedRow","rowPosition","updateRowSelectors","emit","map","getRowData","changeSet","getRowByIndex","updateRowSelector","checkBox","getActiveRows","hasSelection","setSelection","newItems","oldItem","columnDefinitions","getRowSelectorColumnDefinition","getRowSelectorFormatter","mapLayout","layouts","stretchLastColumn","stretchColumns","lowDensity","tableCss","FIRST_PAGE","Table","hostRef","tabulator","getActiveRowsData","selectAllOnChange","selectAll","detail","newSelection","tableSelection","getColumnOptions","handleMoveColumn","components","changeColumns","handleDataSorting","handlePageLoaded","handleAjaxRequesting","requestData","onClickRow","formatRow","formatRows","updateMaxPage","initTabulatorComponent","addColumnAggregator","columnFactory","componentWillLoad","firstRequest","initTableSelection","componentDidLoad","init","disconnectedCallback","totalRowsChanged","pageSizeChanged","pageChanged","activeRowChanged","newData","oldData","shouldReplace","shouldReplaceData","updateColumns","newColumns","oldColumns","areSameColumns","columnsInTable","oldColumnsInTable","updateAggregates","newAggregates","oldAggregates","isEqual","haveSameAggregateFields","updateSelection","updateSelectable","updateSorting","newSorting","getColumnSorter","oldSorting","newIds","oldIds","areEqualIds","isSameOrder","newIdSet","oldIdSet","oldAggregateFields","host","shadowRoot","TabulatorTable","getOptions","requestAnimationFrame","calculatePageCount","ajaxOptions","getAjaxOptions","paginationOptions","getPaginationOptions","columnOptions","getInitialSorting","currentSorting","sorting","toLocaleLowerCase","aggregates","aggregate","_values","_data","isRemoteMode","remoteUrl","abortRequest","pageSize","__","currentPage","changePage","columnSorters","resolveExistingData","currentLoad","_ev","isActiveRow","activeRow","interactiveFeedbackElement","ownerDocument","activeRowId","total","totalRows","hasAggregation","some","render","h","Host","class","renderEmptyMessage","renderSelectAll","showSelectAll","_b","_c","showEmptyMessage","emptyMessage"],"sources":["./node_modules/tabulator-tables/dist/js/tabulator.es2015.js","./node_modules/html-escaper/esm/index.js","./src/components/table/columns.ts","./src/components/table/element-pool.ts","./src/components/table/selection.ts","./src/components/table/table-selection.ts","./src/components/table/layout.ts","./src/components/table/table.scss?tag=limel-table&encapsulation=shadow","./src/components/table/table.tsx"],"sourcesContent":["/* Tabulator v4.9.3 (c) Oliver Folkerd */\n\n'use strict';\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nif (!Array.prototype.findIndex) {\n\n\tObject.defineProperty(Array.prototype, 'findIndex', {\n\n\t\tvalue: function value(predicate) {\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t}\n\n\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\t\t\tvar thisArg = arguments[1];\n\n\t\t\t// 5. Let k be 0.\n\n\t\t\tvar k = 0;\n\n\t\t\t// 6. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\t\t\t\t// d. If testResult is true, return k.\n\n\t\t\t\tvar kValue = o[k];\n\n\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\treturn k;\n\t\t\t\t}\n\n\t\t\t\t// e. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 7. Return -1.\n\n\t\t\treturn -1;\n\t\t}\n\n\t});\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\n\nif (!Array.prototype.find) {\n\n\tObject.defineProperty(Array.prototype, 'find', {\n\n\t\tvalue: function value(predicate) {\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t}\n\n\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\t\t\tvar thisArg = arguments[1];\n\n\t\t\t// 5. Let k be 0.\n\n\t\t\tvar k = 0;\n\n\t\t\t// 6. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\t\t\t\t// d. If testResult is true, return kValue.\n\n\t\t\t\tvar kValue = o[k];\n\n\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\treturn kValue;\n\t\t\t\t}\n\n\t\t\t\t// e. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 7. Return undefined.\n\n\t\t\treturn undefined;\n\t\t}\n\n\t});\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill\n\nif (!String.prototype.includes) {\n\n\tString.prototype.includes = function (search, start) {\n\n\t\t'use strict';\n\n\t\tif (search instanceof RegExp) {\n\n\t\t\tthrow TypeError('first argument must not be a RegExp');\n\t\t}\n\n\t\tif (start === undefined) {\n\t\t\tstart = 0;\n\t\t}\n\n\t\treturn this.indexOf(search, start) !== -1;\n\t};\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n\nif (!Array.prototype.includes) {\n\n\tObject.defineProperty(Array.prototype, 'includes', {\n\n\t\tvalue: function value(searchElement, fromIndex) {\n\n\t\t\tif (this == null) {\n\n\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t}\n\n\t\t\t// 1. Let O be ? ToObject(this value).\n\n\t\t\tvar o = Object(this);\n\n\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\t\t\tvar len = o.length >>> 0;\n\n\t\t\t// 3. If len is 0, return false.\n\n\t\t\tif (len === 0) {\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// 4. Let n be ? ToInteger(fromIndex).\n\n\t\t\t// (If fromIndex is undefined, this step produces the value 0.)\n\n\t\t\tvar n = fromIndex | 0;\n\n\t\t\t// 5. If n ≥ 0, then\n\n\t\t\t// a. Let k be n.\n\n\t\t\t// 6. Else n < 0,\n\n\t\t\t// a. Let k be len + n.\n\n\t\t\t// b. If k < 0, let k be 0.\n\n\t\t\tvar k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n\t\t\tfunction sameValueZero(x, y) {\n\n\t\t\t\treturn x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y);\n\t\t\t}\n\n\t\t\t// 7. Repeat, while k < len\n\n\t\t\twhile (k < len) {\n\n\t\t\t\t// a. Let elementK be the result of ? Get(O, ! ToString(k)).\n\n\t\t\t\t// b. If SameValueZero(searchElement, elementK) is true, return true.\n\n\t\t\t\tif (sameValueZero(o[k], searchElement)) {\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// c. Increase k by 1.\n\n\t\t\t\tk++;\n\t\t\t}\n\n\t\t\t// 8. Return false\n\n\t\t\treturn false;\n\t\t}\n\n\t});\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill\n\nif (typeof Object.assign !== 'function') {\n\n\t// Must be writable: true, enumerable: false, configurable: true\n\n\tObject.defineProperty(Object, \"assign\", {\n\n\t\tvalue: function assign(target, varArgs) {\n\t\t\t// .length of function is 2\n\n\t\t\t'use strict';\n\n\t\t\tif (target === null || target === undefined) {\n\n\t\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\t\t\t}\n\n\t\t\tvar to = Object(target);\n\n\t\t\tfor (var index = 1; index < arguments.length; index++) {\n\n\t\t\t\tvar nextSource = arguments[index];\n\n\t\t\t\tif (nextSource !== null && nextSource !== undefined) {\n\n\t\t\t\t\tfor (var nextKey in nextSource) {\n\n\t\t\t\t\t\t// Avoid bugs when hasOwnProperty is shadowed\n\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n\n\t\t\t\t\t\t\tto[nextKey] = nextSource[nextKey];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn to;\n\t\t},\n\n\t\twritable: true,\n\n\t\tconfigurable: true\n\n\t});\n}\n\nvar ColumnManager = function ColumnManager(table) {\n\n\tthis.table = table; //hold parent table\n\n\tthis.blockHozScrollEvent = false;\n\n\tthis.headersElement = this.createHeadersElement();\n\n\tthis.element = this.createHeaderElement(); //containing element\n\n\tthis.rowManager = null; //hold row manager object\n\n\tthis.columns = []; // column definition object\n\n\tthis.columnsByIndex = []; //columns by index\n\n\tthis.columnsByField = {}; //columns by field\n\n\tthis.scrollLeft = 0;\n\n\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\n};\n\n////////////// Setup Functions /////////////////\n\n\nColumnManager.prototype.createHeadersElement = function () {\n\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-headers\");\n\n\treturn el;\n};\n\nColumnManager.prototype.createHeaderElement = function () {\n\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-header\");\n\n\tif (!this.table.options.headerVisible) {\n\n\t\tel.classList.add(\"tabulator-header-hidden\");\n\t}\n\n\treturn el;\n};\n\nColumnManager.prototype.initialize = function () {\n\n\tvar self = this;\n\n\t//scroll body along with header\n\n\t// self.element.addEventListener(\"scroll\", function(e){\n\n\t// \tif(!self.blockHozScrollEvent){\n\n\t// \t\tself.table.rowManager.scrollHorizontal(self.element.scrollLeft);\n\n\t// \t}\n\n\t// });\n};\n\n//link to row manager\n\nColumnManager.prototype.setRowManager = function (manager) {\n\n\tthis.rowManager = manager;\n};\n\n//return containing element\n\nColumnManager.prototype.getElement = function () {\n\n\treturn this.element;\n};\n\n//return header containing element\n\nColumnManager.prototype.getHeadersElement = function () {\n\n\treturn this.headersElement;\n};\n\n// ColumnManager.prototype.tempScrollBlock = function(){\n\n// \tclearTimeout(this.blockHozScrollEvent);\n\n// \tthis.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);\n\n// }\n\n\n//scroll horizontally to match table body\n\nColumnManager.prototype.scrollHorizontal = function (left) {\n\n\tvar hozAdjust = 0,\n\t scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\n\n\t// this.tempScrollBlock();\n\n\tthis.element.scrollLeft = left;\n\n\t//adjust for vertical scrollbar moving table when present\n\n\tif (left > scrollWidth) {\n\n\t\thozAdjust = left - scrollWidth;\n\n\t\tthis.element.style.marginLeft = -hozAdjust + \"px\";\n\t} else {\n\n\t\tthis.element.style.marginLeft = 0;\n\t}\n\n\t//keep frozen columns fixed in position\n\n\t//this._calcFrozenColumnsPos(hozAdjust + 3);\n\n\n\tthis.scrollLeft = left;\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\tthis.table.modules.frozenColumns.scrollHorizontal();\n\t}\n};\n\n///////////// Column Setup Functions /////////////\n\n\nColumnManager.prototype.generateColumnsFromRowData = function (data) {\n\n\tvar cols = [],\n\t definitions = this.table.options.autoColumnsDefinitions,\n\t row,\n\t sorter;\n\n\tif (data && data.length) {\n\n\t\trow = data[0];\n\n\t\tfor (var key in row) {\n\n\t\t\tvar col = {\n\n\t\t\t\tfield: key,\n\n\t\t\t\ttitle: key\n\n\t\t\t};\n\n\t\t\tvar value = row[key];\n\n\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\n\t\t\t\tcase \"undefined\":\n\n\t\t\t\t\tsorter = \"string\";\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\n\t\t\t\t\tsorter = \"boolean\";\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"object\":\n\n\t\t\t\t\tif (Array.isArray(value)) {\n\n\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\n\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\n\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcol.sorter = sorter;\n\n\t\t\tcols.push(col);\n\t\t}\n\n\t\tif (definitions) {\n\n\t\t\tswitch (typeof definitions === 'undefined' ? 'undefined' : _typeof(definitions)) {\n\n\t\t\t\tcase \"function\":\n\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"object\":\n\n\t\t\t\t\tif (Array.isArray(definitions)) {\n\n\t\t\t\t\t\tcols.forEach(function (col) {\n\n\t\t\t\t\t\t\tvar match = definitions.find(function (def) {\n\n\t\t\t\t\t\t\t\treturn def.field === col.field;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t\t\tObject.assign(col, match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcols.forEach(function (col) {\n\n\t\t\t\t\t\t\tif (definitions[col.field]) {\n\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.table.options.columns = cols;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.table.options.columns = cols;\n\t\t}\n\n\t\tthis.setColumns(this.table.options.columns);\n\t}\n};\n\nColumnManager.prototype.setColumns = function (cols, row) {\n\n\tvar self = this;\n\n\twhile (self.headersElement.firstChild) {\n\t\tself.headersElement.removeChild(self.headersElement.firstChild);\n\t}self.columns = [];\n\n\tself.columnsByIndex = [];\n\n\tself.columnsByField = {};\n\n\t//reset frozen columns\n\n\tif (self.table.modExists(\"frozenColumns\")) {\n\n\t\tself.table.modules.frozenColumns.reset();\n\t}\n\n\tcols.forEach(function (def, i) {\n\n\t\tself._addColumn(def);\n\t});\n\n\tself._reIndexColumns();\n\n\tif (self.table.options.responsiveLayout && self.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tself.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.options.virtualDomHoz) {\n\n\t\tthis.table.vdomHoz.reinitialize(false, true);\n\t}\n\n\tself.redraw(true);\n};\n\nColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {\n\n\tvar column = new Column(definition, this),\n\t colEl = column.getElement(),\n\t index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\n\tif (nextToColumn && index > -1) {\n\n\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\n\n\t\tvar nextEl = nextToColumn.getElement();\n\n\t\tif (before) {\n\n\t\t\tthis.columns.splice(parentIndex, 0, column);\n\n\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t} else {\n\n\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\n\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t}\n\t} else {\n\n\t\tif (before) {\n\n\t\t\tthis.columns.unshift(column);\n\n\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t} else {\n\n\t\t\tthis.columns.push(column);\n\n\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t}\n\n\t\tcolumn.columnRendered();\n\t}\n\n\treturn column;\n};\n\nColumnManager.prototype.registerColumnField = function (col) {\n\n\tif (col.definition.field) {\n\n\t\tthis.columnsByField[col.definition.field] = col;\n\t}\n};\n\nColumnManager.prototype.registerColumnPosition = function (col) {\n\n\tthis.columnsByIndex.push(col);\n};\n\nColumnManager.prototype._reIndexColumns = function () {\n\n\tthis.columnsByIndex = [];\n\n\tthis.columns.forEach(function (column) {\n\n\t\tcolumn.reRegisterPosition();\n\t});\n};\n\n//ensure column headers take up the correct amount of space in column groups\n\nColumnManager.prototype._verticalAlignHeaders = function () {\n\n\tvar self = this,\n\t minHeight = 0;\n\n\tself.columns.forEach(function (column) {\n\n\t\tvar height;\n\n\t\tcolumn.clearVerticalAlign();\n\n\t\theight = column.getHeight();\n\n\t\tif (height > minHeight) {\n\n\t\t\tminHeight = height;\n\t\t}\n\t});\n\n\tself.columns.forEach(function (column) {\n\n\t\tcolumn.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);\n\t});\n\n\tself.rowManager.adjustTableSize();\n};\n\n//////////////// Column Details /////////////////\n\n\nColumnManager.prototype.findColumn = function (subject) {\n\n\tvar self = this;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Column) {\n\n\t\t\t//subject is column element\n\n\t\t\treturn subject;\n\t\t} else if (subject instanceof ColumnComponent) {\n\n\t\t\t//subject is public column component\n\n\t\t\treturn subject._getSelf() || false;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\n\t\t\t//subject is a HTML element of the column header\n\n\t\t\tvar match = self.columns.find(function (column) {\n\n\t\t\t\treturn column.element === subject;\n\t\t\t});\n\n\t\t\treturn match || false;\n\t\t}\n\t} else {\n\n\t\t//subject should be treated as the field name of the column\n\n\t\treturn this.columnsByField[subject] || false;\n\t}\n\n\t//catch all for any other type of input\n\n\n\treturn false;\n};\n\nColumnManager.prototype.getColumnByField = function (field) {\n\n\treturn this.columnsByField[field];\n};\n\nColumnManager.prototype.getColumnsByFieldRoot = function (root) {\n\tvar _this = this;\n\n\tvar matches = [];\n\n\tObject.keys(this.columnsByField).forEach(function (field) {\n\n\t\tvar fieldRoot = field.split(\".\")[0];\n\n\t\tif (fieldRoot === root) {\n\n\t\t\tmatches.push(_this.columnsByField[field]);\n\t\t}\n\t});\n\n\treturn matches;\n};\n\nColumnManager.prototype.getColumnByIndex = function (index) {\n\n\treturn this.columnsByIndex[index];\n};\n\nColumnManager.prototype.getFirstVisibileColumn = function (index) {\n\n\tvar index = this.columnsByIndex.findIndex(function (col) {\n\n\t\treturn col.visible;\n\t});\n\n\treturn index > -1 ? this.columnsByIndex[index] : false;\n};\n\nColumnManager.prototype.getColumns = function () {\n\n\treturn this.columns;\n};\n\nColumnManager.prototype.findColumnIndex = function (column) {\n\n\treturn this.columnsByIndex.findIndex(function (col) {\n\n\t\treturn column === col;\n\t});\n};\n\n//return all columns that are not groups\n\nColumnManager.prototype.getRealColumns = function () {\n\n\treturn this.columnsByIndex;\n};\n\n//travers across columns and call action\n\nColumnManager.prototype.traverse = function (callback) {\n\n\tvar self = this;\n\n\tself.columnsByIndex.forEach(function (column, i) {\n\n\t\tcallback(column, i);\n\t});\n};\n\n//get defintions of actual columns\n\nColumnManager.prototype.getDefinitions = function (active) {\n\n\tvar self = this,\n\t output = [];\n\n\tself.columnsByIndex.forEach(function (column) {\n\n\t\tif (!active || active && column.visible) {\n\n\t\t\toutput.push(column.getDefinition());\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//get full nested definition tree\n\nColumnManager.prototype.getDefinitionTree = function () {\n\n\tvar self = this,\n\t output = [];\n\n\tself.columns.forEach(function (column) {\n\n\t\toutput.push(column.getDefinition(true));\n\t});\n\n\treturn output;\n};\n\nColumnManager.prototype.getComponents = function (structured) {\n\n\tvar self = this,\n\t output = [],\n\t columns = structured ? self.columns : self.columnsByIndex;\n\n\tcolumns.forEach(function (column) {\n\n\t\toutput.push(column.getComponent());\n\t});\n\n\treturn output;\n};\n\nColumnManager.prototype.getWidth = function () {\n\n\tvar width = 0;\n\n\tthis.columnsByIndex.forEach(function (column) {\n\n\t\tif (column.visible) {\n\n\t\t\twidth += column.getWidth();\n\t\t}\n\t});\n\n\treturn width;\n};\n\nColumnManager.prototype.moveColumn = function (from, to, after) {\n\n\tthis.moveColumnActual(from, to, after);\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t}\n\n\tto.element.parentNode.insertBefore(from.element, to.element);\n\n\tif (after) {\n\n\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t}\n\n\tthis._verticalAlignHeaders();\n\n\tthis.table.rowManager.reinitialize();\n};\n\nColumnManager.prototype.moveColumnActual = function (from, to, after) {\n\n\tif (from.parent.isGroup) {\n\n\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t} else {\n\n\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t}\n\n\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tif (this.table.options.virtualDomHoz) {\n\n\t\tthis.table.vdomHoz.reinitialize(true);\n\t}\n\n\tif (this.table.options.columnMoved) {\n\n\t\tthis.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());\n\t}\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\tthis.table.modules.persistence.save(\"columns\");\n\t}\n};\n\nColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {\n\tvar _this2 = this;\n\n\tvar fromIndex = columns.indexOf(from),\n\t toIndex,\n\t rows = [];\n\n\tif (fromIndex > -1) {\n\n\t\tcolumns.splice(fromIndex, 1);\n\n\t\ttoIndex = columns.indexOf(to);\n\n\t\tif (toIndex > -1) {\n\n\t\t\tif (after) {\n\n\t\t\t\ttoIndex = toIndex + 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\ttoIndex = fromIndex;\n\t\t}\n\n\t\tcolumns.splice(toIndex, 0, from);\n\n\t\tif (updateRows) {\n\n\t\t\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\n\t\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\n\t\t\t\t\trows = rows.concat(_this2.table.modules.dataTree.getTreeChildren(row, false, true));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\trows = rows.concat(this.table.rowManager.rows);\n\n\t\t\trows.forEach(function (row) {\n\n\t\t\t\tif (row.cells.length) {\n\n\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\n\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n};\n\nColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {\n\tvar _this3 = this;\n\n\tvar left = 0,\n\t offset = 0,\n\t adjust = 0,\n\t colEl = column.getElement();\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (typeof position === \"undefined\") {\n\n\t\t\tposition = _this3.table.options.scrollToColumnPosition;\n\t\t}\n\n\t\tif (typeof ifVisible === \"undefined\") {\n\n\t\t\tifVisible = _this3.table.options.scrollToColumnIfVisible;\n\t\t}\n\n\t\tif (column.visible) {\n\n\t\t\t//align to correct position\n\n\t\t\tswitch (position) {\n\n\t\t\t\tcase \"middle\":\n\n\t\t\t\tcase \"center\":\n\n\t\t\t\t\tadjust = -_this3.element.clientWidth / 2;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"right\":\n\n\t\t\t\t\tadjust = colEl.clientWidth - _this3.headersElement.clientWidth;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t//check column visibility\n\n\t\t\tif (!ifVisible) {\n\n\t\t\t\toffset = colEl.offsetLeft;\n\n\t\t\t\tif (offset > 0 && offset + colEl.offsetWidth < _this3.element.clientWidth) {\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate scroll position\n\n\t\t\tleft = colEl.offsetLeft + adjust;\n\n\t\t\tleft = Math.max(Math.min(left, _this3.table.rowManager.element.scrollWidth - _this3.table.rowManager.element.clientWidth), 0);\n\n\t\t\t_this3.table.rowManager.scrollHorizontal(left);\n\n\t\t\t_this3.scrollHorizontal(left);\n\n\t\t\tresolve();\n\t\t} else {\n\n\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\n\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t}\n\t});\n};\n\n//////////////// Cell Management /////////////////\n\n\nColumnManager.prototype.generateCells = function (row) {\n\n\tvar self = this;\n\n\tvar cells = [];\n\n\tself.columnsByIndex.forEach(function (column) {\n\n\t\tcells.push(column.generateCell(row));\n\t});\n\n\treturn cells;\n};\n\n//////////////// Column Management /////////////////\n\n\nColumnManager.prototype.getFlexBaseWidth = function () {\n\n\tvar self = this,\n\t totalWidth = self.table.element.clientWidth,\n\t //table element width\n\n\tfixedWidth = 0;\n\n\t//adjust for vertical scrollbar if present\n\n\tif (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {\n\n\t\ttotalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;\n\t}\n\n\tthis.columnsByIndex.forEach(function (column) {\n\n\t\tvar width, minWidth, colWidth;\n\n\t\tif (column.visible) {\n\n\t\t\twidth = column.definition.width || 0;\n\n\t\t\tminWidth = typeof column.minWidth == \"undefined\" ? self.table.options.columnMinWidth : parseInt(column.minWidth);\n\n\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tcolWidth = width;\n\t\t\t}\n\n\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t}\n\t});\n\n\treturn fixedWidth;\n};\n\nColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {\n\tvar _this4 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tvar column = _this4._addColumn(definition, before, nextToColumn);\n\n\t\t_this4._reIndexColumns();\n\n\t\tif (_this4.table.options.responsiveLayout && _this4.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t_this4.table.modules.responsiveLayout.initialize();\n\t\t}\n\n\t\tif (_this4.table.modExists(\"columnCalcs\")) {\n\n\t\t\t_this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows);\n\t\t}\n\n\t\t_this4.redraw(true);\n\n\t\tif (_this4.table.modules.layout.getMode() != \"fitColumns\") {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t}\n\n\t\t_this4._verticalAlignHeaders();\n\n\t\t_this4.table.rowManager.reinitialize();\n\n\t\tif (_this4.table.options.virtualDomHoz) {\n\n\t\t\t_this4.table.vdomHoz.reinitialize();\n\t\t}\n\n\t\tresolve(column);\n\t});\n};\n\n//remove column from system\n\nColumnManager.prototype.deregisterColumn = function (column) {\n\n\tvar field = column.getField(),\n\t index;\n\n\t//remove from field list\n\n\tif (field) {\n\n\t\tdelete this.columnsByField[field];\n\t}\n\n\t//remove from index list\n\n\tindex = this.columnsByIndex.indexOf(column);\n\n\tif (index > -1) {\n\n\t\tthis.columnsByIndex.splice(index, 1);\n\t}\n\n\t//remove from column list\n\n\tindex = this.columns.indexOf(column);\n\n\tif (index > -1) {\n\n\t\tthis.columns.splice(index, 1);\n\t}\n\n\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\tthis.table.modules.responsiveLayout.initialize();\n\t}\n\n\tthis._verticalAlignHeaders();\n\n\tthis.redraw();\n};\n\n//redraw columns\n\nColumnManager.prototype.redraw = function (force) {\n\n\tif (force) {\n\n\t\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\n\t\t\tthis._verticalAlignHeaders();\n\t\t}\n\n\t\tthis.table.rowManager.resetScroll();\n\n\t\tthis.table.rowManager.reinitialize();\n\t}\n\n\tif ([\"fitColumns\", \"fitDataStretch\"].indexOf(this.table.modules.layout.getMode()) > -1) {\n\n\t\tthis.table.modules.layout.layout();\n\t} else {\n\n\t\tif (force) {\n\n\t\t\tthis.table.modules.layout.layout();\n\t\t} else {\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t}\n\n\tif (force) {\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tthis.table.modules.columnCalcs.redraw();\n\t\t}\n\t}\n\n\tthis.table.footerManager.redraw();\n};\n\n//public column object\nvar ColumnComponent = function ColumnComponent(column) {\n\tthis._column = column;\n\tthis.type = \"ColumnComponent\";\n};\n\nColumnComponent.prototype.getElement = function () {\n\treturn this._column.getElement();\n};\n\nColumnComponent.prototype.getDefinition = function () {\n\treturn this._column.getDefinition();\n};\n\nColumnComponent.prototype.getField = function () {\n\treturn this._column.getField();\n};\n\nColumnComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._column.cells.forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nColumnComponent.prototype.getVisibility = function () {\n\tconsole.warn(\"getVisibility function is deprecated, you should now use the isVisible function\");\n\treturn this._column.visible;\n};\n\nColumnComponent.prototype.isVisible = function () {\n\treturn this._column.visible;\n};\n\nColumnComponent.prototype.show = function () {\n\tif (this._column.isGroup) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\tcolumn.show();\n\t\t});\n\t} else {\n\t\tthis._column.show();\n\t}\n};\n\nColumnComponent.prototype.hide = function () {\n\tif (this._column.isGroup) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\tcolumn.hide();\n\t\t});\n\t} else {\n\t\tthis._column.hide();\n\t}\n};\n\nColumnComponent.prototype.toggle = function () {\n\tif (this._column.visible) {\n\t\tthis.hide();\n\t} else {\n\t\tthis.show();\n\t}\n};\n\nColumnComponent.prototype.delete = function () {\n\treturn this._column.delete();\n};\n\nColumnComponent.prototype.getSubColumns = function () {\n\tvar output = [];\n\n\tif (this._column.columns.length) {\n\t\tthis._column.columns.forEach(function (column) {\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\t}\n\n\treturn output;\n};\n\nColumnComponent.prototype.getParentColumn = function () {\n\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n};\n\nColumnComponent.prototype._getSelf = function () {\n\treturn this._column;\n};\n\nColumnComponent.prototype.scrollTo = function () {\n\treturn this._column.table.columnManager.scrollToColumn(this._column);\n};\n\nColumnComponent.prototype.getTable = function () {\n\treturn this._column.table;\n};\n\nColumnComponent.prototype.headerFilterFocus = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.setHeaderFilterFocus(this._column);\n\t}\n};\n\nColumnComponent.prototype.reloadHeaderFilter = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.reloadHeaderFilter(this._column);\n\t}\n};\n\nColumnComponent.prototype.getHeaderFilterValue = function () {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\treturn this._column.table.modules.filter.getHeaderFilterValue(this._column);\n\t}\n};\n\nColumnComponent.prototype.setHeaderFilterValue = function (value) {\n\tif (this._column.table.modExists(\"filter\", true)) {\n\t\tthis._column.table.modules.filter.setHeaderFilterValue(this._column, value);\n\t}\n};\n\nColumnComponent.prototype.move = function (to, after) {\n\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\tif (toColumn) {\n\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t}\n};\n\nColumnComponent.prototype.getNextColumn = function () {\n\tvar nextCol = this._column.nextColumn();\n\n\treturn nextCol ? nextCol.getComponent() : false;\n};\n\nColumnComponent.prototype.getPrevColumn = function () {\n\tvar prevCol = this._column.prevColumn();\n\n\treturn prevCol ? prevCol.getComponent() : false;\n};\n\nColumnComponent.prototype.updateDefinition = function (updates) {\n\treturn this._column.updateDefinition(updates);\n};\n\nColumnComponent.prototype.getWidth = function () {\n\treturn this._column.getWidth();\n};\n\nColumnComponent.prototype.setWidth = function (width) {\n\tvar result;\n\n\tif (width === true) {\n\t\tresult = this._column.reinitializeWidth(true);\n\t} else {\n\t\tresult = this._column.setWidth(width);\n\t}\n\n\tif (this._column.table.options.virtualDomHoz) {\n\t\tthis._column.table.vdomHoz.reinitialize(true);\n\t}\n\n\treturn result;\n};\n\nColumnComponent.prototype.validate = function () {\n\treturn this._column.validate();\n};\n\nvar Column = function Column(def, parent) {\n\tvar self = this;\n\n\tthis.table = parent.table;\n\tthis.definition = def; //column definition\n\tthis.parent = parent; //hold parent object\n\tthis.type = \"column\"; //type of element\n\tthis.columns = []; //child columns\n\tthis.cells = []; //cells bound to this column\n\tthis.element = this.createElement(); //column header element\n\tthis.contentElement = false;\n\tthis.titleHolderElement = false;\n\tthis.titleElement = false;\n\tthis.groupElement = this.createGroupElement(); //column group holder element\n\tthis.isGroup = false;\n\tthis.tooltip = false; //hold column tooltip\n\tthis.hozAlign = \"\"; //horizontal text alignment\n\tthis.vertAlign = \"\"; //vert text alignment\n\n\t//multi dimensional filed handling\n\tthis.field = \"\";\n\tthis.fieldStructure = \"\";\n\tthis.getFieldValue = \"\";\n\tthis.setFieldValue = \"\";\n\n\tthis.titleFormatterRendered = false;\n\n\tthis.setField(this.definition.field);\n\n\tif (this.table.options.invalidOptionWarnings) {\n\t\tthis.checkDefinition();\n\t}\n\n\tthis.modules = {}; //hold module variables;\n\n\tthis.cellEvents = {\n\t\tcellClick: false,\n\t\tcellDblClick: false,\n\t\tcellContext: false,\n\t\tcellTap: false,\n\t\tcellDblTap: false,\n\t\tcellTapHold: false,\n\t\tcellMouseEnter: false,\n\t\tcellMouseLeave: false,\n\t\tcellMouseOver: false,\n\t\tcellMouseOut: false,\n\t\tcellMouseMove: false\n\t};\n\n\tthis.width = null; //column width\n\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\n\tthis.maxWidth = null; //column maximum width\n\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\n\tthis.minWidth = null; //column minimum width\n\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\n\tthis.widthFixed = false; //user has specified a width for this column\n\n\tthis.visible = true; //default visible state\n\n\tthis.component = null;\n\n\tthis._mapDepricatedFunctionality();\n\n\t//initialize column\n\tif (def.columns) {\n\n\t\tthis.isGroup = true;\n\n\t\tdef.columns.forEach(function (def, i) {\n\t\t\tvar newCol = new Column(def, self);\n\t\t\tself.attachColumn(newCol);\n\t\t});\n\n\t\tself.checkColumnVisibility();\n\t} else {\n\t\tparent.registerColumnField(this);\n\t}\n\n\tif (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")) {\n\t\tthis.table.modules.moveRow.setHandle(true);\n\t}\n\n\tthis._buildHeader();\n\n\tthis.bindModuleColumns();\n};\n\nColumn.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col\");\n\tel.setAttribute(\"role\", \"columnheader\");\n\tel.setAttribute(\"aria-sort\", \"none\");\n\n\treturn el;\n};\n\nColumn.prototype.createGroupElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col-group-cols\");\n\n\treturn el;\n};\n\nColumn.prototype.checkDefinition = function () {\n\tvar _this5 = this;\n\n\tObject.keys(this.definition).forEach(function (key) {\n\t\tif (_this5.defaultOptionList.indexOf(key) === -1) {\n\t\t\tconsole.warn(\"Invalid column definition option in '\" + (_this5.field || _this5.definition.title) + \"' column:\", key);\n\t\t}\n\t});\n};\n\nColumn.prototype.setField = function (field) {\n\tthis.field = field;\n\tthis.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];\n\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n};\n\n//register column position with column manager\nColumn.prototype.registerColumnPosition = function (column) {\n\tthis.parent.registerColumnPosition(column);\n};\n\n//register column position with column manager\nColumn.prototype.registerColumnField = function (column) {\n\tthis.parent.registerColumnField(column);\n};\n\n//trigger position registration\nColumn.prototype.reRegisterPosition = function () {\n\tif (this.isGroup) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t} else {\n\t\tthis.registerColumnPosition(this);\n\t}\n};\n\nColumn.prototype._mapDepricatedFunctionality = function () {\n\tif (typeof this.definition.hideInHtml !== \"undefined\") {\n\t\tthis.definition.htmlOutput = !this.definition.hideInHtml;\n\t\tconsole.warn(\"hideInHtml column definition property is deprecated, you should now use htmlOutput\");\n\t}\n\n\tif (typeof this.definition.align !== \"undefined\") {\n\t\tthis.definition.hozAlign = this.definition.align;\n\t\tconsole.warn(\"align column definition property is deprecated, you should now use hozAlign\");\n\t}\n\n\tif (typeof this.definition.downloadTitle !== \"undefined\") {\n\t\tthis.definition.titleDownload = this.definition.downloadTitle;\n\t\tconsole.warn(\"downloadTitle definition property is deprecated, you should now use titleDownload\");\n\t}\n};\n\nColumn.prototype.setTooltip = function () {\n\tvar self = this,\n\t def = self.definition;\n\n\t//set header tooltips\n\tvar tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;\n\n\tif (tooltip) {\n\t\tif (tooltip === true) {\n\t\t\tif (def.field) {\n\t\t\t\tself.table.modules.localize.bind(\"columns|\" + def.field, function (value) {\n\t\t\t\t\tself.element.setAttribute(\"title\", value || def.title);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.element.setAttribute(\"title\", def.title);\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof tooltip == \"function\") {\n\t\t\t\ttooltip = tooltip(self.getComponent());\n\n\t\t\t\tif (tooltip === false) {\n\t\t\t\t\ttooltip = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.element.setAttribute(\"title\", tooltip);\n\t\t}\n\t} else {\n\t\tself.element.setAttribute(\"title\", \"\");\n\t}\n};\n\n//build header element\nColumn.prototype._buildHeader = function () {\n\tvar self = this,\n\t def = self.definition;\n\n\twhile (self.element.firstChild) {\n\t\tself.element.removeChild(self.element.firstChild);\n\t}if (def.headerVertical) {\n\t\tself.element.classList.add(\"tabulator-col-vertical\");\n\n\t\tif (def.headerVertical === \"flip\") {\n\t\t\tself.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t}\n\t}\n\n\tself.contentElement = self._bindEvents();\n\n\tself.contentElement = self._buildColumnHeaderContent();\n\n\tself.element.appendChild(self.contentElement);\n\n\tif (self.isGroup) {\n\t\tself._buildGroupHeader();\n\t} else {\n\t\tself._buildColumnHeader();\n\t}\n\n\tself.setTooltip();\n\n\t//set resizable handles\n\tif (self.table.options.resizableColumns && self.table.modExists(\"resizeColumns\")) {\n\t\tself.table.modules.resizeColumns.initializeColumn(\"header\", self, self.element);\n\t}\n\n\t//set resizable handles\n\tif (def.headerFilter && self.table.modExists(\"filter\") && self.table.modExists(\"edit\")) {\n\t\tif (typeof def.headerFilterPlaceholder !== \"undefined\" && def.field) {\n\t\t\tself.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\n\t\t}\n\n\t\tself.table.modules.filter.initializeColumn(self);\n\t}\n\n\t//set resizable handles\n\tif (self.table.modExists(\"frozenColumns\")) {\n\t\tself.table.modules.frozenColumns.initializeColumn(self);\n\t}\n\n\t//set movable column\n\tif (self.table.options.movableColumns && !self.isGroup && self.table.modExists(\"moveColumn\")) {\n\t\tself.table.modules.moveColumn.initializeColumn(self);\n\t}\n\n\t//set calcs column\n\tif ((def.topCalc || def.bottomCalc) && self.table.modExists(\"columnCalcs\")) {\n\t\tself.table.modules.columnCalcs.initializeColumn(self);\n\t}\n\n\t//handle persistence\n\tif (self.table.modExists(\"persistence\") && self.table.modules.persistence.config.columns) {\n\t\tself.table.modules.persistence.initializeColumn(self);\n\t}\n\n\t//update header tooltip on mouse enter\n\tself.element.addEventListener(\"mouseenter\", function (e) {\n\t\tself.setTooltip();\n\t});\n};\n\nColumn.prototype._bindEvents = function () {\n\n\tvar self = this,\n\t def = self.definition,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\t//setup header click event bindings\n\tif (typeof def.headerClick == \"function\") {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tdef.headerClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (typeof def.headerDblClick == \"function\") {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tdef.headerDblClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (typeof def.headerContext == \"function\") {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tdef.headerContext(e, self.getComponent());\n\t\t});\n\t}\n\n\t//setup header tap event bindings\n\tif (typeof def.headerTap == \"function\") {\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tdef.headerTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (typeof def.headerDblTap == \"function\") {\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tdef.headerDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (typeof def.headerTapHold == \"function\") {\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tdef.headerTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n\n\t//store column cell click event bindings\n\tif (typeof def.cellClick == \"function\") {\n\t\tself.cellEvents.cellClick = def.cellClick;\n\t}\n\n\tif (typeof def.cellDblClick == \"function\") {\n\t\tself.cellEvents.cellDblClick = def.cellDblClick;\n\t}\n\n\tif (typeof def.cellContext == \"function\") {\n\t\tself.cellEvents.cellContext = def.cellContext;\n\t}\n\n\t//store column mouse event bindings\n\tif (typeof def.cellMouseEnter == \"function\") {\n\t\tself.cellEvents.cellMouseEnter = def.cellMouseEnter;\n\t}\n\n\tif (typeof def.cellMouseLeave == \"function\") {\n\t\tself.cellEvents.cellMouseLeave = def.cellMouseLeave;\n\t}\n\n\tif (typeof def.cellMouseOver == \"function\") {\n\t\tself.cellEvents.cellMouseOver = def.cellMouseOver;\n\t}\n\n\tif (typeof def.cellMouseOut == \"function\") {\n\t\tself.cellEvents.cellMouseOut = def.cellMouseOut;\n\t}\n\n\tif (typeof def.cellMouseMove == \"function\") {\n\t\tself.cellEvents.cellMouseMove = def.cellMouseMove;\n\t}\n\n\t//setup column cell tap event bindings\n\tif (typeof def.cellTap == \"function\") {\n\t\tself.cellEvents.cellTap = def.cellTap;\n\t}\n\n\tif (typeof def.cellDblTap == \"function\") {\n\t\tself.cellEvents.cellDblTap = def.cellDblTap;\n\t}\n\n\tif (typeof def.cellTapHold == \"function\") {\n\t\tself.cellEvents.cellTapHold = def.cellTapHold;\n\t}\n\n\t//setup column cell edit callbacks\n\tif (typeof def.cellEdited == \"function\") {\n\t\tself.cellEvents.cellEdited = def.cellEdited;\n\t}\n\n\tif (typeof def.cellEditing == \"function\") {\n\t\tself.cellEvents.cellEditing = def.cellEditing;\n\t}\n\n\tif (typeof def.cellEditCancelled == \"function\") {\n\t\tself.cellEvents.cellEditCancelled = def.cellEditCancelled;\n\t}\n};\n\n//build header element for header\nColumn.prototype._buildColumnHeader = function () {\n\tvar _this6 = this;\n\n\tvar def = this.definition,\n\t table = this.table,\n\t sortable;\n\n\t//set column sorter\n\tif (table.modExists(\"sort\")) {\n\t\ttable.modules.sort.initializeColumn(this, this.titleHolderElement);\n\t}\n\n\t//set column header context menu\n\tif ((def.headerContextMenu || def.headerClickMenu || def.headerMenu) && table.modExists(\"menu\")) {\n\t\ttable.modules.menu.initializeColumnHeader(this);\n\t}\n\n\t//set column formatter\n\tif (table.modExists(\"format\")) {\n\t\ttable.modules.format.initializeColumn(this);\n\t}\n\n\t//set column editor\n\tif (typeof def.editor != \"undefined\" && table.modExists(\"edit\")) {\n\t\ttable.modules.edit.initializeColumn(this);\n\t}\n\n\t//set colum validator\n\tif (typeof def.validator != \"undefined\" && table.modExists(\"validate\")) {\n\t\ttable.modules.validate.initializeColumn(this);\n\t}\n\n\t//set column mutator\n\tif (table.modExists(\"mutator\")) {\n\t\ttable.modules.mutator.initializeColumn(this);\n\t}\n\n\t//set column accessor\n\tif (table.modExists(\"accessor\")) {\n\t\ttable.modules.accessor.initializeColumn(this);\n\t}\n\n\t//set respoviveLayout\n\tif (_typeof(table.options.responsiveLayout) && table.modExists(\"responsiveLayout\")) {\n\t\ttable.modules.responsiveLayout.initializeColumn(this);\n\t}\n\n\t//set column visibility\n\tif (typeof def.visible != \"undefined\") {\n\t\tif (def.visible) {\n\t\t\tthis.show(true);\n\t\t} else {\n\t\t\tthis.hide(true);\n\t\t}\n\t}\n\n\t//asign additional css classes to column header\n\tif (def.cssClass) {\n\t\tvar classeNames = def.cssClass.split(\" \");\n\t\tclasseNames.forEach(function (className) {\n\t\t\t_this6.element.classList.add(className);\n\t\t});\n\t}\n\n\tif (def.field) {\n\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t}\n\n\t//set min width if present\n\tthis.setMinWidth(typeof def.minWidth == \"undefined\" ? this.table.options.columnMinWidth : parseInt(def.minWidth));\n\n\tif (def.maxWidth || this.table.options.columnMaxWidth) {\n\t\tif (def.maxWidth !== false) {\n\t\t\tthis.setMaxWidth(typeof def.maxWidth == \"undefined\" ? this.table.options.columnMaxWidth : parseInt(def.maxWidth));\n\t\t}\n\t}\n\n\tthis.reinitializeWidth();\n\n\t//set tooltip if present\n\tthis.tooltip = this.definition.tooltip || this.definition.tooltip === false ? this.definition.tooltip : this.table.options.tooltips;\n\n\t//set orizontal text alignment\n\tthis.hozAlign = typeof this.definition.hozAlign == \"undefined\" ? this.table.options.cellHozAlign : this.definition.hozAlign;\n\tthis.vertAlign = typeof this.definition.vertAlign == \"undefined\" ? this.table.options.cellVertAlign : this.definition.vertAlign;\n\n\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\n};\n\nColumn.prototype._buildColumnHeaderContent = function () {\n\tvar def = this.definition,\n\t table = this.table;\n\n\tvar contentElement = document.createElement(\"div\");\n\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\tthis.titleHolderElement = document.createElement(\"div\");\n\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\n\n\tcontentElement.appendChild(this.titleHolderElement);\n\n\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\tthis.titleHolderElement.appendChild(this.titleElement);\n\n\treturn contentElement;\n};\n\n//build title element of column\nColumn.prototype._buildColumnHeaderTitle = function () {\n\tvar self = this,\n\t def = self.definition,\n\t table = self.table,\n\t title;\n\n\tvar titleHolderElement = document.createElement(\"div\");\n\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\n\tif (def.editableTitle) {\n\t\tvar titleElement = document.createElement(\"input\");\n\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\ttitleElement.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\ttitleElement.focus();\n\t\t});\n\n\t\ttitleElement.addEventListener(\"change\", function () {\n\t\t\tdef.title = titleElement.value;\n\t\t\ttable.options.columnTitleChanged.call(self.table, self.getComponent());\n\t\t});\n\n\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\tif (def.field) {\n\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\t\t\t\ttitleElement.value = text || def.title || \" \";\n\t\t\t});\n\t\t} else {\n\t\t\ttitleElement.value = def.title || \" \";\n\t\t}\n\t} else {\n\t\tif (def.field) {\n\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\t\t\t\tself._formatColumnHeaderTitle(titleHolderElement, text || def.title || \" \");\n\t\t\t});\n\t\t} else {\n\t\t\tself._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t}\n\t}\n\n\treturn titleHolderElement;\n};\n\nColumn.prototype._formatColumnHeaderTitle = function (el, title) {\n\tvar _this7 = this;\n\n\tvar formatter, contents, params, mockCell, onRendered;\n\n\tif (this.definition.titleFormatter && this.table.modExists(\"format\")) {\n\n\t\tformatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);\n\n\t\tonRendered = function onRendered(callback) {\n\t\t\t_this7.titleFormatterRendered = callback;\n\t\t};\n\n\t\tmockCell = {\n\t\t\tgetValue: function getValue() {\n\t\t\t\treturn title;\n\t\t\t},\n\t\t\tgetElement: function getElement() {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t};\n\n\t\tparams = this.definition.titleFormatterParams || {};\n\n\t\tparams = typeof params === \"function\" ? params() : params;\n\n\t\tcontents = formatter.call(this.table.modules.format, mockCell, params, onRendered);\n\n\t\tswitch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {\n\t\t\tcase \"object\":\n\t\t\t\tif (contents instanceof Node) {\n\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t} else {\n\t\t\t\t\tel.innerHTML = \"\";\n\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"undefined\":\n\t\t\tcase \"null\":\n\t\t\t\tel.innerHTML = \"\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tel.innerHTML = contents;\n\t\t}\n\t} else {\n\t\tel.innerHTML = title;\n\t}\n};\n\n//build header element for column group\nColumn.prototype._buildGroupHeader = function () {\n\tvar _this8 = this;\n\n\tthis.element.classList.add(\"tabulator-col-group\");\n\tthis.element.setAttribute(\"role\", \"columngroup\");\n\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t//asign additional css classes to column header\n\tif (this.definition.cssClass) {\n\t\tvar classeNames = this.definition.cssClass.split(\" \");\n\t\tclasseNames.forEach(function (className) {\n\t\t\t_this8.element.classList.add(className);\n\t\t});\n\t}\n\n\t//set column header context menu\n\tif ((this.definition.headerContextMenu || this.definition.headerMenu) && this.table.modExists(\"menu\")) {\n\t\tthis.table.modules.menu.initializeColumnHeader(this);\n\t}\n\n\tthis.titleElement.style.textAlign = this.definition.headerHozAlign || this.table.options.headerHozAlign;\n\n\tthis.element.appendChild(this.groupElement);\n};\n\n//flat field lookup\nColumn.prototype._getFlatData = function (data) {\n\treturn data[this.field];\n};\n\n//nested field lookup\nColumn.prototype._getNestedData = function (data) {\n\tvar dataObj = data,\n\t structure = this.fieldStructure,\n\t length = structure.length,\n\t output;\n\n\tfor (var _i = 0; _i < length; _i++) {\n\n\t\tdataObj = dataObj[structure[_i]];\n\n\t\toutput = dataObj;\n\n\t\tif (!dataObj) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn output;\n};\n\n//flat field set\nColumn.prototype._setFlatData = function (data, value) {\n\tif (this.field) {\n\t\tdata[this.field] = value;\n\t}\n};\n\n//nested field set\nColumn.prototype._setNestedData = function (data, value) {\n\tvar dataObj = data,\n\t structure = this.fieldStructure,\n\t length = structure.length;\n\n\tfor (var _i2 = 0; _i2 < length; _i2++) {\n\n\t\tif (_i2 == length - 1) {\n\t\t\tdataObj[structure[_i2]] = value;\n\t\t} else {\n\t\t\tif (!dataObj[structure[_i2]]) {\n\t\t\t\tif (typeof value !== \"undefined\") {\n\t\t\t\t\tdataObj[structure[_i2]] = {};\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdataObj = dataObj[structure[_i2]];\n\t\t}\n\t}\n};\n\n//attach column to this group\nColumn.prototype.attachColumn = function (column) {\n\tvar self = this;\n\n\tif (self.groupElement) {\n\t\tself.columns.push(column);\n\t\tself.groupElement.appendChild(column.getElement());\n\t} else {\n\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t}\n};\n\n//vertically align header in column\nColumn.prototype.verticalAlign = function (alignment, height) {\n\n\t//calculate height of column header and group holder element\n\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;\n\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\tthis.element.style.height = parentHeight + \"px\";\n\n\tif (this.isGroup) {\n\t\tthis.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + \"px\";\n\t}\n\n\t//vertically align cell contents\n\tif (!this.isGroup && alignment !== \"top\") {\n\t\tif (alignment === \"bottom\") {\n\t\t\tthis.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + \"px\";\n\t\t} else {\n\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + \"px\";\n\t\t}\n\t}\n\n\tthis.columns.forEach(function (column) {\n\t\tcolumn.verticalAlign(alignment);\n\t});\n};\n\n//clear vertical alignmenet\nColumn.prototype.clearVerticalAlign = function () {\n\tthis.element.style.paddingTop = \"\";\n\tthis.element.style.height = \"\";\n\tthis.element.style.minHeight = \"\";\n\tthis.groupElement.style.minHeight = \"\";\n\n\tthis.columns.forEach(function (column) {\n\t\tcolumn.clearVerticalAlign();\n\t});\n};\n\nColumn.prototype.bindModuleColumns = function () {\n\t//check if rownum formatter is being used on a column\n\tif (this.definition.formatter == \"rownum\") {\n\t\tthis.table.rowManager.rowNumColumn = this;\n\t}\n};\n\n//// Retreive Column Information ////\n\n//return column header element\nColumn.prototype.getElement = function () {\n\treturn this.element;\n};\n\n//return colunm group element\nColumn.prototype.getGroupElement = function () {\n\treturn this.groupElement;\n};\n\n//return field name\nColumn.prototype.getField = function () {\n\treturn this.field;\n};\n\n//return the first column in a group\nColumn.prototype.getFirstColumn = function () {\n\tif (!this.isGroup) {\n\t\treturn this;\n\t} else {\n\t\tif (this.columns.length) {\n\t\t\treturn this.columns[0].getFirstColumn();\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n//return the last column in a group\nColumn.prototype.getLastColumn = function () {\n\tif (!this.isGroup) {\n\t\treturn this;\n\t} else {\n\t\tif (this.columns.length) {\n\t\t\treturn this.columns[this.columns.length - 1].getLastColumn();\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\n//return all columns in a group\nColumn.prototype.getColumns = function () {\n\treturn this.columns;\n};\n\n//return all columns in a group\nColumn.prototype.getCells = function () {\n\treturn this.cells;\n};\n\n//retreive the top column in a group of columns\nColumn.prototype.getTopColumn = function () {\n\tif (this.parent.isGroup) {\n\t\treturn this.parent.getTopColumn();\n\t} else {\n\t\treturn this;\n\t}\n};\n\n//return column definition object\nColumn.prototype.getDefinition = function (updateBranches) {\n\tvar colDefs = [];\n\n\tif (this.isGroup && updateBranches) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t});\n\n\t\tthis.definition.columns = colDefs;\n\t}\n\n\treturn this.definition;\n};\n\n//////////////////// Actions ////////////////////\n\nColumn.prototype.checkColumnVisibility = function () {\n\tvar visible = false;\n\n\tthis.columns.forEach(function (column) {\n\t\tif (column.visible) {\n\t\t\tvisible = true;\n\t\t}\n\t});\n\n\tif (visible) {\n\t\tthis.show();\n\t\tthis.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t} else {\n\t\tthis.hide();\n\t}\n};\n\n//show column\nColumn.prototype.show = function (silent, responsiveToggle) {\n\tif (!this.visible) {\n\t\tthis.visible = true;\n\n\t\tthis.element.style.display = \"\";\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.checkColumnVisibility();\n\t\t}\n\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.show();\n\t\t});\n\n\t\tif (!this.isGroup && this.width === null) {\n\t\t\tthis.reinitializeWidth();\n\t\t}\n\n\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);\n\t\t}\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tif (!this.silent && this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitialize();\n\t\t}\n\t}\n};\n\n//hide column\nColumn.prototype.hide = function (silent, responsiveToggle) {\n\tif (this.visible) {\n\t\tthis.visible = false;\n\n\t\tthis.element.style.display = \"none\";\n\n\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.checkColumnVisibility();\n\t\t}\n\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.hide();\n\t\t});\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t\t}\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\tif (!this.silent && this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitialize();\n\t\t}\n\t}\n};\n\nColumn.prototype.matchChildWidths = function () {\n\tvar childWidth = 0;\n\n\tif (this.contentElement && this.columns.length) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tif (column.visible) {\n\t\t\t\tchildWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tthis.contentElement.style.maxWidth = childWidth - 1 + \"px\";\n\n\t\tif (this.parent.isGroup) {\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\t}\n};\n\nColumn.prototype.removeChild = function (child) {\n\tvar index = this.columns.indexOf(child);\n\n\tif (index > -1) {\n\t\tthis.columns.splice(index, 1);\n\t}\n\n\tif (!this.columns.length) {\n\t\tthis.delete();\n\t}\n};\n\nColumn.prototype.setWidth = function (width) {\n\tthis.widthFixed = true;\n\tthis.setWidthActual(width);\n};\n\nColumn.prototype.setWidthActual = function (width) {\n\tif (isNaN(width)) {\n\t\twidth = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));\n\t}\n\n\twidth = Math.max(this.minWidth, width);\n\n\tif (this.maxWidth) {\n\t\twidth = Math.min(this.maxWidth, width);\n\t}\n\n\tthis.width = width;\n\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\tthis.element.style.width = this.widthStyled;\n\n\tif (!this.isGroup) {\n\t\tthis.cells.forEach(function (cell) {\n\t\t\tcell.setWidth();\n\t\t});\n\t}\n\n\tif (this.parent.isGroup) {\n\t\tthis.parent.matchChildWidths();\n\t}\n\n\t//set resizable handles\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n};\n\nColumn.prototype.checkCellHeights = function () {\n\tvar rows = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (cell.row.heightInitialized) {\n\t\t\tif (cell.row.getElement().offsetParent !== null) {\n\t\t\t\trows.push(cell.row);\n\t\t\t\tcell.row.clearCellHeight();\n\t\t\t} else {\n\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t}\n\t\t}\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.calcHeight();\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.setCellHeight();\n\t});\n};\n\nColumn.prototype.getWidth = function () {\n\tvar width = 0;\n\n\tif (this.isGroup) {\n\t\tthis.columns.forEach(function (column) {\n\t\t\tif (column.visible) {\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\t} else {\n\t\twidth = this.width;\n\t}\n\n\treturn width;\n};\n\nColumn.prototype.getHeight = function () {\n\treturn this.element.offsetHeight;\n};\n\nColumn.prototype.setMinWidth = function (minWidth) {\n\tthis.minWidth = minWidth;\n\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\tthis.element.style.minWidth = this.minWidthStyled;\n\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setMinWidth();\n\t});\n};\n\nColumn.prototype.setMaxWidth = function (maxWidth) {\n\tthis.maxWidth = maxWidth;\n\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\n\n\tthis.element.style.maxWidth = this.maxWidthStyled;\n\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setMaxWidth();\n\t});\n};\n\nColumn.prototype.delete = function () {\n\tvar _this9 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar index;\n\n\t\tif (_this9.isGroup) {\n\t\t\t_this9.columns.forEach(function (column) {\n\t\t\t\tcolumn.delete();\n\t\t\t});\n\t\t}\n\n\t\t//cancel edit if column is currently being edited\n\t\tif (_this9.table.modExists(\"edit\")) {\n\t\t\tif (_this9.table.modules.edit.currentCell.column === _this9) {\n\t\t\t\t_this9.table.modules.edit.cancelEdit();\n\t\t\t}\n\t\t}\n\n\t\tvar cellCount = _this9.cells.length;\n\n\t\tfor (var _i3 = 0; _i3 < cellCount; _i3++) {\n\t\t\t_this9.cells[0].delete();\n\t\t}\n\n\t\tif (_this9.element.parentNode) {\n\t\t\t_this9.element.parentNode.removeChild(_this9.element);\n\t\t}\n\n\t\t_this9.element = false;\n\t\t_this9.contentElement = false;\n\t\t_this9.titleElement = false;\n\t\t_this9.groupElement = false;\n\n\t\tif (_this9.parent.isGroup) {\n\t\t\t_this9.parent.removeChild(_this9);\n\t\t}\n\n\t\t_this9.table.columnManager.deregisterColumn(_this9);\n\n\t\tif (_this9.table.options.virtualDomHoz) {\n\t\t\t_this9.table.vdomHoz.reinitialize(true);\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nColumn.prototype.columnRendered = function () {\n\tif (this.titleFormatterRendered) {\n\t\tthis.titleFormatterRendered();\n\t}\n};\n\nColumn.prototype.validate = function () {\n\tvar invalid = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (!cell.validate()) {\n\t\t\tinvalid.push(cell.getComponent());\n\t\t}\n\t});\n\n\treturn invalid.length ? invalid : true;\n};\n\n//////////////// Cell Management /////////////////\n\n//generate cell for this column\nColumn.prototype.generateCell = function (row) {\n\tvar self = this;\n\n\tvar cell = new Cell(self, row);\n\n\tthis.cells.push(cell);\n\n\treturn cell;\n};\n\nColumn.prototype.nextColumn = function () {\n\tvar index = this.table.columnManager.findColumnIndex(this);\n\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n};\n\nColumn.prototype._nextVisibleColumn = function (index) {\n\tvar column = this.table.columnManager.getColumnByIndex(index);\n\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n};\n\nColumn.prototype.prevColumn = function () {\n\tvar index = this.table.columnManager.findColumnIndex(this);\n\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n};\n\nColumn.prototype._prevVisibleColumn = function (index) {\n\tvar column = this.table.columnManager.getColumnByIndex(index);\n\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n};\n\nColumn.prototype.reinitializeWidth = function (force) {\n\tthis.widthFixed = false;\n\n\t//set width if present\n\tif (typeof this.definition.width !== \"undefined\" && !force) {\n\t\tthis.setWidth(this.definition.width);\n\t}\n\n\t//hide header filters to prevent them altering column width\n\tif (this.table.modExists(\"filter\")) {\n\t\tthis.table.modules.filter.hideHeaderFilterElements();\n\t}\n\n\tthis.fitToData();\n\n\t//show header filters again after layout is complete\n\tif (this.table.modExists(\"filter\")) {\n\t\tthis.table.modules.filter.showHeaderFilterElements();\n\t}\n};\n\n//set column width to maximum cell width\nColumn.prototype.fitToData = function () {\n\tvar self = this;\n\n\tif (!this.widthFixed) {\n\t\tthis.element.style.width = \"\";\n\n\t\tself.cells.forEach(function (cell) {\n\t\t\tcell.clearWidth();\n\t\t});\n\t}\n\n\tvar maxWidth = this.element.offsetWidth;\n\n\tif (!self.width || !this.widthFixed) {\n\t\tself.cells.forEach(function (cell) {\n\t\t\tvar width = cell.getWidth();\n\n\t\t\tif (width > maxWidth) {\n\t\t\t\tmaxWidth = width;\n\t\t\t}\n\t\t});\n\n\t\tif (maxWidth) {\n\t\t\tself.setWidthActual(maxWidth + 1);\n\t\t}\n\t}\n};\n\nColumn.prototype.updateDefinition = function (updates) {\n\tvar _this10 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar definition;\n\n\t\tif (!_this10.isGroup) {\n\t\t\tif (!_this10.parent.isGroup) {\n\t\t\t\tdefinition = Object.assign({}, _this10.getDefinition());\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\t_this10.table.columnManager.addColumn(definition, false, _this10).then(function (column) {\n\n\t\t\t\t\tif (definition.field == _this10.field) {\n\t\t\t\t\t\t_this10.field = false; //cleair field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t}\n\n\t\t\t\t\t_this10.delete().then(function () {\n\t\t\t\t\t\tresolve(column.getComponent());\n\t\t\t\t\t}).catch(function (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}).catch(function (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\n\t\t\treject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\n\t\t}\n\t});\n};\n\nColumn.prototype.deleteCell = function (cell) {\n\tvar index = this.cells.indexOf(cell);\n\n\tif (index > -1) {\n\t\tthis.cells.splice(index, 1);\n\t}\n};\n\nColumn.prototype.defaultOptionList = [\"title\", \"field\", \"columns\", \"visible\", \"align\", \"hozAlign\", \"vertAlign\", \"width\", \"minWidth\", \"maxWidth\", \"widthGrow\", \"widthShrink\", \"resizable\", \"frozen\", \"responsive\", \"tooltip\", \"cssClass\", \"rowHandle\", \"hideInHtml\", \"print\", \"htmlOutput\", \"sorter\", \"sorterParams\", \"formatter\", \"formatterParams\", \"variableHeight\", \"editable\", \"editor\", \"editorParams\", \"validator\", \"mutator\", \"mutatorParams\", \"mutatorData\", \"mutatorDataParams\", \"mutatorEdit\", \"mutatorEditParams\", \"mutatorClipboard\", \"mutatorClipboardParams\", \"accessor\", \"accessorParams\", \"accessorData\", \"accessorDataParams\", \"accessorDownload\", \"accessorDownloadParams\", \"accessorClipboard\", \"accessorClipboardParams\", \"accessorPrint\", \"accessorPrintParams\", \"accessorHtmlOutput\", \"accessorHtmlOutputParams\", \"clipboard\", \"download\", \"downloadTitle\", \"topCalc\", \"topCalcParams\", \"topCalcFormatter\", \"topCalcFormatterParams\", \"bottomCalc\", \"bottomCalcParams\", \"bottomCalcFormatter\", \"bottomCalcFormatterParams\", \"cellClick\", \"cellDblClick\", \"cellContext\", \"cellTap\", \"cellDblTap\", \"cellTapHold\", \"cellMouseEnter\", \"cellMouseLeave\", \"cellMouseOver\", \"cellMouseOut\", \"cellMouseMove\", \"cellEditing\", \"cellEdited\", \"cellEditCancelled\", \"headerSort\", \"headerSortStartingDir\", \"headerSortTristate\", \"headerClick\", \"headerDblClick\", \"headerContext\", \"headerTap\", \"headerDblTap\", \"headerTapHold\", \"headerTooltip\", \"headerVertical\", \"headerHozAlign\", \"editableTitle\", \"titleFormatter\", \"titleFormatterParams\", \"headerFilter\", \"headerFilterPlaceholder\", \"headerFilterParams\", \"headerFilterEmptyCheck\", \"headerFilterFunc\", \"headerFilterFuncParams\", \"headerFilterLiveFilter\", \"print\", \"headerContextMenu\", \"headerMenu\", \"contextMenu\",\n// \"headerClickMenu\",\n\"clickMenu\", \"formatterPrint\", \"formatterPrintParams\", \"formatterClipboard\", \"formatterClipboardParams\", \"formatterHtmlOutput\", \"formatterHtmlOutputParams\", \"titlePrint\", \"titleClipboard\", \"titleHtmlOutput\", \"titleDownload\"];\n\n//////////////// Event Bindings /////////////////\n\n//////////////// Object Generation /////////////////\nColumn.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new ColumnComponent(this);\n\t}\n\n\treturn this.component;\n};\n\nvar RowManager = function RowManager(table) {\n\n\tthis.table = table;\n\tthis.element = this.createHolderElement(); //containing element\n\tthis.tableElement = this.createTableElement(); //table element\n\tthis.heightFixer = this.createTableElement(); //table element\n\tthis.columnManager = null; //hold column manager object\n\tthis.height = 0; //hold height of table element\n\n\tthis.firstRender = false; //handle first render\n\tthis.renderMode = \"virtual\"; //current rendering mode\n\tthis.fixedHeight = false; //current rendering mode\n\n\tthis.rows = []; //hold row data objects\n\tthis.activeRows = []; //rows currently available to on display in the table\n\tthis.activeRowsCount = 0; //count of active rows\n\n\tthis.displayRows = []; //rows currently on display in the table\n\tthis.displayRowsCount = 0; //count of display rows\n\n\tthis.scrollTop = 0;\n\tthis.scrollLeft = 0;\n\n\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\n\n\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\n\tthis.rowNumColumn = false; //hold column component for row number column\n\n\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\n\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\n};\n\n//////////////// Setup Functions /////////////////\n\nRowManager.prototype.createHolderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-tableHolder\");\n\tel.setAttribute(\"tabindex\", 0);\n\n\treturn el;\n};\n\nRowManager.prototype.createTableElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-table\");\n\n\treturn el;\n};\n\n//return containing element\nRowManager.prototype.getElement = function () {\n\treturn this.element;\n};\n\n//return table element\nRowManager.prototype.getTableElement = function () {\n\treturn this.tableElement;\n};\n\n//return position of row in table\nRowManager.prototype.getRowPosition = function (row, active) {\n\tif (active) {\n\t\treturn this.activeRows.indexOf(row);\n\t} else {\n\t\treturn this.rows.indexOf(row);\n\t}\n};\n\n//link to column manager\nRowManager.prototype.setColumnManager = function (manager) {\n\tthis.columnManager = manager;\n};\n\nRowManager.prototype.initialize = function () {\n\tvar self = this;\n\n\tself.setRenderMode();\n\n\t//initialize manager\n\tself.element.appendChild(self.tableElement);\n\n\tself.firstRender = true;\n\n\t//scroll header along with table body\n\tself.element.addEventListener(\"scroll\", function () {\n\t\tvar left = self.element.scrollLeft;\n\n\t\t//handle horizontal scrolling\n\t\tif (self.scrollLeft != left) {\n\t\t\tself.columnManager.scrollHorizontal(left);\n\n\t\t\tif (self.table.options.groupBy) {\n\t\t\t\tself.table.modules.groupRows.scrollHeaders(left);\n\t\t\t}\n\n\t\t\tif (self.table.modExists(\"columnCalcs\")) {\n\t\t\t\tself.table.modules.columnCalcs.scrollHorizontal(left);\n\t\t\t}\n\n\t\t\tself.table.options.scrollHorizontal(left);\n\t\t}\n\n\t\tself.scrollLeft = left;\n\t});\n\n\t//handle virtual dom scrolling\n\tif (this.renderMode === \"virtual\") {\n\n\t\tself.element.addEventListener(\"scroll\", function () {\n\t\t\tvar top = self.element.scrollTop;\n\t\t\tvar dir = self.scrollTop > top;\n\n\t\t\t//handle verical scrolling\n\t\t\tif (self.scrollTop != top) {\n\t\t\t\tself.scrollTop = top;\n\t\t\t\tself.scrollVertical(dir);\n\n\t\t\t\tif (self.table.options.ajaxProgressiveLoad == \"scroll\") {\n\t\t\t\t\tself.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);\n\t\t\t\t}\n\n\t\t\t\tself.table.options.scrollVertical(top);\n\t\t\t} else {\n\t\t\t\tself.scrollTop = top;\n\t\t\t}\n\t\t});\n\t}\n};\n\n////////////////// Row Manipulation //////////////////\n\nRowManager.prototype.findRow = function (subject) {\n\tvar self = this;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Row) {\n\t\t\t//subject is row element\n\t\t\treturn subject;\n\t\t} else if (subject instanceof RowComponent) {\n\t\t\t//subject is public row component\n\t\t\treturn subject._getSelf() || false;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\t\t\t//subject is a HTML element of the row\n\t\t\tvar match = self.rows.find(function (row) {\n\t\t\t\treturn row.getElement() === subject;\n\t\t\t});\n\n\t\t\treturn match || false;\n\t\t}\n\t} else if (typeof subject == \"undefined\" || subject === null) {\n\t\treturn false;\n\t} else {\n\t\t//subject should be treated as the index of the row\n\t\tvar _match = self.rows.find(function (row) {\n\t\t\treturn row.data[self.table.options.index] == subject;\n\t\t});\n\n\t\treturn _match || false;\n\t}\n\n\t//catch all for any other type of input\n\n\treturn false;\n};\n\nRowManager.prototype.getRowFromDataObject = function (data) {\n\tvar match = this.rows.find(function (row) {\n\t\treturn row.data === data;\n\t});\n\n\treturn match || false;\n};\n\nRowManager.prototype.getRowFromPosition = function (position, active) {\n\tif (active) {\n\t\treturn this.activeRows[position];\n\t} else {\n\t\treturn this.rows[position];\n\t}\n};\n\nRowManager.prototype.scrollToRow = function (row, position, ifVisible) {\n\tvar _this11 = this;\n\n\tvar rowIndex = this.getDisplayRows().indexOf(row),\n\t rowEl = row.getElement(),\n\t rowTop,\n\t offset = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (rowIndex > -1) {\n\n\t\t\tif (typeof position === \"undefined\") {\n\t\t\t\tposition = _this11.table.options.scrollToRowPosition;\n\t\t\t}\n\n\t\t\tif (typeof ifVisible === \"undefined\") {\n\t\t\t\tifVisible = _this11.table.options.scrollToRowIfVisible;\n\t\t\t}\n\n\t\t\tif (position === \"nearest\") {\n\t\t\t\tswitch (_this11.renderMode) {\n\t\t\t\t\tcase \"classic\":\n\t\t\t\t\t\trowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;\n\t\t\t\t\t\tposition = Math.abs(_this11.element.scrollTop - rowTop) > Math.abs(_this11.element.scrollTop + _this11.element.clientHeight - rowTop) ? \"bottom\" : \"top\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"virtual\":\n\t\t\t\t\t\tposition = Math.abs(_this11.vDomTop - rowIndex) > Math.abs(_this11.vDomBottom - rowIndex) ? \"bottom\" : \"top\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//check row visibility\n\t\t\tif (!ifVisible) {\n\t\t\t\tif (Tabulator.prototype.helpers.elVisible(rowEl)) {\n\t\t\t\t\toffset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top;\n\n\t\t\t\t\tif (offset > 0 && offset < _this11.element.clientHeight - rowEl.offsetHeight) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//scroll to row\n\t\t\tswitch (_this11.renderMode) {\n\t\t\t\tcase \"classic\":\n\t\t\t\t\t_this11.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this11.element).top + _this11.element.scrollTop;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"virtual\":\n\t\t\t\t\t_this11._virtualRenderFill(rowIndex, true);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t//align to correct position\n\t\t\tswitch (position) {\n\t\t\t\tcase \"middle\":\n\t\t\t\tcase \"center\":\n\n\t\t\t\t\tif (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop + (rowEl.offsetTop - _this11.element.scrollTop) - (_this11.element.scrollHeight - rowEl.offsetTop) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight / 2;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\tif (_this11.element.scrollHeight - _this11.element.scrollTop == _this11.element.clientHeight) {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - (_this11.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this11.element.scrollTop = _this11.element.scrollTop - _this11.element.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tresolve();\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t}\n\t});\n};\n\n////////////////// Data Handling //////////////////\n\nRowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {\n\tvar _this12 = this;\n\n\tvar self = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (renderInPosition && _this12.getDisplayRows().length) {\n\t\t\tif (self.table.options.pagination) {\n\t\t\t\tself._setDataActual(data, true);\n\t\t\t} else {\n\t\t\t\t_this12.reRenderInPosition(function () {\n\t\t\t\t\tself._setDataActual(data);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif (_this12.table.options.autoColumns && columnsChanged) {\n\t\t\t\t_this12.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t}\n\t\t\t_this12.resetScroll();\n\n\t\t\t_this12._setDataActual(data);\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nRowManager.prototype._setDataActual = function (data, renderInPosition) {\n\tvar self = this;\n\n\tself.table.options.dataLoading.call(this.table, data);\n\n\tthis._wipeElements();\n\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.clear();\n\t}\n\n\tif (Array.isArray(data)) {\n\n\t\tif (this.table.modExists(\"selectRow\")) {\n\t\t\tthis.table.modules.selectRow.clearSelectionData();\n\t\t}\n\n\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\t\t\tthis.table.modules.reactiveData.watchData(data);\n\t\t}\n\n\t\tdata.forEach(function (def, i) {\n\t\t\tif (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === \"object\") {\n\t\t\t\tvar row = new Row(def, self);\n\t\t\t\tself.rows.push(row);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t}\n\t\t});\n\n\t\tself.refreshActiveData(false, false, renderInPosition);\n\n\t\tself.table.options.dataLoaded.call(this.table, data);\n\t} else {\n\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data === 'undefined' ? 'undefined' : _typeof(data), \"\\nData: \", data);\n\t}\n};\n\nRowManager.prototype._wipeElements = function () {\n\tthis.rows.forEach(function (row) {\n\t\trow.wipe();\n\t});\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.wipe();\n\t}\n\n\tthis.rows = [];\n\tthis.activeRows = [];\n\tthis.activeRowsCount = 0;\n\tthis.displayRows = [];\n\tthis.displayRowsCount = 0;\n\n\tthis.adjustTableSize();\n};\n\nRowManager.prototype.deleteRow = function (row, blockRedraw) {\n\tvar allIndex = this.rows.indexOf(row),\n\t activeIndex = this.activeRows.indexOf(row);\n\n\tif (activeIndex > -1) {\n\t\tthis.activeRows.splice(activeIndex, 1);\n\t}\n\n\tif (allIndex > -1) {\n\t\tthis.rows.splice(allIndex, 1);\n\t}\n\n\tthis.setActiveRows(this.activeRows);\n\n\tthis.displayRowIterator(function (rows) {\n\t\tvar displayIndex = rows.indexOf(row);\n\n\t\tif (displayIndex > -1) {\n\t\t\trows.splice(displayIndex, 1);\n\t\t}\n\t});\n\n\tif (!blockRedraw) {\n\t\tthis.reRenderInPosition();\n\t}\n\n\tthis.regenerateRowNumbers();\n\n\tthis.table.options.rowDeleted.call(this.table, row.getComponent());\n\n\tif (this.table.options.dataChanged) {\n\t\tthis.table.options.dataChanged.call(this.table, this.getData());\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t} else if (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\tthis.refreshActiveData(false, false, true);\n\t} else {\n\t\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\t\tthis.refreshActiveData(\"page\");\n\t\t}\n\t}\n};\n\nRowManager.prototype.addRow = function (data, pos, index, blockRedraw) {\n\n\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.action(\"rowAdd\", row, { data: data, pos: pos, index: index });\n\t}\n\n\treturn row;\n};\n\n//add multiple rows\nRowManager.prototype.addRows = function (data, pos, index) {\n\tvar _this13 = this;\n\n\tvar self = this,\n\t length = 0,\n\t rows = [];\n\n\treturn new Promise(function (resolve, reject) {\n\t\tpos = _this13.findAddRowPos(pos);\n\n\t\tif (!Array.isArray(data)) {\n\t\t\tdata = [data];\n\t\t}\n\n\t\tlength = data.length - 1;\n\n\t\tif (typeof index == \"undefined\" && pos || typeof index !== \"undefined\" && !pos) {\n\t\t\tdata.reverse();\n\t\t}\n\n\t\tdata.forEach(function (item, i) {\n\t\t\tvar row = self.addRow(item, pos, index, true);\n\t\t\trows.push(row);\n\t\t});\n\n\t\tif (_this13.table.options.groupBy && _this13.table.modExists(\"groupRows\")) {\n\t\t\t_this13.table.modules.groupRows.updateGroupRows(true);\n\t\t} else if (_this13.table.options.pagination && _this13.table.modExists(\"page\")) {\n\t\t\t_this13.refreshActiveData(false, false, true);\n\t\t} else {\n\t\t\t_this13.reRenderInPosition();\n\t\t}\n\n\t\t//recalc column calculations if present\n\t\tif (_this13.table.modExists(\"columnCalcs\")) {\n\t\t\t_this13.table.modules.columnCalcs.recalc(_this13.table.rowManager.activeRows);\n\t\t}\n\n\t\t_this13.regenerateRowNumbers();\n\t\tresolve(rows);\n\t});\n};\n\nRowManager.prototype.findAddRowPos = function (pos) {\n\tif (typeof pos === \"undefined\") {\n\t\tpos = this.table.options.addRowPos;\n\t}\n\n\tif (pos === \"pos\") {\n\t\tpos = true;\n\t}\n\n\tif (pos === \"bottom\") {\n\t\tpos = false;\n\t}\n\n\treturn pos;\n};\n\nRowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {\n\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t top = this.findAddRowPos(pos),\n\t allIndex = -1,\n\t activeIndex,\n\t dispRows;\n\n\tif (!index && this.table.options.pagination && this.table.options.paginationAddRow == \"page\") {\n\t\tdispRows = this.getDisplayRows();\n\n\t\tif (top) {\n\t\t\tif (dispRows.length) {\n\t\t\t\tindex = dispRows[0];\n\t\t\t} else {\n\t\t\t\tif (this.activeRows.length) {\n\t\t\t\t\tindex = this.activeRows[this.activeRows.length - 1];\n\t\t\t\t\ttop = false;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (dispRows.length) {\n\t\t\t\tindex = dispRows[dispRows.length - 1];\n\t\t\t\ttop = dispRows.length < this.table.modules.page.getPageSize() ? false : true;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (typeof index !== \"undefined\") {\n\t\tindex = this.findRow(index);\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.assignRowToGroup(row);\n\n\t\tvar groupRows = row.getGroup().rows;\n\n\t\tif (groupRows.length > 1) {\n\n\t\t\tif (!index || index && groupRows.indexOf(index) == -1) {\n\t\t\t\tif (top) {\n\t\t\t\t\tif (groupRows[0] !== row) {\n\t\t\t\t\t\tindex = groupRows[0];\n\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (groupRows[groupRows.length - 1] !== row) {\n\t\t\t\t\t\tindex = groupRows[groupRows.length - 1];\n\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (index) {\n\t\tallIndex = this.rows.indexOf(index);\n\t}\n\n\tif (index && allIndex > -1) {\n\t\tactiveIndex = this.activeRows.indexOf(index);\n\n\t\tthis.displayRowIterator(function (rows) {\n\t\t\tvar displayIndex = rows.indexOf(index);\n\n\t\t\tif (displayIndex > -1) {\n\t\t\t\trows.splice(top ? displayIndex : displayIndex + 1, 0, row);\n\t\t\t}\n\t\t});\n\n\t\tif (activeIndex > -1) {\n\t\t\tthis.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);\n\t\t}\n\n\t\tthis.rows.splice(top ? allIndex : allIndex + 1, 0, row);\n\t} else {\n\n\t\tif (top) {\n\n\t\t\tthis.displayRowIterator(function (rows) {\n\t\t\t\trows.unshift(row);\n\t\t\t});\n\n\t\t\tthis.activeRows.unshift(row);\n\t\t\tthis.rows.unshift(row);\n\t\t} else {\n\t\t\tthis.displayRowIterator(function (rows) {\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\tthis.activeRows.push(row);\n\t\t\tthis.rows.push(row);\n\t\t}\n\t}\n\n\tthis.setActiveRows(this.activeRows);\n\n\tthis.table.options.rowAdded.call(this.table, row.getComponent());\n\n\tif (this.table.options.dataChanged) {\n\t\tthis.table.options.dataChanged.call(this.table, this.getData());\n\t}\n\n\tif (!blockRedraw) {\n\t\tthis.reRenderInPosition();\n\t}\n\n\treturn row;\n};\n\nRowManager.prototype.moveRow = function (from, to, after) {\n\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\tthis.table.modules.history.action(\"rowMove\", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });\n\t}\n\n\tthis.moveRowActual(from, to, after);\n\n\tthis.regenerateRowNumbers();\n\n\tthis.table.options.rowMoved.call(this.table, from.getComponent());\n};\n\nRowManager.prototype.moveRowActual = function (from, to, after) {\n\tvar _this14 = this;\n\n\tthis._moveRowInArray(this.rows, from, to, after);\n\tthis._moveRowInArray(this.activeRows, from, to, after);\n\n\tthis.displayRowIterator(function (rows) {\n\t\t_this14._moveRowInArray(rows, from, to, after);\n\t});\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\tif (!after && to instanceof Group) {\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\n\t\t}\n\n\t\tvar toGroup = to.getGroup();\n\t\tvar fromGroup = from.getGroup();\n\n\t\tif (toGroup === fromGroup) {\n\t\t\tthis._moveRowInArray(toGroup.rows, from, to, after);\n\t\t} else {\n\t\t\tif (fromGroup) {\n\t\t\t\tfromGroup.removeRow(from);\n\t\t\t}\n\n\t\t\ttoGroup.insertRow(from, to, after);\n\t\t}\n\t}\n};\n\nRowManager.prototype._moveRowInArray = function (rows, from, to, after) {\n\tvar fromIndex, toIndex, start, end;\n\n\tif (from !== to) {\n\n\t\tfromIndex = rows.indexOf(from);\n\n\t\tif (fromIndex > -1) {\n\n\t\t\trows.splice(fromIndex, 1);\n\n\t\t\ttoIndex = rows.indexOf(to);\n\n\t\t\tif (toIndex > -1) {\n\n\t\t\t\tif (after) {\n\t\t\t\t\trows.splice(toIndex + 1, 0, from);\n\t\t\t\t} else {\n\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t}\n\t\t}\n\n\t\t//restyle rows\n\t\tif (rows === this.getDisplayRows()) {\n\n\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex + 1;\n\n\t\t\tfor (var _i4 = start; _i4 <= end; _i4++) {\n\t\t\t\tif (rows[_i4]) {\n\t\t\t\t\tthis.styleRow(rows[_i4], _i4);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nRowManager.prototype.clearData = function () {\n\tthis.setData([]);\n};\n\nRowManager.prototype.getRowIndex = function (row) {\n\treturn this.findRowIndex(row, this.rows);\n};\n\nRowManager.prototype.getDisplayRowIndex = function (row) {\n\tvar index = this.getDisplayRows().indexOf(row);\n\treturn index > -1 ? index : false;\n};\n\nRowManager.prototype.nextDisplayRow = function (row, rowOnly) {\n\tvar index = this.getDisplayRowIndex(row),\n\t nextRow = false;\n\n\tif (index !== false && index < this.displayRowsCount - 1) {\n\t\tnextRow = this.getDisplayRows()[index + 1];\n\t}\n\n\tif (nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")) {\n\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t}\n\n\treturn nextRow;\n};\n\nRowManager.prototype.prevDisplayRow = function (row, rowOnly) {\n\tvar index = this.getDisplayRowIndex(row),\n\t prevRow = false;\n\n\tif (index) {\n\t\tprevRow = this.getDisplayRows()[index - 1];\n\t}\n\n\tif (rowOnly && prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")) {\n\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t}\n\n\treturn prevRow;\n};\n\nRowManager.prototype.findRowIndex = function (row, list) {\n\tvar rowIndex;\n\n\trow = this.findRow(row);\n\n\tif (row) {\n\t\trowIndex = list.indexOf(row);\n\n\t\tif (rowIndex > -1) {\n\t\t\treturn rowIndex;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nRowManager.prototype.getData = function (active, transform) {\n\tvar output = [],\n\t rows = this.getRows(active);\n\n\trows.forEach(function (row) {\n\t\tif (row.type == \"row\") {\n\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t}\n\t});\n\n\treturn output;\n};\n\nRowManager.prototype.getComponents = function (active) {\n\tvar output = [],\n\t rows = this.getRows(active);\n\n\trows.forEach(function (row) {\n\t\toutput.push(row.getComponent());\n\t});\n\n\treturn output;\n};\n\nRowManager.prototype.getDataCount = function (active) {\n\tvar rows = this.getRows(active);\n\n\treturn rows.length;\n};\n\nRowManager.prototype._genRemoteRequest = function () {\n\tvar _this15 = this;\n\n\tvar table = this.table,\n\t options = table.options,\n\t params = {};\n\n\tif (table.modExists(\"page\")) {\n\t\t//set sort data if defined\n\t\tif (options.ajaxSorting) {\n\t\t\tvar sorters = this.table.modules.sort.getSort();\n\n\t\t\tsorters.forEach(function (item) {\n\t\t\t\tdelete item.column;\n\t\t\t});\n\n\t\t\tparams[this.table.modules.page.paginationDataSentNames.sorters] = sorters;\n\t\t}\n\n\t\t//set filter data if defined\n\t\tif (options.ajaxFiltering) {\n\t\t\tvar filters = this.table.modules.filter.getFilters(true, true);\n\n\t\t\tparams[this.table.modules.page.paginationDataSentNames.filters] = filters;\n\t\t}\n\n\t\tthis.table.modules.ajax.setParams(params, true);\n\t}\n\n\ttable.modules.ajax.sendRequest().then(function (data) {\n\t\t_this15._setDataActual(data, true);\n\t}).catch(function (e) {});\n};\n\n//choose the path to refresh data after a filter update\nRowManager.prototype.filterRefresh = function () {\n\tvar table = this.table,\n\t options = table.options,\n\t left = this.scrollLeft;\n\n\tif (options.ajaxFiltering) {\n\t\tif (options.pagination == \"remote\" && table.modExists(\"page\")) {\n\t\t\ttable.modules.page.reset(true);\n\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t} else if (options.ajaxProgressiveLoad) {\n\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t} else {\n\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\tthis._genRemoteRequest();\n\t\t}\n\t} else {\n\t\tthis.refreshActiveData(\"filter\");\n\t}\n\n\tthis.scrollHorizontal(left);\n};\n\n//choose the path to refresh data after a sorter update\nRowManager.prototype.sorterRefresh = function (loadOrignalData) {\n\tvar table = this.table,\n\t options = this.table.options,\n\t left = this.scrollLeft;\n\n\tif (options.ajaxSorting) {\n\t\tif ((options.pagination == \"remote\" || options.progressiveLoad) && table.modExists(\"page\")) {\n\t\t\ttable.modules.page.reset(true);\n\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t} else if (options.ajaxProgressiveLoad) {\n\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t} else {\n\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\tthis._genRemoteRequest();\n\t\t}\n\t} else {\n\t\tthis.refreshActiveData(loadOrignalData ? \"filter\" : \"sort\");\n\t}\n\n\tthis.scrollHorizontal(left);\n};\n\nRowManager.prototype.scrollHorizontal = function (left) {\n\tthis.scrollLeft = left;\n\tthis.element.scrollLeft = left;\n\n\tif (this.table.options.groupBy) {\n\t\tthis.table.modules.groupRows.scrollHeaders(left);\n\t}\n\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\n\t}\n};\n\n//set active data set\nRowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {\n\tvar self = this,\n\t table = this.table,\n\t cascadeOrder = [\"all\", \"filter\", \"sort\", \"display\", \"freeze\", \"group\", \"tree\", \"page\"],\n\t displayIndex;\n\n\tif (this.redrawBlock) {\n\n\t\tif (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {\n\t\t\tthis.redrawBlockRestoreConfig = {\n\t\t\t\tstage: stage,\n\t\t\t\tskipStage: skipStage,\n\t\t\t\trenderInPosition: renderInPosition\n\t\t\t};\n\t\t}\n\n\t\treturn;\n\t} else {\n\n\t\tif (self.table.modExists(\"edit\")) {\n\t\t\tself.table.modules.edit.cancelEdit();\n\t\t}\n\n\t\tif (!stage) {\n\t\t\tstage = \"all\";\n\t\t}\n\n\t\tif (table.options.selectable && !table.options.selectablePersistence && table.modExists(\"selectRow\")) {\n\t\t\ttable.modules.selectRow.deselectRows();\n\t\t}\n\n\t\t//cascade through data refresh stages\n\t\tswitch (stage) {\n\t\t\tcase \"all\":\n\n\t\t\tcase \"filter\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.modExists(\"filter\")) {\n\t\t\t\t\t\tself.setActiveRows(table.modules.filter.filter(self.rows));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.setActiveRows(self.rows.slice(0));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"sort\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.modExists(\"sort\")) {\n\t\t\t\t\t\ttable.modules.sort.sort(this.activeRows);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\t\t//regenerate row numbers for row number formatter if in use\n\t\t\t\tthis.regenerateRowNumbers();\n\n\t\t\t//generic stage to allow for pipeline trigger after the data manipulation stage\n\t\t\tcase \"display\":\n\t\t\t\tthis.resetDisplayRows();\n\n\t\t\tcase \"freeze\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (this.table.modExists(\"frozenRows\")) {\n\t\t\t\t\t\tif (table.modules.frozenRows.isFrozen()) {\n\t\t\t\t\t\t\tif (!table.modules.frozenRows.getDisplayIndex()) {\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdisplayIndex = table.modules.frozenRows.getDisplayIndex();\n\n\t\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"group\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.groupBy && table.modExists(\"groupRows\")) {\n\n\t\t\t\t\t\tif (!table.modules.groupRows.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.groupRows.getDisplayIndex();\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\tcase \"tree\":\n\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.dataTree && table.modExists(\"dataTree\")) {\n\t\t\t\t\t\tif (!table.modules.dataTree.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.dataTree.getDisplayIndex();\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\n\t\t\t\tif (table.options.pagination && table.modExists(\"page\") && !renderInPosition) {\n\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\t\t\t\t\t\ttable.modules.page.reset();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase \"page\":\n\t\t\t\tif (!skipStage) {\n\t\t\t\t\tif (table.options.pagination && table.modExists(\"page\")) {\n\n\t\t\t\t\t\tif (!table.modules.page.getDisplayIndex()) {\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = table.modules.page.getDisplayIndex();\n\n\t\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\t\t\t\t\t\t\ttable.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\tif (displayIndex !== true) {\n\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tskipStage = false;\n\t\t\t\t}\n\t\t}\n\n\t\tif (Tabulator.prototype.helpers.elVisible(self.element)) {\n\t\t\tif (renderInPosition) {\n\t\t\t\tself.reRenderInPosition();\n\t\t\t} else {\n\n\t\t\t\tif (stage === \"all\" && this.table.options.virtualDomHoz) {\n\t\t\t\t\tthis.table.vdomHoz.dataChange();\n\t\t\t\t}\n\n\t\t\t\tself.renderTable();\n\n\t\t\t\tif (table.options.layoutColumnsOnNewData) {\n\t\t\t\t\tself.table.columnManager.redraw(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (table.modExists(\"columnCalcs\")) {\n\t\t\ttable.modules.columnCalcs.recalc(this.activeRows);\n\t\t}\n\t}\n};\n\n//regenerate row numbers for row number formatter if in use\nRowManager.prototype.regenerateRowNumbers = function () {\n\tvar _this16 = this;\n\n\tif (this.rowNumColumn) {\n\t\tthis.activeRows.forEach(function (row) {\n\t\t\tvar cell = row.getCell(_this16.rowNumColumn);\n\n\t\t\tif (cell) {\n\t\t\t\tcell._generateContents();\n\t\t\t}\n\t\t});\n\t}\n};\n\nRowManager.prototype.setActiveRows = function (activeRows) {\n\tthis.activeRows = activeRows;\n\tthis.activeRowsCount = this.activeRows.length;\n};\n\n//reset display rows array\nRowManager.prototype.resetDisplayRows = function () {\n\tthis.displayRows = [];\n\n\tthis.displayRows.push(this.activeRows.slice(0));\n\n\tthis.displayRowsCount = this.displayRows[0].length;\n\n\tif (this.table.modExists(\"frozenRows\")) {\n\t\tthis.table.modules.frozenRows.setDisplayIndex(0);\n\t}\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tthis.table.modules.groupRows.setDisplayIndex(0);\n\t}\n\n\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\t\tthis.table.modules.page.setDisplayIndex(0);\n\t}\n};\n\nRowManager.prototype.getNextDisplayIndex = function () {\n\treturn this.displayRows.length;\n};\n\n//set display row pipeline data\nRowManager.prototype.setDisplayRows = function (displayRows, index) {\n\n\tvar output = true;\n\n\tif (index && typeof this.displayRows[index] != \"undefined\") {\n\t\tthis.displayRows[index] = displayRows;\n\t\toutput = true;\n\t} else {\n\t\tthis.displayRows.push(displayRows);\n\t\toutput = index = this.displayRows.length - 1;\n\t}\n\n\tif (index == this.displayRows.length - 1) {\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n\t}\n\n\treturn output;\n};\n\nRowManager.prototype.getDisplayRows = function (index) {\n\tif (typeof index == \"undefined\") {\n\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];\n\t} else {\n\t\treturn this.displayRows[index] || [];\n\t}\n};\n\nRowManager.prototype.getVisibleRows = function (viewable) {\n\tvar topEdge = this.element.scrollTop,\n\t bottomEdge = this.element.clientHeight + topEdge,\n\t topFound = false,\n\t topRow = 0,\n\t bottomRow = 0,\n\t rows = this.getDisplayRows();\n\n\tif (viewable) {\n\n\t\tthis.getDisplayRows();\n\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\t\t\tif (rows[i]) {\n\t\t\t\tif (!topFound) {\n\t\t\t\t\tif (topEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\ttopRow = this.vDomTop;\n\t\tbottomRow = this.vDomBottom;\n\t}\n\n\treturn rows.slice(topRow, bottomRow + 1);\n};\n\n//repeat action accross display rows\nRowManager.prototype.displayRowIterator = function (callback) {\n\tthis.displayRows.forEach(callback);\n\n\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n};\n\n//return only actual rows (not group headers etc)\nRowManager.prototype.getRows = function (active) {\n\tvar rows;\n\n\tswitch (active) {\n\t\tcase \"active\":\n\t\t\trows = this.activeRows;\n\t\t\tbreak;\n\n\t\tcase \"display\":\n\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\tbreak;\n\n\t\tcase \"visible\":\n\t\t\trows = this.getVisibleRows(true);\n\t\t\tbreak;\n\n\t\tcase \"selected\":\n\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\trows = this.rows;\n\t}\n\n\treturn rows;\n};\n\n///////////////// Table Rendering /////////////////\n\n//trigger rerender of table in current position\nRowManager.prototype.reRenderInPosition = function (callback) {\n\tif (this.getRenderMode() == \"virtual\") {\n\n\t\tif (this.redrawBlock) {\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t} else {\n\t\t\t\tthis.redrawBlockRederInPosition = true;\n\t\t\t}\n\t\t} else {\n\t\t\tvar scrollTop = this.element.scrollTop;\n\t\t\tvar topRow = false;\n\t\t\tvar topOffset = false;\n\n\t\t\tvar left = this.scrollLeft;\n\n\t\t\tvar rows = this.getDisplayRows();\n\n\t\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\n\t\t\t\tif (rows[i]) {\n\t\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\t\tif (topOffset === false || Math.abs(diff) < topOffset) {\n\t\t\t\t\t\ttopOffset = diff;\n\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (callback) {\n\t\t\t\tcallback();\n\t\t\t}\n\n\t\t\tthis._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);\n\n\t\t\tthis.scrollHorizontal(left);\n\t\t}\n\t} else {\n\t\tthis.renderTable();\n\n\t\tif (callback) {\n\t\t\tcallback();\n\t\t}\n\t}\n};\n\nRowManager.prototype.setRenderMode = function () {\n\n\tif (this.table.options.virtualDom) {\n\n\t\tthis.renderMode = \"virtual\";\n\n\t\tif (this.table.element.clientHeight || this.table.options.height) {\n\t\t\tthis.fixedHeight = true;\n\t\t} else {\n\t\t\tthis.fixedHeight = false;\n\t\t}\n\t} else {\n\t\tthis.renderMode = \"classic\";\n\t}\n};\n\nRowManager.prototype.getRenderMode = function () {\n\treturn this.renderMode;\n};\n\nRowManager.prototype.renderTable = function () {\n\n\tthis.table.options.renderStarted.call(this.table);\n\n\tthis.element.scrollTop = 0;\n\n\tswitch (this.renderMode) {\n\t\tcase \"classic\":\n\t\t\tthis._simpleRender();\n\t\t\tbreak;\n\n\t\tcase \"virtual\":\n\t\t\tthis._virtualRenderFill();\n\t\t\tbreak;\n\t}\n\n\tif (this.firstRender) {\n\t\tif (this.displayRowsCount) {\n\t\t\tthis.firstRender = false;\n\t\t\tthis.table.modules.layout.layout();\n\t\t} else {\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layout();\n\t}\n\n\tif (!this.displayRowsCount) {\n\t\tif (this.table.options.placeholder) {\n\n\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\n\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t}\n\t}\n\n\tthis.table.options.renderComplete.call(this.table);\n};\n\n//simple render on heightless table\nRowManager.prototype._simpleRender = function () {\n\tthis._clearVirtualDom();\n\n\tif (this.displayRowsCount) {\n\t\tthis.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.renderEmptyScroll();\n\t}\n};\n\nRowManager.prototype.checkClassicModeGroupHeaderWidth = function () {\n\tvar self = this,\n\t element = this.tableElement,\n\t onlyGroupHeaders = true;\n\n\tself.getDisplayRows().forEach(function (row, index) {\n\t\tself.styleRow(row, index);\n\t\telement.appendChild(row.getElement());\n\t\trow.initialize(true);\n\n\t\tif (row.type !== \"group\") {\n\t\t\tonlyGroupHeaders = false;\n\t\t}\n\t});\n\n\tif (onlyGroupHeaders) {\n\t\telement.style.minWidth = self.table.columnManager.getWidth() + \"px\";\n\t} else {\n\t\telement.style.minWidth = \"\";\n\t}\n};\n\n//show scrollbars on empty table div\nRowManager.prototype.renderEmptyScroll = function () {\n\tif (this.table.options.placeholder) {\n\t\tthis.tableElement.style.display = \"none\";\n\t} else {\n\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\t\t// this.tableElement.style.minHeight = \"1px\";\n\t\t// this.tableElement.style.visibility = \"hidden\";\n\t}\n};\n\nRowManager.prototype._clearVirtualDom = function () {\n\tvar element = this.tableElement;\n\n\tif (this.table.options.placeholder && this.table.options.placeholder.parentNode) {\n\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\n\t}\n\n\t// element.children.detach();\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t}element.style.paddingTop = \"\";\n\telement.style.paddingBottom = \"\";\n\telement.style.minWidth = \"\";\n\telement.style.minHeight = \"\";\n\telement.style.display = \"\";\n\telement.style.visibility = \"\";\n\n\tthis.scrollTop = 0;\n\tthis.scrollLeft = 0;\n\tthis.vDomTop = 0;\n\tthis.vDomBottom = 0;\n\tthis.vDomTopPad = 0;\n\tthis.vDomBottomPad = 0;\n};\n\nRowManager.prototype.styleRow = function (row, index) {\n\tvar rowEl = row.getElement();\n\n\tif (index % 2) {\n\t\trowEl.classList.add(\"tabulator-row-even\");\n\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t} else {\n\t\trowEl.classList.add(\"tabulator-row-odd\");\n\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t}\n};\n\n//full virtual render\nRowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {\n\tvar self = this,\n\t element = self.tableElement,\n\t holder = self.element,\n\t topPad = 0,\n\t rowsHeight = 0,\n\t topPadHeight = 0,\n\t i = 0,\n\t onlyGroupHeaders = true,\n\t rows = self.getDisplayRows();\n\n\tposition = position || 0;\n\n\toffset = offset || 0;\n\n\tif (!position) {\n\t\tself._clearVirtualDom();\n\t} else {\n\t\twhile (element.firstChild) {\n\t\t\telement.removeChild(element.firstChild);\n\t\t} //check if position is too close to bottom of table\n\t\tvar heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;\n\n\t\tif (heightOccupied < self.height) {\n\t\t\tposition -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);\n\n\t\t\tif (position < 0) {\n\t\t\t\tposition = 0;\n\t\t\t}\n\t\t}\n\n\t\t//calculate initial pad\n\t\ttopPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);\n\t\tposition -= topPad;\n\t}\n\n\tif (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {\n\n\t\tself.vDomTop = position;\n\n\t\tself.vDomBottom = position - 1;\n\n\t\twhile ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {\n\t\t\tvar index = self.vDomBottom + 1,\n\t\t\t row = rows[index],\n\t\t\t rowHeight = 0;\n\n\t\t\tself.styleRow(row, index);\n\n\t\t\telement.appendChild(row.getElement());\n\n\t\t\trow.initialize();\n\n\t\t\tif (!row.heightInitialized) {\n\t\t\t\trow.normalizeHeight(true);\n\t\t\t}\n\n\t\t\t// if(!row.initialized){\n\t\t\t// \trow.initialize(true);\n\t\t\t// }else{\n\t\t\t// \tif(!row.heightInitialized){\n\t\t\t// \t\trow.normalizeHeight(true);\n\t\t\t// \t}\n\t\t\t// }\n\n\t\t\trowHeight = row.getHeight();\n\n\t\t\tif (i < topPad) {\n\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t} else {\n\t\t\t\trowsHeight += rowHeight;\n\t\t\t}\n\n\t\t\tif (rowHeight > this.vDomWindowBuffer) {\n\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t}\n\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\n\t\t\tself.vDomBottom++;\n\t\t\ti++;\n\t\t}\n\n\t\tif (!position) {\n\t\t\tthis.vDomTopPad = 0;\n\t\t\t//adjust rowheight to match average of rendered elements\n\t\t\tself.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\n\t\t\tself.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);\n\n\t\t\tself.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;\n\t\t} else {\n\t\t\tself.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;\n\t\t\tself.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t}\n\n\t\telement.style.paddingTop = self.vDomTopPad + \"px\";\n\t\telement.style.paddingBottom = self.vDomBottomPad + \"px\";\n\n\t\tif (forceMove) {\n\t\t\tthis.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);\n\t\t}\n\n\t\tthis.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);\n\n\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\t\tif (this.element.scrollWidth > this.element.offsetWidth && forceMove) {\n\t\t\tthis.scrollTop += this.element.offsetHeight - this.element.clientHeight;\n\t\t}\n\n\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\tholder.scrollTop = this.scrollTop;\n\n\t\telement.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + \"px\" : \"\";\n\n\t\tif (self.table.options.groupBy) {\n\t\t\tif (self.table.modules.layout.getMode() != \"fitDataFill\" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {\n\t\t\t\tself.tableElement.style.minWidth = self.table.columnManager.getWidth();\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.renderEmptyScroll();\n\t}\n\n\tif (!this.fixedHeight) {\n\t\tthis.adjustTableSize();\n\t}\n};\n\n//handle vertical scrolling\nRowManager.prototype.scrollVertical = function (dir) {\n\tvar topDiff = this.scrollTop - this.vDomScrollPosTop;\n\tvar bottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\tvar margin = this.vDomWindowBuffer * 2;\n\n\tif (-topDiff > margin || bottomDiff > margin) {\n\t\t//if big scroll redraw table;\n\t\tvar left = this.scrollLeft;\n\t\tthis._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));\n\t\tthis.scrollHorizontal(left);\n\t} else {\n\n\t\tif (dir) {\n\t\t\t//scrolling up\n\t\t\tif (topDiff < 0) {\n\n\t\t\t\tthis._addTopRow(-topDiff);\n\t\t\t}\n\n\t\t\tif (bottomDiff < 0) {\n\n\t\t\t\t//hide bottom row if needed\n\t\t\t\tif (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {\n\t\t\t\t\tthis._removeBottomRow(-bottomDiff);\n\t\t\t\t} else {\n\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t//scrolling down\n\t\t\tif (topDiff >= 0) {\n\n\t\t\t\t//hide top row if needed\n\t\t\t\tif (this.scrollTop > this.vDomWindowBuffer) {\n\n\t\t\t\t\tthis._removeTopRow(topDiff);\n\t\t\t\t} else {\n\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (bottomDiff >= 0) {\n\n\t\t\t\tthis._addBottomRow(bottomDiff);\n\t\t\t}\n\t\t}\n\t}\n};\n\nRowManager.prototype._addTopRow = function (topDiff) {\n\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\tvar table = this.tableElement,\n\t rows = this.getDisplayRows();\n\n\tif (this.vDomTop) {\n\t\tvar index = this.vDomTop - 1,\n\t\t topRow = rows[index],\n\t\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\t\t//hide top row if needed\n\t\tif (topDiff >= topRowHeight) {\n\t\t\tthis.styleRow(topRow, index);\n\t\t\ttable.insertBefore(topRow.getElement(), table.firstChild);\n\t\t\tif (!topRow.initialized || !topRow.heightInitialized) {\n\t\t\t\tthis.vDomTopNewRows.push(topRow);\n\n\t\t\t\tif (!topRow.heightInitialized) {\n\t\t\t\t\ttopRow.clearCellHeight();\n\t\t\t\t}\n\t\t\t}\n\t\t\ttopRow.initialize();\n\n\t\t\tthis.vDomTopPad -= topRowHeight;\n\n\t\t\tif (this.vDomTopPad < 0) {\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t}\n\n\t\t\tif (!index) {\n\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\t\tthis.vDomScrollPosTop -= topRowHeight;\n\t\t\tthis.vDomTop--;\n\t\t}\n\n\t\ttopDiff = -(this.scrollTop - this.vDomScrollPosTop);\n\n\t\tif (topRow.getHeight() > this.vDomWindowBuffer) {\n\t\t\tthis.vDomWindowBuffer = topRow.getHeight() * 2;\n\t\t}\n\n\t\tif (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {\n\t\t\tthis._addTopRow(topDiff, i + 1);\n\t\t} else {\n\t\t\tthis._quickNormalizeRowHeight(this.vDomTopNewRows);\n\t\t}\n\t}\n};\n\nRowManager.prototype._removeTopRow = function (topDiff) {\n\tvar table = this.tableElement,\n\t topRow = this.getDisplayRows()[this.vDomTop],\n\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\tif (topDiff >= topRowHeight) {\n\n\t\tvar rowEl = topRow.getElement();\n\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\tthis.vDomTopPad += topRowHeight;\n\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\t\tthis.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;\n\t\tthis.vDomTop++;\n\n\t\ttopDiff = this.scrollTop - this.vDomScrollPosTop;\n\n\t\tthis._removeTopRow(topDiff);\n\t}\n};\n\nRowManager.prototype._addBottomRow = function (bottomDiff) {\n\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\tvar table = this.tableElement,\n\t rows = this.getDisplayRows();\n\n\tif (this.vDomBottom < this.displayRowsCount - 1) {\n\t\tvar index = this.vDomBottom + 1,\n\t\t bottomRow = rows[index],\n\t\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\t\t//hide bottom row if needed\n\t\tif (bottomDiff >= bottomRowHeight) {\n\t\t\tthis.styleRow(bottomRow, index);\n\t\t\ttable.appendChild(bottomRow.getElement());\n\n\t\t\tif (!bottomRow.initialized || !bottomRow.heightInitialized) {\n\t\t\t\tthis.vDomBottomNewRows.push(bottomRow);\n\n\t\t\t\tif (!bottomRow.heightInitialized) {\n\t\t\t\t\tbottomRow.clearCellHeight();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbottomRow.initialize();\n\n\t\t\tthis.vDomBottomPad -= bottomRowHeight;\n\n\t\t\tif (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\t\tthis.vDomScrollPosBottom += bottomRowHeight;\n\t\t\tthis.vDomBottom++;\n\t\t}\n\n\t\tbottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\n\t\tif (bottomRow.getHeight() > this.vDomWindowBuffer) {\n\t\t\tthis.vDomWindowBuffer = bottomRow.getHeight() * 2;\n\t\t}\n\n\t\tif (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {\n\t\t\tthis._addBottomRow(bottomDiff, i + 1);\n\t\t} else {\n\t\t\tthis._quickNormalizeRowHeight(this.vDomBottomNewRows);\n\t\t}\n\t}\n};\n\nRowManager.prototype._removeBottomRow = function (bottomDiff) {\n\tvar table = this.tableElement,\n\t bottomRow = this.getDisplayRows()[this.vDomBottom],\n\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\tif (bottomDiff >= bottomRowHeight) {\n\n\t\tvar rowEl = bottomRow.getElement();\n\n\t\tif (rowEl.parentNode) {\n\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t}\n\n\t\tthis.vDomBottomPad += bottomRowHeight;\n\n\t\tif (this.vDomBottomPad < 0) {\n\t\t\tthis.vDomBottomPad = 0;\n\t\t}\n\n\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\t\tthis.vDomScrollPosBottom -= bottomRowHeight;\n\t\tthis.vDomBottom--;\n\n\t\tbottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);\n\n\t\tthis._removeBottomRow(bottomDiff);\n\t}\n};\n\nRowManager.prototype._quickNormalizeRowHeight = function (rows) {\n\trows.forEach(function (row) {\n\t\trow.calcHeight();\n\t});\n\n\trows.forEach(function (row) {\n\t\trow.setCellHeight();\n\t});\n\n\trows.length = 0;\n};\n\n//normalize height of active rows\nRowManager.prototype.normalizeHeight = function () {\n\tthis.activeRows.forEach(function (row) {\n\t\trow.normalizeHeight();\n\t});\n};\n\n//adjust the height of the table holder to fit in the Tabulator element\nRowManager.prototype.adjustTableSize = function () {\n\tvar initialHeight = this.element.clientHeight,\n\t modExists;\n\n\tif (this.renderMode === \"virtual\") {\n\n\t\tvar otherHeight = Math.floor(this.columnManager.getElement().getBoundingClientRect().height + (this.table.footerManager && this.table.footerManager.active && !this.table.footerManager.external ? this.table.footerManager.getElement().getBoundingClientRect().height : 0));\n\n\t\tif (this.fixedHeight) {\n\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t} else {\n\t\t\tthis.element.style.height = \"\";\n\t\t\tthis.element.style.height = this.table.element.clientHeight - otherHeight + \"px\";\n\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t}\n\n\t\tthis.height = this.element.clientHeight;\n\t\tthis.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;\n\n\t\t//check if the table has changed size when dealing with variable height tables\n\t\tif (!this.fixedHeight && initialHeight != this.element.clientHeight) {\n\t\t\tmodExists = this.table.modExists(\"resizeTable\");\n\n\t\t\tif (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t}\n\t}\n};\n\n//renitialize all rows\nRowManager.prototype.reinitialize = function () {\n\tthis.rows.forEach(function (row) {\n\t\trow.reinitialize(true);\n\t});\n};\n\n//prevent table from being redrawn\nRowManager.prototype.blockRedraw = function () {\n\tthis.redrawBlock = true;\n\tthis.redrawBlockRestoreConfig = false;\n};\n\n//restore table redrawing\nRowManager.prototype.restoreRedraw = function () {\n\tthis.redrawBlock = false;\n\n\tif (this.redrawBlockRestoreConfig) {\n\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\n\t\tthis.redrawBlockRestoreConfig = false;\n\t} else {\n\t\tif (this.redrawBlockRederInPosition) {\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\t}\n\n\tthis.redrawBlockRederInPosition = false;\n};\n\n//redraw table\nRowManager.prototype.redraw = function (force) {\n\tvar pos = 0,\n\t left = this.scrollLeft;\n\n\tthis.adjustTableSize();\n\n\tthis.table.tableWidth = this.table.element.clientWidth;\n\n\tif (!force) {\n\t\tif (this.renderMode == \"classic\") {\n\n\t\t\tif (this.table.options.groupBy) {\n\t\t\t\tthis.refreshActiveData(\"group\", false, false);\n\t\t\t} else {\n\t\t\t\tthis._simpleRender();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.reRenderInPosition();\n\t\t\tthis.scrollHorizontal(left);\n\t\t}\n\n\t\tif (!this.displayRowsCount) {\n\t\t\tif (this.table.options.placeholder) {\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.renderTable();\n\t}\n};\n\nRowManager.prototype.resetScroll = function () {\n\tthis.element.scrollLeft = 0;\n\tthis.element.scrollTop = 0;\n\n\tif (this.table.browser === \"ie\") {\n\t\tvar event = document.createEvent(\"Event\");\n\t\tevent.initEvent(\"scroll\", false, true);\n\t\tthis.element.dispatchEvent(event);\n\t} else {\n\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t}\n};\n\nvar VDomHoz = function VDomHoz(table) {\n\tthis.table = table;\n\n\tthis.element = this.table.rowManager.tableElement;\n\tthis.holderEl = this.table.rowManager.element;\n\n\tthis.leftCol = 0;\n\tthis.rightCol = 0;\n\tthis.scrollLeft = 0;\n\n\tthis.vDomScrollPosLeft = 0;\n\tthis.vDomScrollPosRight = 0;\n\n\tthis.vDomPadLeft = 0;\n\tthis.vDomPadRight = 0;\n\n\tthis.fitDataColAvg = 0;\n\n\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\n\n\tthis.initialized = false;\n\n\tthis.columns = [];\n\n\tif (this.compatabilityCheck()) {\n\t\tthis.initialize();\n\t}\n};\n\nVDomHoz.prototype.compatabilityCheck = function () {\n\tvar options = this.table.options,\n\t frozen = false,\n\t ok = true;\n\n\tif (options.layout == \"fitDataTable\") {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with fitDataTable layout mode\");\n\t\tok = false;\n\t}\n\n\tif (options.responsiveLayout) {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with responsive columns\");\n\t\tok = false;\n\t}\n\n\tif (this.table.rtl) {\n\t\tconsole.warn(\"Horizontal Vitrual DOM is not currently compatible with RTL text direction\");\n\t\tok = false;\n\t}\n\n\t// if(options.rowFormatter){\n\t// \tconsole.warn(\"Horizontal Vitrual DOM is not compatible with row formatters\");\n\t// \tok = false;\n\t// }\n\n\tif (options.columns) {\n\t\tfrozen = options.columns.find(function (col) {\n\t\t\treturn col.frozen;\n\t\t});\n\n\t\tif (frozen) {\n\t\t\tconsole.warn(\"Horizontal Vitrual DOM is not compatible with frozen columns\");\n\t\t\tok = false;\n\t\t}\n\t}\n\n\tif (!ok) {\n\t\toptions.virtualDomHoz = false;\n\t}\n\n\treturn ok;\n};\n\nVDomHoz.prototype.initialize = function () {\n\tvar _this17 = this;\n\n\tthis.holderEl.addEventListener(\"scroll\", function () {\n\t\tvar left = _this17.holderEl.scrollLeft;\n\n\t\tif (_this17.scrollLeft != left) {\n\t\t\t_this17.scrollLeft = left;\n\t\t\t_this17.scroll(left - (_this17.vDomScrollPosLeft + _this17.window));\n\t\t}\n\t});\n};\n\nVDomHoz.prototype.deinitialize = function () {\n\tthis.initialized = false;\n};\n\nVDomHoz.prototype.clear = function () {\n\tthis.columns = [];\n\n\tthis.leftCol = -1;\n\tthis.rightCol = 0;\n\n\tthis.vDomScrollPosLeft = 0;\n\tthis.vDomScrollPosRight = 0;\n\tthis.vDomPadLeft = 0;\n\tthis.vDomPadRight = 0;\n};\n\nVDomHoz.prototype.dataChange = function () {\n\tvar change = false,\n\t collsWidth = 0,\n\t colEnd = 0,\n\t group,\n\t row,\n\t rowEl;\n\n\tif (this.table.options.layout === \"fitData\") {\n\t\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\t\tif (!column.definition.width && column.visible) {\n\t\t\t\tchange = true;\n\t\t\t}\n\t\t});\n\n\t\tif (change) {\n\t\t\tif (change && this.table.rowManager.getDisplayRows().length) {\n\t\t\t\t// this.table.vdomHoz.deinitialize();\n\n\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\n\n\t\t\t\tif (this.table.options.groupBy) {\n\t\t\t\t\tgroup = this.table.modules.groupRows.getGroups(false)[0];\n\n\t\t\t\t\trow = group.getRows(false)[0];\n\t\t\t\t} else {\n\t\t\t\t\trow = this.table.rowManager.getDisplayRows()[0];\n\t\t\t\t}\n\n\t\t\t\tif (row) {\n\n\t\t\t\t\trowEl = row.getElement();\n\n\t\t\t\t\trow.generateCells();\n\n\t\t\t\t\tthis.element.appendChild(rowEl);\n\n\t\t\t\t\tfor (var colEnd = 0; colEnd < row.cells.length; colEnd++) {\n\t\t\t\t\t\tvar cell = row.cells[colEnd];\n\t\t\t\t\t\trowEl.appendChild(cell.getElement());\n\n\t\t\t\t\t\tcell.column.reinitializeWidth();\n\n\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\n\n\t\t\t\t\t\tif (collsWidth > this.vDomScrollPosRight) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\n\n\t\t\t\t\tfor (colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++) {\n\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.reinitialize(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.table.options.layout === \"fitColumns\") {\n\t\t\tthis.table.modules.layout.layout();\n\t\t\tthis.table.vdomHoz.reinitialize(false, true);\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.fitDataLayoutOverride = function () {\n\tfor (var _i5 = this.leftCol; _i5 <= this.rightCol; _i5++) {\n\t\tthis.columns[_i5].reinitializeWidth();\n\t}\n};\n\nVDomHoz.prototype.reinitialize = function (update, blockRedraw) {\n\tvar _this18 = this;\n\n\tvar old = {\n\t\tcols: this.columns,\n\t\tleftCol: this.leftCol,\n\t\trightCol: this.rightCol\n\t};\n\n\tif (update && !this.initialized) {\n\t\treturn;\n\t}\n\n\tthis.clear();\n\n\tthis.scrollLeft = this.holderEl.scrollLeft;\n\n\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\n\tthis.vDomScrollPosRight = this.scrollLeft + this.holderEl.clientWidth + this.window;\n\n\tvar colPos = 0;\n\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tvar config = {};\n\n\t\tif (column.visible) {\n\t\t\tvar width = column.getWidth();\n\n\t\t\tconfig.leftPos = colPos;\n\t\t\tconfig.rightPos = colPos + width;\n\n\t\t\tif (colPos + width > _this18.vDomScrollPosLeft && colPos < _this18.vDomScrollPosRight) {\n\t\t\t\t//column is visible\n\n\t\t\t\tif (_this18.leftCol == -1) {\n\t\t\t\t\t_this18.leftCol = _this18.columns.length;\n\t\t\t\t\t_this18.vDomPadLeft = colPos;\n\t\t\t\t}\n\n\t\t\t\t_this18.rightCol = _this18.columns.length;\n\t\t\t} else {\n\t\t\t\t// column is hidden\n\t\t\t\tif (_this18.leftCol !== -1) {\n\t\t\t\t\t_this18.vDomPadRight += width;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this18.columns.push(column);\n\n\t\t\tcolumn.modules.vdomHoz = config;\n\n\t\t\tcolPos += width;\n\t\t}\n\t});\n\n\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\tthis.initialized = true;\n\n\tif (!blockRedraw) {\n\t\tif (!update || this.reinitChanged(old)) {\n\t\t\tthis.renitializeRows();\n\t\t}\n\t}\n\n\tthis.holderEl.scrollLeft = this.scrollLeft;\n};\n\nVDomHoz.prototype.reinitChanged = function (old) {\n\tvar _this19 = this;\n\n\tvar match = true;\n\n\tif (old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol) {\n\t\treturn true;\n\t}\n\n\told.cols.forEach(function (col, i) {\n\t\tif (col !== _this19.columns[i]) {\n\t\t\tmatch = false;\n\t\t}\n\t});\n\n\treturn !match;\n};\n\nVDomHoz.prototype.renitializeRows = function () {\n\tvar _this20 = this;\n\n\tvar rows = this.table.rowManager.getVisibleRows();\n\trows.forEach(function (row) {\n\t\t_this20.reinitializeRow(row, true);\n\t});\n};\n\nVDomHoz.prototype.scroll = function (diff) {\n\tthis.vDomScrollPosLeft += diff;\n\tthis.vDomScrollPosRight += diff;\n\n\tif (diff > this.holderEl.clientWidth * .8) {\n\t\tthis.reinitialize();\n\t} else {\n\t\tif (diff > 0) {\n\t\t\t//scroll right\n\t\t\tthis.addColRight();\n\t\t\tthis.removeColLeft();\n\t\t} else {\n\t\t\t//scroll left\n\t\t\tthis.addColLeft();\n\t\t\tthis.removeColRight();\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.colPositionAdjust = function (start, end, diff) {\n\tfor (var _i6 = start; _i6 < end; _i6++) {\n\t\tvar column = this.columns[_i6];\n\n\t\tcolumn.modules.vdomHoz.leftPos -= diff;\n\t\tcolumn.modules.vdomHoz.rightPos -= diff;\n\t}\n};\n\nVDomHoz.prototype.addColRight = function () {\n\tvar column = this.columns[this.rightCol + 1],\n\t rows,\n\t oldWidth,\n\t widthDiff;\n\n\tif (column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight) {\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t});\n\n\t\tif (this.fitDataColAvg) {\n\n\t\t\toldWidth = column.getWidth();\n\n\t\t\tif (oldWidth === this.fitDataColAvg) {\n\t\t\t\tcolumn.reinitializeWidth();\n\n\t\t\t\twidthDiff = oldWidth - column.getWidth();\n\n\t\t\t\tif (widthDiff) {\n\t\t\t\t\tcolumn.modules.vdomHoz.rightPos -= widthDiff;\n\t\t\t\t\tthis.colPositionAdjust(this.rightCol + 1, this.columns.length, widthDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.rightCol++;\n\n\t\tif (this.rightCol >= this.columns.length - 1) {\n\t\t\tthis.vDomPadRight = 0;\n\t\t} else {\n\t\t\tthis.vDomPadRight -= column.getWidth();\n\t\t}\n\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\t\tthis.addColRight();\n\t}\n};\n\nVDomHoz.prototype.addColLeft = function () {\n\tvar column = this.columns[this.leftCol - 1],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft) {\n\t\tvar rows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().prepend(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t});\n\n\t\tif (!this.leftCol) {\n\t\t\tthis.vDomPadLeft = 0;\n\t\t} else {\n\t\t\tthis.vDomPadLeft -= column.getWidth();\n\t\t}\n\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\n\t\tthis.leftCol--;\n\n\t\tthis.addColLeft();\n\t}\n};\n\nVDomHoz.prototype.removeColRight = function (column) {\n\tvar column = this.columns[this.rightCol],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight) {\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\tcolumn.modules.vdomHoz.visible = false;\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t}\n\t\t});\n\n\t\tthis.vDomPadRight += column.getWidth();\n\t\tthis.element.style.paddingRight = this.vDomPadRight + \"px\";\n\n\t\tthis.rightCol--;\n\n\t\tthis.removeColRight();\n\t}\n};\n\nVDomHoz.prototype.removeColLeft = function () {\n\tvar column = this.columns[this.leftCol],\n\t rows;\n\n\tif (column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft) {\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type !== \"group\") {\n\t\t\t\tvar cell = row.getCell(column);\n\t\t\t\trow.getElement().removeChild(cell.getElement());\n\t\t\t}\n\t\t});\n\n\t\tthis.vDomPadLeft += column.getWidth();\n\t\tthis.element.style.paddingLeft = this.vDomPadLeft + \"px\";\n\n\t\tthis.leftCol++;\n\n\t\tthis.removeColLeft();\n\t}\n};\n\nVDomHoz.prototype.initializeRow = function (row) {\n\tif (row.type !== \"group\") {\n\t\trow.modules.vdomHoz = {\n\t\t\tleftCol: this.leftCol,\n\t\t\trightCol: this.rightCol\n\t\t};\n\n\t\tfor (var _i7 = this.leftCol; _i7 <= this.rightCol; _i7++) {\n\t\t\tvar column = this.columns[_i7];\n\n\t\t\tif (column && column.visible) {\n\t\t\t\tvar cell = row.getCell(column);\n\n\t\t\t\trow.getElement().appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t}\n\t\t}\n\t}\n};\n\nVDomHoz.prototype.reinitializeRow = function (row, force) {\n\tif (row.type !== \"group\") {\n\t\tif (force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol) {\n\t\t\tvar rowEl = row.getElement();\n\t\t\twhile (rowEl.firstChild) {\n\t\t\t\trowEl.removeChild(rowEl.firstChild);\n\t\t\t}this.initializeRow(row);\n\t\t}\n\t}\n};\n//public row object\nvar RowComponent = function RowComponent(row) {\n\tthis._row = row;\n};\n\nRowComponent.prototype.getData = function (transform) {\n\treturn this._row.getData(transform);\n};\n\nRowComponent.prototype.getElement = function () {\n\treturn this._row.getElement();\n};\n\nRowComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._row.getCells().forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nRowComponent.prototype.getCell = function (column) {\n\tvar cell = this._row.getCell(column);\n\treturn cell ? cell.getComponent() : false;\n};\n\nRowComponent.prototype.getIndex = function () {\n\treturn this._row.getData(\"data\")[this._row.table.options.index];\n};\n\nRowComponent.prototype.getPosition = function (active) {\n\treturn this._row.table.rowManager.getRowPosition(this._row, active);\n};\n\nRowComponent.prototype.delete = function () {\n\treturn this._row.delete();\n};\n\nRowComponent.prototype.scrollTo = function () {\n\treturn this._row.table.rowManager.scrollToRow(this._row);\n};\n\nRowComponent.prototype.pageTo = function () {\n\tif (this._row.table.modExists(\"page\", true)) {\n\t\treturn this._row.table.modules.page.setPageToRow(this._row);\n\t}\n};\n\nRowComponent.prototype.move = function (to, after) {\n\tthis._row.moveToRow(to, after);\n};\n\nRowComponent.prototype.update = function (data) {\n\treturn this._row.updateData(data);\n};\n\nRowComponent.prototype.normalizeHeight = function () {\n\tthis._row.normalizeHeight(true);\n};\n\nRowComponent.prototype.select = function () {\n\tthis._row.table.modules.selectRow.selectRows(this._row);\n};\n\nRowComponent.prototype.deselect = function () {\n\tthis._row.table.modules.selectRow.deselectRows(this._row);\n};\n\nRowComponent.prototype.toggleSelect = function () {\n\tthis._row.table.modules.selectRow.toggleRow(this._row);\n};\n\nRowComponent.prototype.isSelected = function () {\n\treturn this._row.table.modules.selectRow.isRowSelected(this._row);\n};\n\nRowComponent.prototype._getSelf = function () {\n\treturn this._row;\n};\n\nRowComponent.prototype.validate = function () {\n\treturn this._row.validate();\n};\n\nRowComponent.prototype.freeze = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tthis._row.table.modules.frozenRows.freezeRow(this._row);\n\t}\n};\n\nRowComponent.prototype.unfreeze = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tthis._row.table.modules.frozenRows.unfreezeRow(this._row);\n\t}\n};\n\nRowComponent.prototype.isFrozen = function () {\n\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\t\tvar index = this._row.table.modules.frozenRows.rows.indexOf(this._row);\n\t\treturn index > -1;\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.treeCollapse = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.collapseRow(this._row);\n\t}\n};\n\nRowComponent.prototype.treeExpand = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.expandRow(this._row);\n\t}\n};\n\nRowComponent.prototype.treeToggle = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\tthis._row.table.modules.dataTree.toggleRow(this._row);\n\t}\n};\n\nRowComponent.prototype.getTreeParent = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.getTreeParent(this._row);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.getTreeChildren = function () {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.getTreeChildren(this._row, true);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.addTreeChild = function (data, pos, index) {\n\tif (this._row.table.modExists(\"dataTree\", true)) {\n\t\treturn this._row.table.modules.dataTree.addTreeChildRow(this._row, data, pos, index);\n\t}\n\n\treturn false;\n};\n\nRowComponent.prototype.reformat = function () {\n\treturn this._row.reinitialize();\n};\n\nRowComponent.prototype.getGroup = function () {\n\treturn this._row.getGroup().getComponent();\n};\n\nRowComponent.prototype.getTable = function () {\n\treturn this._row.table;\n};\n\nRowComponent.prototype.getNextRow = function () {\n\tvar row = this._row.nextRow();\n\treturn row ? row.getComponent() : row;\n};\n\nRowComponent.prototype.getPrevRow = function () {\n\tvar row = this._row.prevRow();\n\treturn row ? row.getComponent() : row;\n};\n\nvar Row = function Row(data, parent) {\n\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"row\";\n\n\tthis.table = parent.table;\n\tthis.parent = parent;\n\tthis.data = {};\n\tthis.type = type; //type of element\n\tthis.element = false;\n\tthis.modules = {}; //hold module variables;\n\tthis.cells = [];\n\tthis.height = 0; //hold element height\n\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\n\tthis.manualHeight = false; //user has manually set row height\n\tthis.outerHeight = 0; //holde lements outer height\n\tthis.initialized = false; //element has been rendered\n\tthis.heightInitialized = false; //element has resized cells to fit\n\n\tthis.component = null;\n\n\tthis.created = false;\n\n\tthis.setData(data);\n};\n\nRow.prototype.create = function () {\n\tif (!this.created) {\n\t\tthis.created = true;\n\t\tthis.generateElement();\n\t}\n};\n\nRow.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-row\");\n\tel.setAttribute(\"role\", \"row\");\n\n\tthis.element = el;\n};\n\nRow.prototype.getElement = function () {\n\tthis.create();\n\treturn this.element;\n};\n\nRow.prototype.detachElement = function () {\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n};\n\nRow.prototype.generateElement = function () {\n\tvar self = this,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\tthis.createElement();\n\n\t//set row selection characteristics\n\tif (self.table.options.selectable !== false && self.table.modExists(\"selectRow\")) {\n\t\tself.table.modules.selectRow.initializeRow(this);\n\t}\n\n\t//setup movable rows\n\tif (self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\t\tself.table.modules.moveRow.initializeRow(this);\n\t}\n\n\t//setup data tree\n\tif (self.table.options.dataTree !== false && self.table.modExists(\"dataTree\")) {\n\t\tself.table.modules.dataTree.initializeRow(this);\n\t}\n\n\t//setup column colapse container\n\tif (self.table.options.responsiveLayout === \"collapse\" && self.table.modExists(\"responsiveLayout\")) {\n\t\tself.table.modules.responsiveLayout.initializeRow(this);\n\t}\n\n\t//set column menu\n\tif ((self.table.options.rowContextMenu || self.table.options.rowClickMenu) && this.table.modExists(\"menu\")) {\n\t\tself.table.modules.menu.initializeRow(this);\n\t}\n\n\t//handle row click events\n\tif (self.table.options.rowClick) {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tself.table.options.rowClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowDblClick) {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tself.table.options.rowDblClick(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowContext) {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tself.table.options.rowContext(e, self.getComponent());\n\t\t});\n\t}\n\n\t//handle mouse events\n\tif (self.table.options.rowMouseEnter) {\n\t\tself.element.addEventListener(\"mouseenter\", function (e) {\n\t\t\tself.table.options.rowMouseEnter(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseLeave) {\n\t\tself.element.addEventListener(\"mouseleave\", function (e) {\n\t\t\tself.table.options.rowMouseLeave(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseOver) {\n\t\tself.element.addEventListener(\"mouseover\", function (e) {\n\t\t\tself.table.options.rowMouseOver(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseOut) {\n\t\tself.element.addEventListener(\"mouseout\", function (e) {\n\t\t\tself.table.options.rowMouseOut(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowMouseMove) {\n\t\tself.element.addEventListener(\"mousemove\", function (e) {\n\t\t\tself.table.options.rowMouseMove(e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.table.options.rowTap) {\n\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tself.table.options.rowTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (self.table.options.rowDblTap) {\n\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tself.table.options.rowDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (self.table.options.rowTapHold) {\n\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tself.table.options.rowTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n};\n\nRow.prototype.generateCells = function () {\n\tthis.cells = this.table.columnManager.generateCells(this);\n};\n\n//functions to setup on first render\nRow.prototype.initialize = function (force) {\n\tvar _this21 = this;\n\n\tthis.create();\n\n\tif (!this.initialized || force) {\n\n\t\tthis.deleteCells();\n\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t} //handle frozen cells\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tthis.table.modules.frozenColumns.layoutRow(this);\n\t\t}\n\n\t\tthis.generateCells();\n\n\t\tif (this.table.options.virtualDomHoz && this.table.vdomHoz.initialized) {\n\t\t\tthis.table.vdomHoz.initializeRow(this);\n\t\t} else {\n\t\t\tthis.cells.forEach(function (cell) {\n\t\t\t\t_this21.element.appendChild(cell.getElement());\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\t\t}\n\n\t\tif (force) {\n\t\t\tthis.normalizeHeight();\n\t\t}\n\n\t\t//setup movable rows\n\t\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\")) {\n\t\t\tthis.table.modules.dataTree.layoutRow(this);\n\t\t}\n\n\t\t//setup column colapse container\n\t\tif (this.table.options.responsiveLayout === \"collapse\" && this.table.modExists(\"responsiveLayout\")) {\n\t\t\tthis.table.modules.responsiveLayout.layoutRow(this);\n\t\t}\n\n\t\tif (this.table.options.rowFormatter) {\n\t\t\tthis.table.options.rowFormatter(this.getComponent());\n\t\t}\n\n\t\t//set resizable handles\n\t\tif (this.table.options.resizableRows && this.table.modExists(\"resizeRows\")) {\n\t\t\tthis.table.modules.resizeRows.initializeRow(this);\n\t\t}\n\n\t\tthis.initialized = true;\n\t} else {\n\t\tif (this.table.options.virtualDomHoz) {\n\t\t\tthis.table.vdomHoz.reinitializeRow(this);\n\t\t}\n\t}\n};\n\nRow.prototype.reinitializeHeight = function () {\n\tthis.heightInitialized = false;\n\n\tif (this.element && this.element.offsetParent !== null) {\n\t\tthis.normalizeHeight(true);\n\t}\n};\n\nRow.prototype.reinitialize = function (children) {\n\tthis.initialized = false;\n\tthis.heightInitialized = false;\n\n\tif (!this.manualHeight) {\n\t\tthis.height = 0;\n\t\tthis.heightStyled = \"\";\n\t}\n\n\tif (this.element && this.element.offsetParent !== null) {\n\t\tthis.initialize(true);\n\t}\n\n\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\t\tthis.table.modules.dataTree.getTreeChildren(this, false, true).forEach(function (child) {\n\t\t\tchild.reinitialize(true);\n\t\t});\n\t}\n};\n\n//get heights when doing bulk row style calcs in virtual DOM\nRow.prototype.calcHeight = function (force) {\n\n\tvar maxHeight = 0,\n\t minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\n\tthis.cells.forEach(function (cell) {\n\t\tvar height = cell.getHeight();\n\t\tif (height > maxHeight) {\n\t\t\tmaxHeight = height;\n\t\t}\n\t});\n\n\tif (force) {\n\t\tthis.height = Math.max(maxHeight, minHeight);\n\t} else {\n\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t}\n\n\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\tthis.outerHeight = this.element.offsetHeight;\n};\n\n//set of cells\nRow.prototype.setCellHeight = function () {\n\tthis.cells.forEach(function (cell) {\n\t\tcell.setHeight();\n\t});\n\n\tthis.heightInitialized = true;\n};\n\nRow.prototype.clearCellHeight = function () {\n\tthis.cells.forEach(function (cell) {\n\t\tcell.clearHeight();\n\t});\n};\n\n//normalize the height of elements in the row\nRow.prototype.normalizeHeight = function (force) {\n\n\tif (force) {\n\t\tthis.clearCellHeight();\n\t}\n\n\tthis.calcHeight(force);\n\n\tthis.setCellHeight();\n};\n\n// Row.prototype.setHeight = function(height){\n// \tthis.height = height;\n\n// \tthis.setCellHeight();\n// };\n\n//set height of rows\nRow.prototype.setHeight = function (height, force) {\n\tif (this.height != height || force) {\n\n\t\tthis.manualHeight = true;\n\n\t\tthis.height = height;\n\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\n\t\tthis.setCellHeight();\n\n\t\t// this.outerHeight = this.element.outerHeight();\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n};\n\n//return rows outer height\nRow.prototype.getHeight = function () {\n\treturn this.outerHeight;\n};\n\n//return rows outer Width\nRow.prototype.getWidth = function () {\n\treturn this.element.offsetWidth;\n};\n\n//////////////// Cell Management /////////////////\n\nRow.prototype.deleteCell = function (cell) {\n\tvar index = this.cells.indexOf(cell);\n\n\tif (index > -1) {\n\t\tthis.cells.splice(index, 1);\n\t}\n};\n\n//////////////// Data Management /////////////////\n\nRow.prototype.setData = function (data) {\n\tif (this.table.modExists(\"mutator\")) {\n\t\tdata = this.table.modules.mutator.transformRow(data, \"data\");\n\t}\n\n\tthis.data = data;\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\t\tthis.table.modules.reactiveData.watchRow(this);\n\t}\n};\n\n//update the rows data\nRow.prototype.updateData = function (updatedData) {\n\tvar _this22 = this;\n\n\tvar visible = this.element && Tabulator.prototype.helpers.elVisible(this.element),\n\t tempData = {},\n\t newRowData;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (typeof updatedData === \"string\") {\n\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t}\n\n\t\tif (_this22.table.options.reactiveData && _this22.table.modExists(\"reactiveData\", true)) {\n\t\t\t_this22.table.modules.reactiveData.block();\n\t\t}\n\n\t\t//mutate incomming data if needed\n\t\tif (_this22.table.modExists(\"mutator\")) {\n\n\t\t\ttempData = Object.assign(tempData, _this22.data);\n\t\t\ttempData = Object.assign(tempData, updatedData);\n\n\t\t\tnewRowData = _this22.table.modules.mutator.transformRow(tempData, \"data\", updatedData);\n\t\t} else {\n\t\t\tnewRowData = updatedData;\n\t\t}\n\n\t\t//set data\n\t\tfor (var attrname in newRowData) {\n\t\t\t_this22.data[attrname] = newRowData[attrname];\n\t\t}\n\n\t\tif (_this22.table.options.reactiveData && _this22.table.modExists(\"reactiveData\", true)) {\n\t\t\t_this22.table.modules.reactiveData.unblock();\n\t\t}\n\n\t\t//update affected cells only\n\t\tfor (var attrname in updatedData) {\n\n\t\t\tvar columns = _this22.table.columnManager.getColumnsByFieldRoot(attrname);\n\n\t\t\tcolumns.forEach(function (column) {\n\t\t\t\tvar cell = _this22.getCell(column.getField());\n\n\t\t\t\tif (cell) {\n\t\t\t\t\tvar value = column.getFieldValue(newRowData);\n\t\t\t\t\tif (cell.getValue() != value) {\n\t\t\t\t\t\tcell.setValueProcessData(value);\n\n\t\t\t\t\t\tif (visible) {\n\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (_this22.table.options.groupUpdateOnCellEdit && _this22.table.options.groupBy && _this22.table.modExists(\"groupRows\")) {\n\t\t\t_this22.table.modules.groupRows.reassignRowToGroup(_this22.row);\n\t\t}\n\n\t\t//Partial reinitialization if visible\n\t\tif (visible) {\n\t\t\t_this22.normalizeHeight(true);\n\n\t\t\tif (_this22.table.options.rowFormatter) {\n\t\t\t\t_this22.table.options.rowFormatter(_this22.getComponent());\n\t\t\t}\n\t\t} else {\n\t\t\t_this22.initialized = false;\n\t\t\t_this22.height = 0;\n\t\t\t_this22.heightStyled = \"\";\n\t\t}\n\n\t\tif (_this22.table.options.dataTree !== false && _this22.table.modExists(\"dataTree\") && _this22.table.modules.dataTree.redrawNeeded(updatedData)) {\n\t\t\t_this22.table.modules.dataTree.initializeRow(_this22);\n\n\t\t\tif (visible) {\n\t\t\t\t_this22.table.modules.dataTree.layoutRow(_this22);\n\t\t\t\t_this22.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t\t\t}\n\t\t}\n\n\t\t//this.reinitialize();\n\n\t\t_this22.table.options.rowUpdated.call(_this22.table, _this22.getComponent());\n\n\t\tif (_this22.table.options.dataChanged) {\n\t\t\t_this22.table.options.dataChanged.call(_this22.table, _this22.table.rowManager.getData());\n\t\t}\n\n\t\tresolve();\n\t});\n};\n\nRow.prototype.getData = function (transform) {\n\tif (transform) {\n\t\tif (this.table.modExists(\"accessor\")) {\n\t\t\treturn this.table.modules.accessor.transformRow(this, transform);\n\t\t}\n\t}\n\n\treturn this.data;\n};\n\nRow.prototype.getCell = function (column) {\n\tvar match = false;\n\n\tcolumn = this.table.columnManager.findColumn(column);\n\n\tmatch = this.cells.find(function (cell) {\n\t\treturn cell.column === column;\n\t});\n\n\treturn match;\n};\n\nRow.prototype.getCellIndex = function (findCell) {\n\treturn this.cells.findIndex(function (cell) {\n\t\treturn cell === findCell;\n\t});\n};\n\nRow.prototype.findNextEditableCell = function (index) {\n\tvar nextCell = false;\n\n\tif (index < this.cells.length - 1) {\n\t\tfor (var i = index + 1; i < this.cells.length; i++) {\n\t\t\tvar cell = this.cells[i];\n\n\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\t\t\t\tvar allowEdit = true;\n\n\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (allowEdit) {\n\t\t\t\t\tnextCell = cell;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nextCell;\n};\n\nRow.prototype.findPrevEditableCell = function (index) {\n\tvar prevCell = false;\n\n\tif (index > 0) {\n\t\tfor (var i = index - 1; i >= 0; i--) {\n\t\t\tvar cell = this.cells[i],\n\t\t\t allowEdit = true;\n\n\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (allowEdit) {\n\t\t\t\t\tprevCell = cell;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn prevCell;\n};\n\nRow.prototype.getCells = function () {\n\treturn this.cells;\n};\n\nRow.prototype.nextRow = function () {\n\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\treturn row || false;\n};\n\nRow.prototype.prevRow = function () {\n\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\treturn row || false;\n};\n\nRow.prototype.moveToRow = function (to, before) {\n\tvar toRow = this.table.rowManager.findRow(to);\n\n\tif (toRow) {\n\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t}\n};\n\nRow.prototype.validate = function () {\n\tvar invalid = [];\n\n\tthis.cells.forEach(function (cell) {\n\t\tif (!cell.validate()) {\n\t\t\tinvalid.push(cell.getComponent());\n\t\t}\n\t});\n\n\treturn invalid.length ? invalid : true;\n};\n\n///////////////////// Actions /////////////////////\n\nRow.prototype.delete = function () {\n\tvar _this23 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar index, rows;\n\n\t\tif (_this23.table.options.history && _this23.table.modExists(\"history\")) {\n\n\t\t\tif (_this23.table.options.groupBy && _this23.table.modExists(\"groupRows\")) {\n\t\t\t\trows = _this23.getGroup().rows;\n\t\t\t\tindex = rows.indexOf(_this23);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tindex = rows[index - 1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tindex = _this23.table.rowManager.getRowIndex(_this23);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tindex = _this23.table.rowManager.rows[index - 1];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this23.table.modules.history.action(\"rowDelete\", _this23, { data: _this23.getData(), pos: !index, index: index });\n\t\t}\n\n\t\t_this23.deleteActual();\n\n\t\tresolve();\n\t});\n};\n\nRow.prototype.deleteActual = function (blockRedraw) {\n\tvar index = this.table.rowManager.getRowIndex(this);\n\n\tthis.detatchModules();\n\n\t// if(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\n\t// \tthis.table.modules.dataTree.collapseRow(this, true);\n\t// }\n\n\t//remove any reactive data watchers from row object\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {}\n\t// this.table.modules.reactiveData.unwatchRow(this);\n\n\n\t//remove from group\n\tif (this.modules.group) {\n\t\tthis.modules.group.removeRow(this);\n\t}\n\n\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\n\tthis.deleteCells();\n\n\tthis.initialized = false;\n\tthis.heightInitialized = false;\n\tthis.element = false;\n\n\tif (this.table.options.dataTree && this.table.modExists(\"dataTree\", true)) {\n\t\tthis.table.modules.dataTree.rowDelete(this);\n\t}\n\n\t//recalc column calculations if present\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this);\n\t\t} else {\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t}\n\t}\n};\n\nRow.prototype.detatchModules = function () {\n\t//deselect row if it is selected\n\tif (this.table.modExists(\"selectRow\")) {\n\t\tthis.table.modules.selectRow._deselectRow(this, true);\n\t}\n\n\t//cancel edit if row is currently being edited\n\tif (this.table.modExists(\"edit\")) {\n\t\tif (this.table.modules.edit.currentCell.row === this) {\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t}\n\t}\n\n\tif (this.table.modExists(\"frozenRows\")) {\n\t\tthis.table.modules.frozenRows.detachRow(this);\n\t}\n};\n\nRow.prototype.deleteCells = function () {\n\tvar cellCount = this.cells.length;\n\n\tfor (var _i8 = 0; _i8 < cellCount; _i8++) {\n\t\tthis.cells[0].delete();\n\t}\n};\n\nRow.prototype.wipe = function () {\n\tthis.detatchModules();\n\tthis.deleteCells();\n\n\tif (this.element) {\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t}if (this.element.parentNode) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t}\n\n\tthis.element = false;\n\tthis.modules = {};\n};\n\nRow.prototype.getGroup = function () {\n\treturn this.modules.group || false;\n};\n\n//////////////// Object Generation /////////////////\nRow.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new RowComponent(this);\n\t}\n\n\treturn this.component;\n};\n\n//public row object\nvar CellComponent = function CellComponent(cell) {\n\tthis._cell = cell;\n};\n\nCellComponent.prototype.getValue = function () {\n\treturn this._cell.getValue();\n};\n\nCellComponent.prototype.getOldValue = function () {\n\treturn this._cell.getOldValue();\n};\n\nCellComponent.prototype.getInitialValue = function () {\n\treturn this._cell.initialValue;\n};\n\nCellComponent.prototype.getElement = function () {\n\treturn this._cell.getElement();\n};\n\nCellComponent.prototype.getRow = function () {\n\treturn this._cell.row.getComponent();\n};\n\nCellComponent.prototype.getData = function () {\n\treturn this._cell.row.getData();\n};\n\nCellComponent.prototype.getField = function () {\n\treturn this._cell.column.getField();\n};\n\nCellComponent.prototype.getColumn = function () {\n\treturn this._cell.column.getComponent();\n};\n\nCellComponent.prototype.setValue = function (value, mutate) {\n\tif (typeof mutate == \"undefined\") {\n\t\tmutate = true;\n\t}\n\n\tthis._cell.setValue(value, mutate);\n};\n\nCellComponent.prototype.restoreOldValue = function () {\n\tthis._cell.setValueActual(this._cell.getOldValue());\n};\n\nCellComponent.prototype.restoreInitialValue = function () {\n\tthis._cell.setValueActual(this._cell.initialValue);\n};\n\nCellComponent.prototype.edit = function (force) {\n\treturn this._cell.edit(force);\n};\n\nCellComponent.prototype.cancelEdit = function () {\n\tthis._cell.cancelEdit();\n};\n\nCellComponent.prototype.isEdited = function () {\n\treturn !!this._cell.modules.edit && this._cell.modules.edit.edited;\n};\n\nCellComponent.prototype.clearEdited = function () {\n\tif (self.table.modExists(\"edit\", true)) {\n\t\tthis._cell.table.modules.edit.clearEdited(this._cell);\n\t}\n};\n\nCellComponent.prototype.isValid = function () {\n\treturn this._cell.modules.validate ? !this._cell.modules.validate.invalid : true;\n};\n\nCellComponent.prototype.validate = function () {\n\treturn this._cell.validate();\n};\n\nCellComponent.prototype.clearValidation = function () {\n\tif (this._cell.table.modExists(\"validate\", true)) {\n\t\tthis._cell.table.modules.validate.clearValidation(this._cell);\n\t}\n};\n\nCellComponent.prototype.nav = function () {\n\treturn this._cell.nav();\n};\n\nCellComponent.prototype.checkHeight = function () {\n\tthis._cell.checkHeight();\n};\n\nCellComponent.prototype.getTable = function () {\n\treturn this._cell.table;\n};\n\nCellComponent.prototype._getSelf = function () {\n\treturn this._cell;\n};\n\nvar Cell = function Cell(column, row) {\n\n\tthis.table = column.table;\n\tthis.column = column;\n\tthis.row = row;\n\tthis.element = null;\n\tthis.value = null;\n\tthis.initialValue;\n\tthis.oldValue = null;\n\tthis.modules = {};\n\n\tthis.height = null;\n\tthis.width = null;\n\tthis.minWidth = null;\n\n\tthis.component = null;\n\n\tthis.loaded = false; //track if the cell has been added to the DOM yet\n\n\tthis.build();\n};\n\n//////////////// Setup Functions /////////////////\n\n//generate element\nCell.prototype.build = function () {\n\tthis.generateElement();\n\n\tthis.setWidth();\n\n\tthis._configureCell();\n\n\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\n\tthis.initialValue = this.value;\n};\n\nCell.prototype.generateElement = function () {\n\tthis.element = document.createElement('div');\n\tthis.element.className = \"tabulator-cell\";\n\tthis.element.setAttribute(\"role\", \"gridcell\");\n\tthis.element = this.element;\n};\n\nCell.prototype._configureCell = function () {\n\tvar self = this,\n\t cellEvents = self.column.cellEvents,\n\t element = self.element,\n\t field = this.column.getField(),\n\t vertAligns = {\n\t\ttop: \"flex-start\",\n\t\tbottom: \"flex-end\",\n\t\tmiddle: \"center\"\n\t},\n\t hozAligns = {\n\t\tleft: \"flex-start\",\n\t\tright: \"flex-end\",\n\t\tcenter: \"center\"\n\t};\n\n\t//set text alignment\n\telement.style.textAlign = self.column.hozAlign;\n\n\tif (self.column.vertAlign) {\n\t\telement.style.display = \"inline-flex\";\n\n\t\telement.style.alignItems = vertAligns[self.column.vertAlign] || \"\";\n\n\t\tif (self.column.hozAlign) {\n\t\t\telement.style.justifyContent = hozAligns[self.column.hozAlign] || \"\";\n\t\t}\n\t}\n\n\tif (field) {\n\t\telement.setAttribute(\"tabulator-field\", field);\n\t}\n\n\t//add class to cell if needed\n\tif (self.column.definition.cssClass) {\n\t\tvar classNames = self.column.definition.cssClass.split(\" \");\n\t\tclassNames.forEach(function (className) {\n\t\t\telement.classList.add(className);\n\t\t});\n\t}\n\n\t//update tooltip on mouse enter\n\tif (this.table.options.tooltipGenerationMode === \"hover\") {\n\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\tself._generateTooltip();\n\t\t});\n\t}\n\n\tself._bindClickEvents(cellEvents);\n\n\tself._bindTouchEvents(cellEvents);\n\n\tself._bindMouseEvents(cellEvents);\n\n\tif (self.column.modules.edit) {\n\t\tself.table.modules.edit.bindEditor(self);\n\t}\n\n\tif (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\t\tself.table.modules.moveRow.initializeCell(self);\n\t}\n\n\t//hide cell if not visible\n\tif (!self.column.visible) {\n\t\tself.hide();\n\t}\n};\n\nCell.prototype._bindClickEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element;\n\n\t//set event bindings\n\tif (cellEvents.cellClick || self.table.options.cellClick) {\n\t\telement.addEventListener(\"click\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellClick) {\n\t\t\t\tcellEvents.cellClick.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellClick) {\n\t\t\t\tself.table.options.cellClick.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellDblClick || this.table.options.cellDblClick) {\n\t\telement.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellDblClick) {\n\t\t\t\tcellEvents.cellDblClick.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellDblClick) {\n\t\t\t\tself.table.options.cellDblClick.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t} else {\n\t\telement.addEventListener(\"dblclick\", function (e) {\n\n\t\t\tif (self.table.modExists(\"edit\")) {\n\t\t\t\tif (self.table.modules.edit.currentCell === self) {\n\t\t\t\t\treturn; //prevent instant selection of editor content\n\t\t\t\t}\n\t\t\t}\n\n\t\t\te.preventDefault();\n\n\t\t\ttry {\n\t\t\t\tif (document.selection) {\n\t\t\t\t\t// IE\n\t\t\t\t\tvar range = document.body.createTextRange();\n\t\t\t\t\trange.moveToElementText(self.element);\n\t\t\t\t\trange.select();\n\t\t\t\t} else if (window.getSelection) {\n\t\t\t\t\tvar range = document.createRange();\n\t\t\t\t\trange.selectNode(self.element);\n\t\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\t\twindow.getSelection().addRange(range);\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t});\n\t}\n\n\tif (cellEvents.cellContext || this.table.options.cellContext) {\n\t\telement.addEventListener(\"contextmenu\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellContext) {\n\t\t\t\tcellEvents.cellContext.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellContext) {\n\t\t\t\tself.table.options.cellContext.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n};\n\nCell.prototype._bindMouseEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element;\n\n\tif (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {\n\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseEnter) {\n\t\t\t\tcellEvents.cellMouseEnter.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseEnter) {\n\t\t\t\tself.table.options.cellMouseEnter.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {\n\t\telement.addEventListener(\"mouseleave\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseLeave) {\n\t\t\t\tcellEvents.cellMouseLeave.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseLeave) {\n\t\t\t\tself.table.options.cellMouseLeave.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {\n\t\telement.addEventListener(\"mouseover\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseOver) {\n\t\t\t\tcellEvents.cellMouseOver.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseOver) {\n\t\t\t\tself.table.options.cellMouseOver.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {\n\t\telement.addEventListener(\"mouseout\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseOut) {\n\t\t\t\tcellEvents.cellMouseOut.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseOut) {\n\t\t\t\tself.table.options.cellMouseOut.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {\n\t\telement.addEventListener(\"mousemove\", function (e) {\n\t\t\tvar component = self.getComponent();\n\n\t\t\tif (cellEvents.cellMouseMove) {\n\t\t\t\tcellEvents.cellMouseMove.call(self.table, e, component);\n\t\t\t}\n\n\t\t\tif (self.table.options.cellMouseMove) {\n\t\t\t\tself.table.options.cellMouseMove.call(self.table, e, component);\n\t\t\t}\n\t\t});\n\t}\n};\n\nCell.prototype._bindTouchEvents = function (cellEvents) {\n\tvar self = this,\n\t element = self.element,\n\t dblTap,\n\t tapHold,\n\t tap;\n\n\tif (cellEvents.cellTap || this.table.options.cellTap) {\n\t\ttap = false;\n\n\t\telement.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellTap) {\n\t\t\t\t\tcellEvents.cellTap.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellTap) {\n\t\t\t\t\tself.table.options.cellTap.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (cellEvents.cellDblTap || this.table.options.cellDblTap) {\n\t\tdblTap = null;\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellDblTap) {\n\t\t\t\t\tcellEvents.cellDblTap.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellDblTap) {\n\t\t\t\t\tself.table.options.cellDblTap.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cellEvents.cellTapHold || this.table.options.cellTapHold) {\n\t\ttapHold = null;\n\n\t\telement.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellTapHold) {\n\t\t\t\t\tcellEvents.cellTapHold.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellTapHold) {\n\t\t\t\t\tself.table.options.cellTapHold.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n};\n\n//generate cell contents\nCell.prototype._generateContents = function () {\n\tvar val;\n\n\tif (this.table.modExists(\"format\")) {\n\t\tval = this.table.modules.format.formatValue(this);\n\t} else {\n\t\tval = this.element.innerHTML = this.value;\n\t}\n\n\tswitch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {\n\t\tcase \"object\":\n\t\t\tif (val instanceof Node) {\n\n\t\t\t\t//clear previous cell contents\n\t\t\t\twhile (this.element.firstChild) {\n\t\t\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t\t\t}this.element.appendChild(val);\n\t\t\t} else {\n\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\tif (val != null) {\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"undefined\":\n\t\tcase \"null\":\n\t\t\tthis.element.innerHTML = \"\";\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthis.element.innerHTML = val;\n\t}\n};\n\nCell.prototype.cellRendered = function () {\n\tif (this.table.modExists(\"format\") && this.table.modules.format.cellRendered) {\n\t\tthis.table.modules.format.cellRendered(this);\n\t}\n};\n\n//generate tooltip text\nCell.prototype._generateTooltip = function () {\n\tvar tooltip = this.column.tooltip;\n\n\tif (tooltip) {\n\t\tif (tooltip === true) {\n\t\t\ttooltip = this.value;\n\t\t} else if (typeof tooltip == \"function\") {\n\t\t\ttooltip = tooltip(this.getComponent());\n\n\t\t\tif (tooltip === false) {\n\t\t\t\ttooltip = \"\";\n\t\t\t}\n\t\t}\n\n\t\tif (typeof tooltip === \"undefined\") {\n\t\t\ttooltip = \"\";\n\t\t}\n\n\t\tthis.element.setAttribute(\"title\", tooltip);\n\t} else {\n\t\tthis.element.setAttribute(\"title\", \"\");\n\t}\n};\n\n//////////////////// Getters ////////////////////\nCell.prototype.getElement = function (containerOnly) {\n\tif (!this.loaded) {\n\t\tthis.loaded = true;\n\t\tif (!containerOnly) {\n\t\t\tthis.layoutElement();\n\t\t}\n\t}\n\n\treturn this.element;\n};\n\nCell.prototype.getValue = function () {\n\treturn this.value;\n};\n\nCell.prototype.getOldValue = function () {\n\treturn this.oldValue;\n};\n\n//////////////////// Actions ////////////////////\n\nCell.prototype.setValue = function (value, mutate) {\n\n\tvar changed = this.setValueProcessData(value, mutate),\n\t component;\n\n\tif (changed) {\n\t\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\t\t\tthis.table.modules.history.action(\"cellEdit\", this, { oldValue: this.oldValue, newValue: this.value });\n\t\t}\n\n\t\tcomponent = this.getComponent();\n\n\t\tif (this.column.cellEvents.cellEdited) {\n\t\t\tthis.column.cellEvents.cellEdited.call(this.table, component);\n\t\t}\n\n\t\tif (this.table.options.groupUpdateOnCellEdit && this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.reassignRowToGroup(this.row);\n\t\t}\n\n\t\tthis.cellRendered();\n\n\t\tthis.table.options.cellEdited.call(this.table, component);\n\n\t\tif (this.table.options.dataChanged) {\n\t\t\tthis.table.options.dataChanged.call(this.table, this.table.rowManager.getData());\n\t\t}\n\t}\n};\n\nCell.prototype.setValueProcessData = function (value, mutate) {\n\tvar changed = false;\n\n\tif (this.value != value) {\n\n\t\tchanged = true;\n\n\t\tif (mutate) {\n\t\t\tif (this.column.modules.mutate) {\n\t\t\t\tvalue = this.table.modules.mutator.transformCell(this, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.setValueActual(value);\n\n\tif (changed && this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.column.definition.topCalc || this.column.definition.bottomCalc) {\n\t\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\t\tif (this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\") {\n\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tif (this.table.options.columnCalcs != \"table\") {\n\t\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this.row);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changed;\n};\n\nCell.prototype.setValueActual = function (value) {\n\tthis.oldValue = this.value;\n\n\tthis.value = value;\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\t\tthis.table.modules.reactiveData.block();\n\t}\n\n\tthis.column.setFieldValue(this.row.data, value);\n\n\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\t\tthis.table.modules.reactiveData.unblock();\n\t}\n\n\tif (this.loaded) {\n\t\tthis.layoutElement();\n\t}\n};\n\nCell.prototype.layoutElement = function () {\n\tthis._generateContents();\n\tthis._generateTooltip();\n\n\t//set resizable handles\n\tif (this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\") && this.row.type === \"row\") {\n\t\tthis.table.modules.resizeColumns.initializeColumn(\"cell\", this.column, this.element);\n\t}\n\n\tif ((this.column.definition.contextMenu || this.column.definition.clickMenu) && this.table.modExists(\"menu\")) {\n\t\tthis.table.modules.menu.initializeCell(this);\n\t}\n\n\t//handle frozen cells\n\tif (this.table.modExists(\"frozenColumns\")) {\n\t\tthis.table.modules.frozenColumns.layoutElement(this.element, this.column);\n\t}\n};\n\nCell.prototype.setWidth = function () {\n\tthis.width = this.column.width;\n\tthis.element.style.width = this.column.widthStyled;\n};\n\nCell.prototype.clearWidth = function () {\n\tthis.width = \"\";\n\tthis.element.style.width = \"\";\n};\n\nCell.prototype.getWidth = function () {\n\treturn this.width || this.element.offsetWidth;\n};\n\nCell.prototype.setMinWidth = function () {\n\tthis.minWidth = this.column.minWidth;\n\tthis.element.style.minWidth = this.column.minWidthStyled;\n};\n\nCell.prototype.setMaxWidth = function () {\n\tthis.maxWidth = this.column.maxWidth;\n\tthis.element.style.maxWidth = this.column.maxWidthStyled;\n};\n\nCell.prototype.checkHeight = function () {\n\t// var height = this.element.css(\"height\");\n\tthis.row.reinitializeHeight();\n};\n\nCell.prototype.clearHeight = function () {\n\tthis.element.style.height = \"\";\n\tthis.height = null;\n};\n\nCell.prototype.setHeight = function () {\n\tthis.height = this.row.height;\n\tthis.element.style.height = this.row.heightStyled;\n};\n\nCell.prototype.getHeight = function () {\n\treturn this.height || this.element.offsetHeight;\n};\n\nCell.prototype.show = function () {\n\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\n};\n\nCell.prototype.hide = function () {\n\tthis.element.style.display = \"none\";\n};\n\nCell.prototype.edit = function (force) {\n\tif (this.table.modExists(\"edit\", true)) {\n\t\treturn this.table.modules.edit.editCell(this, force);\n\t}\n};\n\nCell.prototype.cancelEdit = function () {\n\tif (this.table.modExists(\"edit\", true)) {\n\t\tvar editing = this.table.modules.edit.getCurrentCell();\n\n\t\tif (editing && editing._getSelf() === this) {\n\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t} else {\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t}\n\t}\n};\n\nCell.prototype.validate = function () {\n\tif (this.column.modules.validate && this.table.modExists(\"validate\", true)) {\n\t\tvar valid = this.table.modules.validate.validate(this.column.modules.validate, this, this.getValue());\n\n\t\treturn valid === true;\n\t} else {\n\t\treturn true;\n\t}\n};\n\nCell.prototype.delete = function () {\n\tif (!this.table.rowManager.redrawBlock && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n\n\tif (this.modules.validate && this.modules.validate.invalid) {\n\t\tthis.table.modules.validate.clearValidation(this);\n\t}\n\n\tif (this.modules.edit && this.modules.edit.edited) {\n\t\tthis.table.modules.edit.clearEdited(this);\n\t}\n\n\tif (this.table.options.history) {\n\t\tthis.table.modules.history.clearComponentHistory(this);\n\t}\n\n\tthis.element = false;\n\tthis.column.deleteCell(this);\n\tthis.row.deleteCell(this);\n\tthis.calcs = {};\n};\n\n//////////////// Navigation /////////////////\n\nCell.prototype.nav = function () {\n\n\tvar self = this,\n\t nextCell = false,\n\t index = this.row.getCellIndex(this);\n\n\treturn {\n\t\tnext: function next() {\n\t\t\tvar nextCell = this.right(),\n\t\t\t nextRow;\n\n\t\t\tif (!nextCell) {\n\t\t\t\tnextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\t\tif (nextRow) {\n\t\t\t\t\tnextCell = nextRow.findNextEditableCell(-1);\n\n\t\t\t\t\tif (nextCell) {\n\t\t\t\t\t\tnextCell.edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tprev: function prev() {\n\t\t\tvar nextCell = this.left(),\n\t\t\t prevRow;\n\n\t\t\tif (!nextCell) {\n\t\t\t\tprevRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\t\tif (prevRow) {\n\t\t\t\t\tnextCell = prevRow.findPrevEditableCell(prevRow.cells.length);\n\n\t\t\t\t\tif (nextCell) {\n\t\t\t\t\t\tnextCell.edit();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tleft: function left() {\n\n\t\t\tnextCell = self.row.findPrevEditableCell(index);\n\n\t\t\tif (nextCell) {\n\t\t\t\tnextCell.edit();\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tright: function right() {\n\t\t\tnextCell = self.row.findNextEditableCell(index);\n\n\t\t\tif (nextCell) {\n\t\t\t\tnextCell.edit();\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tup: function up() {\n\t\t\tvar nextRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\tif (nextRow) {\n\t\t\t\tnextRow.cells[index].edit();\n\t\t\t}\n\t\t},\n\t\tdown: function down() {\n\t\t\tvar nextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\tif (nextRow) {\n\t\t\t\tnextRow.cells[index].edit();\n\t\t\t}\n\t\t}\n\n\t};\n};\n\nCell.prototype.getIndex = function () {\n\tthis.row.getCellIndex(this);\n};\n\n//////////////// Object Generation /////////////////\nCell.prototype.getComponent = function () {\n\n\tif (!this.component) {\n\t\tthis.component = new CellComponent(this);\n\t}\n\n\treturn this.component;\n};\nvar FooterManager = function FooterManager(table) {\n\tthis.table = table;\n\tthis.active = false;\n\tthis.element = this.createElement(); //containing element\n\tthis.external = false;\n\tthis.links = [];\n\n\tthis._initialize();\n};\n\nFooterManager.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-footer\");\n\n\treturn el;\n};\n\nFooterManager.prototype._initialize = function (element) {\n\tif (this.table.options.footerElement) {\n\n\t\tswitch (_typeof(this.table.options.footerElement)) {\n\t\t\tcase \"string\":\n\n\t\t\t\tif (this.table.options.footerElement[0] === \"<\") {\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\n\t\t\t\t} else {\n\t\t\t\t\tthis.external = true;\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.element = this.table.options.footerElement;\n\t\t\t\tbreak;\n\t\t}\n\t}\n};\n\nFooterManager.prototype.getElement = function () {\n\treturn this.element;\n};\n\nFooterManager.prototype.append = function (element, parent) {\n\tthis.activate(parent);\n\n\tthis.element.appendChild(element);\n\tthis.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.prepend = function (element, parent) {\n\tthis.activate(parent);\n\n\tthis.element.insertBefore(element, this.element.firstChild);\n\tthis.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.remove = function (element) {\n\telement.parentNode.removeChild(element);\n\tthis.deactivate();\n};\n\nFooterManager.prototype.deactivate = function (force) {\n\tif (!this.element.firstChild || force) {\n\t\tif (!this.external) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t\tthis.active = false;\n\t}\n\n\t// this.table.rowManager.adjustTableSize();\n};\n\nFooterManager.prototype.activate = function (parent) {\n\tif (!this.active) {\n\t\tthis.active = true;\n\t\tif (!this.external) {\n\t\t\tthis.table.element.appendChild(this.getElement());\n\t\t\tthis.table.element.style.display = '';\n\t\t}\n\t}\n\n\tif (parent) {\n\t\tthis.links.push(parent);\n\t}\n};\n\nFooterManager.prototype.redraw = function () {\n\tthis.links.forEach(function (link) {\n\t\tlink.footerRedraw();\n\t});\n};\n\nvar Tabulator = function Tabulator(element, options) {\n\n\tthis.options = {};\n\n\tthis.columnManager = null; // hold Column Manager\n\tthis.rowManager = null; //hold Row Manager\n\tthis.footerManager = null; //holder Footer Manager\n\tthis.vdomHoz = null; //holder horizontal virtual dom\n\n\n\tthis.browser = \"\"; //hold current browser type\n\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\n\tthis.rtl = false; //check if the table is in RTL mode\n\n\tthis.modules = {}; //hold all modules bound to this table\n\n\tif (this.initializeElement(element)) {\n\t\tthis.initializeOptions(options || {});\n\t\tthis._create();\n\t}\n\n\tTabulator.prototype.comms.register(this); //register table for inderdevice communication\n};\n\n//default setup options\nTabulator.prototype.defaultOptions = {\n\n\theight: false, //height of tabulator\n\tminHeight: false, //minimum height of tabulator\n\tmaxHeight: false, //maximum height of tabulator\n\n\tlayout: \"fitData\", ///layout type \"fitColumns\" | \"fitData\"\n\tlayoutColumnsOnNewData: false, //update column widths on setData\n\n\tcolumnMinWidth: 40, //minimum global width for a column\n\tcolumnMaxWidth: false, //minimum global width for a column\n\tcolumnHeaderVertAlign: \"top\", //vertical alignment of column headers\n\tcolumnVertAlign: false, // DEPRECATED - Left to allow warning\n\n\tresizableColumns: true, //resizable columns\n\tresizableRows: false, //resizable rows\n\tautoResize: true, //auto resize table\n\n\tcolumns: [], //store for colum header info\n\n\tcellHozAlign: \"\", //horizontal align columns\n\tcellVertAlign: \"\", //vertical align columns\n\theaderHozAlign: \"\", //horizontal header alignment\n\n\n\tdata: [], //default starting data\n\n\tautoColumns: false, //build columns from data row structure\n\tautoColumnsDefinitions: false,\n\n\treactiveData: false, //enable data reactivity\n\n\tnestedFieldSeparator: \".\", //seperatpr for nested data\n\n\ttooltips: false, //Tool tip value\n\ttooltipsHeader: false, //Tool tip for headers\n\ttooltipGenerationMode: \"load\", //when to generate tooltips\n\n\tinitialSort: false, //initial sorting criteria\n\tinitialFilter: false, //initial filtering criteria\n\tinitialHeaderFilter: false, //initial header filtering criteria\n\n\tcolumnHeaderSortMulti: true, //multiple or single column sorting\n\n\tsortOrderReverse: false, //reverse internal sort ordering\n\n\theaderSort: true, //set default global header sort\n\theaderSortTristate: false, //set default tristate header sorting\n\theaderSortElement: \"<div class='tabulator-arrow'></div>\", //header sort element\n\n\tfooterElement: false, //hold footer element\n\n\tindex: \"id\", //filed for row index\n\n\ttextDirection: \"auto\",\n\n\tkeybindings: [], //array for keybindings\n\n\ttabEndNewRow: false, //create new row when tab to end of table\n\n\tinvalidOptionWarnings: true, //allow toggling of invalid option warnings\n\n\tclipboard: false, //enable clipboard\n\tclipboardCopyStyled: true, //formatted table data\n\tclipboardCopyConfig: false, //clipboard config\n\tclipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0\n\tclipboardCopyRowRange: \"active\", //restrict clipboard to visible rows only\n\tclipboardPasteParser: \"table\", //convert pasted clipboard data to rows\n\tclipboardPasteAction: \"insert\", //how to insert pasted data into the table\n\n\tclipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard\n\tclipboardPasted: function clipboardPasted() {}, //data has been pasted into the table\n\tclipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table\n\n\tdownloadDataFormatter: false, //function to manipulate table data before it is downloaded\n\tdownloadReady: function downloadReady(data, blob) {\n\t\treturn blob;\n\t}, //function to manipulate download data\n\tdownloadComplete: false, //function to manipulate download data\n\tdownloadConfig: {}, //download config\n\tdownloadRowRange: \"active\", //restrict download to active rows only\n\n\tdataTree: false, //enable data tree\n\tdataTreeFilter: true, //filter child rows\n\tdataTreeSort: true, //sort child rows\n\tdataTreeElementColumn: false,\n\tdataTreeBranchElement: true, //show data tree branch element\n\tdataTreeChildIndent: 9, //data tree child indent in px\n\tdataTreeChildField: \"_children\", //data tre column field to look for child rows\n\tdataTreeCollapseElement: false, //data tree row collapse element\n\tdataTreeExpandElement: false, //data tree row expand element\n\tdataTreeStartExpanded: false,\n\tdataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded\n\tdataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed\n\tdataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations\n\tdataTreeSelectPropagate: false, //seleccting a parent row selects its children\n\n\tprintAsHtml: false, //enable print as html\n\tprintFormatter: false, //printing page formatter\n\tprintHeader: false, //page header contents\n\tprintFooter: false, //page footer contents\n\tprintCopyStyle: true, //DEPRICATED - REMOVE in 5.0\n\tprintStyled: true, //enable print as html styling\n\tprintVisibleRows: true, //DEPRICATED - REMOVE in 5.0\n\tprintRowRange: \"visible\", //restrict print to visible rows only\n\tprintConfig: {}, //print config options\n\n\taddRowPos: \"bottom\", //position to insert blank rows, top|bottom\n\n\tselectable: \"highlight\", //highlight rows on hover\n\tselectableRangeMode: \"drag\", //highlight rows on hover\n\tselectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached\n\tselectablePersistence: true, // maintain selection when table view is updated\n\tselectableCheck: function selectableCheck(data, row) {\n\t\treturn true;\n\t}, //check wheather row is selectable\n\n\theaderFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter\n\theaderFilterPlaceholder: false, //placeholder text to display in header filters\n\n\theaderVisible: true, //hide header\n\n\thistory: false, //enable edit history\n\n\tlocale: false, //current system language\n\tlangs: {},\n\n\tvirtualDom: true, //enable DOM virtualization\n\tvirtualDomBuffer: 0, // set virtual DOM buffer size\n\tvirtualDomHoz: false, //enable horizontal DOM virtualization\n\n\tpersistentLayout: false, //DEPRICATED - REMOVE in 5.0\n\tpersistentSort: false, //DEPRICATED - REMOVE in 5.0\n\tpersistentFilter: false, //DEPRICATED - REMOVE in 5.0\n\tpersistenceID: \"\", //key for persistent storage\n\tpersistenceMode: true, //mode for storing persistence information\n\tpersistenceReaderFunc: false, //function for handling persistence data reading\n\tpersistenceWriterFunc: false, //function for handling persistence data writing\n\n\tpersistence: false,\n\n\tresponsiveLayout: false, //responsive layout flags\n\tresponsiveLayoutCollapseStartOpen: true, //start showing collapsed data\n\tresponsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter\n\tresponsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter\n\n\tpagination: false, //set pagination type\n\tpaginationSize: false, //set number of rows to a page\n\tpaginationInitialPage: 1, //initail page to show on load\n\tpaginationButtonCount: 5, // set count of page button\n\tpaginationSizeSelector: false, //add pagination size selector element\n\tpaginationElement: false, //element to hold pagination numbers\n\tpaginationDataSent: {}, //pagination data sent to the server\n\tpaginationDataReceived: {}, //pagination data received from the server\n\tpaginationAddRow: \"page\", //add rows on table or page\n\n\tajaxURL: false, //url for ajax loading\n\tajaxURLGenerator: false,\n\tajaxParams: {}, //params for ajax loading\n\tajaxConfig: \"get\", //ajax request type\n\tajaxContentType: \"form\", //ajax request type\n\tajaxRequestFunc: false, //promise function\n\tajaxLoader: true, //show loader\n\tajaxLoaderLoading: false, //loader element\n\tajaxLoaderError: false, //loader element\n\tajaxFiltering: false,\n\tajaxSorting: false,\n\tajaxProgressiveLoad: false, //progressive loading\n\tajaxProgressiveLoadDelay: 0, //delay between requests\n\tajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins\n\n\tgroupBy: false, //enable table grouping and set field to group by\n\tgroupStartOpen: true, //starting state of group\n\tgroupValues: false,\n\tgroupUpdateOnCellEdit: false,\n\n\tgroupHeader: false, //header generation function\n\tgroupHeaderPrint: null,\n\tgroupHeaderClipboard: null,\n\tgroupHeaderHtmlOutput: null,\n\tgroupHeaderDownload: null,\n\n\thtmlOutputConfig: false, //html outypu config\n\n\tmovableColumns: false, //enable movable columns\n\n\tmovableRows: false, //enable movable rows\n\tmovableRowsConnectedTables: false, //tables for movable rows to be connected to\n\tmovableRowsConnectedElements: false, //other elements for movable rows to be connected to\n\tmovableRowsSender: false,\n\tmovableRowsReceiver: \"insert\",\n\tmovableRowsSendingStart: function movableRowsSendingStart() {},\n\tmovableRowsSent: function movableRowsSent() {},\n\tmovableRowsSentFailed: function movableRowsSentFailed() {},\n\tmovableRowsSendingStop: function movableRowsSendingStop() {},\n\tmovableRowsReceivingStart: function movableRowsReceivingStart() {},\n\tmovableRowsReceived: function movableRowsReceived() {},\n\tmovableRowsReceivedFailed: function movableRowsReceivedFailed() {},\n\tmovableRowsReceivingStop: function movableRowsReceivingStop() {},\n\tmovableRowsElementDrop: function movableRowsElementDrop() {},\n\n\tscrollToRowPosition: \"top\",\n\tscrollToRowIfVisible: true,\n\n\tscrollToColumnPosition: \"left\",\n\tscrollToColumnIfVisible: true,\n\n\trowFormatter: false,\n\trowFormatterPrint: null,\n\trowFormatterClipboard: null,\n\trowFormatterHtmlOutput: null,\n\n\tplaceholder: false,\n\n\t//table building callbacks\n\ttableBuilding: function tableBuilding() {},\n\ttableBuilt: function tableBuilt() {},\n\n\t//render callbacks\n\trenderStarted: function renderStarted() {},\n\trenderComplete: function renderComplete() {},\n\n\t//row callbacks\n\trowClick: false,\n\trowDblClick: false,\n\trowContext: false,\n\trowTap: false,\n\trowDblTap: false,\n\trowTapHold: false,\n\trowMouseEnter: false,\n\trowMouseLeave: false,\n\trowMouseOver: false,\n\trowMouseOut: false,\n\trowMouseMove: false,\n\trowContextMenu: false,\n\trowClickMenu: false,\n\trowAdded: function rowAdded() {},\n\trowDeleted: function rowDeleted() {},\n\trowMoved: function rowMoved() {},\n\trowUpdated: function rowUpdated() {},\n\trowSelectionChanged: function rowSelectionChanged() {},\n\trowSelected: function rowSelected() {},\n\trowDeselected: function rowDeselected() {},\n\trowResized: function rowResized() {},\n\n\t//cell callbacks\n\t//row callbacks\n\tcellClick: false,\n\tcellDblClick: false,\n\tcellContext: false,\n\tcellTap: false,\n\tcellDblTap: false,\n\tcellTapHold: false,\n\tcellMouseEnter: false,\n\tcellMouseLeave: false,\n\tcellMouseOver: false,\n\tcellMouseOut: false,\n\tcellMouseMove: false,\n\tcellEditing: function cellEditing() {},\n\tcellEdited: function cellEdited() {},\n\tcellEditCancelled: function cellEditCancelled() {},\n\n\t//column callbacks\n\tcolumnMoved: false,\n\tcolumnResized: function columnResized() {},\n\tcolumnTitleChanged: function columnTitleChanged() {},\n\tcolumnVisibilityChanged: function columnVisibilityChanged() {},\n\n\t//HTML iport callbacks\n\thtmlImporting: function htmlImporting() {},\n\thtmlImported: function htmlImported() {},\n\n\t//data callbacks\n\tdataLoading: function dataLoading() {},\n\tdataLoaded: function dataLoaded() {},\n\tdataEdited: false, //DEPRECATED\n\tdataChanged: false,\n\n\t//ajax callbacks\n\tajaxRequesting: function ajaxRequesting() {},\n\tajaxResponse: false,\n\tajaxError: function ajaxError() {},\n\n\t//filtering callbacks\n\tdataFiltering: false,\n\tdataFiltered: false,\n\n\t//sorting callbacks\n\tdataSorting: function dataSorting() {},\n\tdataSorted: function dataSorted() {},\n\n\t//grouping callbacks\n\tgroupToggleElement: \"arrow\",\n\tgroupClosedShowCalcs: false,\n\tdataGrouping: function dataGrouping() {},\n\tdataGrouped: false,\n\tgroupVisibilityChanged: function groupVisibilityChanged() {},\n\tgroupClick: false,\n\tgroupDblClick: false,\n\tgroupContext: false,\n\tgroupContextMenu: false,\n\tgroupClickMenu: false,\n\tgroupTap: false,\n\tgroupDblTap: false,\n\tgroupTapHold: false,\n\n\tcolumnCalcs: true,\n\n\t//pagination callbacks\n\tpageLoaded: function pageLoaded() {},\n\n\t//localization callbacks\n\tlocalized: function localized() {},\n\n\t//validation callbacks\n\tvalidationMode: \"blocking\",\n\tvalidationFailed: function validationFailed() {},\n\n\t//history callbacks\n\thistoryUndo: function historyUndo() {},\n\thistoryRedo: function historyRedo() {},\n\n\t//scroll callbacks\n\tscrollHorizontal: function scrollHorizontal() {},\n\tscrollVertical: function scrollVertical() {}\n};\n\nTabulator.prototype.initializeOptions = function (options) {\n\n\t//warn user if option is not available\n\tif (options.invalidOptionWarnings !== false) {\n\t\tfor (var key in options) {\n\t\t\tif (typeof this.defaultOptions[key] === \"undefined\") {\n\t\t\t\tconsole.warn(\"Invalid table constructor option:\", key);\n\t\t\t}\n\t\t}\n\t}\n\n\t//assign options to table\n\tfor (var key in this.defaultOptions) {\n\t\tif (key in options) {\n\t\t\tthis.options[key] = options[key];\n\t\t} else {\n\t\t\tif (Array.isArray(this.defaultOptions[key])) {\n\t\t\t\tthis.options[key] = Object.assign([], this.defaultOptions[key]);\n\t\t\t} else if (_typeof(this.defaultOptions[key]) === \"object\" && this.defaultOptions[key] !== null) {\n\t\t\t\tthis.options[key] = Object.assign({}, this.defaultOptions[key]);\n\t\t\t} else {\n\t\t\t\tthis.options[key] = this.defaultOptions[key];\n\t\t\t}\n\t\t}\n\t}\n};\n\nTabulator.prototype.initializeElement = function (element) {\n\n\tif (typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement) {\n\t\tthis.element = element;\n\t\treturn true;\n\t} else if (typeof element === \"string\") {\n\t\tthis.element = document.querySelector(element);\n\n\t\tif (this.element) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.rtlCheck = function () {\n\tvar style = window.getComputedStyle(this.element);\n\n\tswitch (this.options.textDirection) {\n\t\tcase \"auto\":\n\t\t\tif (style.direction !== \"rtl\") {\n\t\t\t\tbreak;\n\t\t\t};\n\n\t\tcase \"rtl\":\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\n\t\t\tthis.rtl = true;\n\t\t\tbreak;\n\n\t\tcase \"ltr\":\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\n\n\t\tdefault:\n\t\t\tthis.rtl = false;\n\t}\n};\n\n//convert depricated functionality to new functions\nTabulator.prototype._mapDepricatedFunctionality = function () {\n\n\t//map depricated persistance setup options\n\tif (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {\n\t\tif (!this.options.persistence) {\n\t\t\tthis.options.persistence = {};\n\t\t}\n\t}\n\n\tif (this.options.dataEdited) {\n\t\tconsole.warn(\"DEPRECATION WARNING - dataEdited option has been deprecated, please use the dataChanged option instead\");\n\t\tthis.options.dataChanged = this.options.dataEdited;\n\t}\n\n\tif (this.options.downloadDataFormatter) {\n\t\tconsole.warn(\"DEPRECATION WARNING - downloadDataFormatter option has been deprecated\");\n\t}\n\n\tif (typeof this.options.clipboardCopyHeader !== \"undefined\") {\n\t\tthis.options.columnHeaders = this.options.clipboardCopyHeader;\n\t\tconsole.warn(\"DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option\");\n\t}\n\n\tif (this.options.printVisibleRows !== true) {\n\t\tconsole.warn(\"printVisibleRows option is deprecated, you should now use the printRowRange option\");\n\n\t\tthis.options.persistence.printRowRange = \"active\";\n\t}\n\n\tif (this.options.printCopyStyle !== true) {\n\t\tconsole.warn(\"printCopyStyle option is deprecated, you should now use the printStyled option\");\n\n\t\tthis.options.persistence.printStyled = this.options.printCopyStyle;\n\t}\n\n\tif (this.options.persistentLayout) {\n\t\tconsole.warn(\"persistentLayout option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.columns === \"undefined\") {\n\t\t\tthis.options.persistence.columns = true;\n\t\t}\n\t}\n\n\tif (this.options.persistentSort) {\n\t\tconsole.warn(\"persistentSort option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.sort === \"undefined\") {\n\t\t\tthis.options.persistence.sort = true;\n\t\t}\n\t}\n\n\tif (this.options.persistentFilter) {\n\t\tconsole.warn(\"persistentFilter option is deprecated, you should now use the persistence option\");\n\n\t\tif (this.options.persistence !== true && typeof this.options.persistence.filter === \"undefined\") {\n\t\t\tthis.options.persistence.filter = true;\n\t\t}\n\t}\n\n\tif (this.options.columnVertAlign) {\n\t\tconsole.warn(\"columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option\");\n\n\t\tthis.options.columnHeaderVertAlign = this.options.columnVertAlign;\n\t}\n};\n\nTabulator.prototype._clearSelection = function () {\n\n\tthis.element.classList.add(\"tabulator-block-select\");\n\n\tif (window.getSelection) {\n\t\tif (window.getSelection().empty) {\n\t\t\t// Chrome\n\t\t\twindow.getSelection().empty();\n\t\t} else if (window.getSelection().removeAllRanges) {\n\t\t\t// Firefox\n\t\t\twindow.getSelection().removeAllRanges();\n\t\t}\n\t} else if (document.selection) {\n\t\t// IE?\n\t\tdocument.selection.empty();\n\t}\n\n\tthis.element.classList.remove(\"tabulator-block-select\");\n};\n\n//concreate table\nTabulator.prototype._create = function () {\n\tthis._clearObjectPointers();\n\n\tthis._mapDepricatedFunctionality();\n\n\tthis.bindModules();\n\n\tthis.rtlCheck();\n\n\tif (this.element.tagName === \"TABLE\") {\n\t\tif (this.modExists(\"htmlTableImport\", true)) {\n\t\t\tthis.modules.htmlTableImport.parseTable();\n\t\t}\n\t}\n\n\tthis.columnManager = new ColumnManager(this);\n\tthis.rowManager = new RowManager(this);\n\tthis.footerManager = new FooterManager(this);\n\n\tthis.columnManager.setRowManager(this.rowManager);\n\tthis.rowManager.setColumnManager(this.columnManager);\n\n\tif (this.options.virtualDomHoz) {\n\t\tthis.vdomHoz = new VDomHoz(this);\n\t}\n\n\tthis._buildElement();\n\n\tthis._loadInitialData();\n};\n\n//clear pointers to objects in default config object\nTabulator.prototype._clearObjectPointers = function () {\n\tthis.options.columns = this.options.columns.slice(0);\n\n\tif (!this.options.reactiveData) {\n\t\tthis.options.data = this.options.data.slice(0);\n\t}\n};\n\n//build tabulator element\nTabulator.prototype._buildElement = function () {\n\tvar _this24 = this;\n\n\tvar element = this.element,\n\t mod = this.modules,\n\t options = this.options;\n\n\toptions.tableBuilding.call(this);\n\n\telement.classList.add(\"tabulator\");\n\telement.setAttribute(\"role\", \"grid\");\n\n\t//empty element\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t} //set table height\n\tif (options.height) {\n\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\t\telement.style.height = options.height;\n\t}\n\n\t//set table min height\n\tif (options.minHeight !== false) {\n\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\t\telement.style.minHeight = options.minHeight;\n\t}\n\n\t//set table maxHeight\n\tif (options.maxHeight !== false) {\n\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\t\telement.style.maxHeight = options.maxHeight;\n\t}\n\n\tthis.columnManager.initialize();\n\tthis.rowManager.initialize();\n\n\tthis._detectBrowser();\n\n\tif (this.modExists(\"layout\", true)) {\n\t\tmod.layout.initialize(options.layout);\n\t}\n\n\t//set localization\n\n\tmod.localize.initialize();\n\n\tif (options.headerFilterPlaceholder !== false) {\n\t\tmod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);\n\t}\n\n\tfor (var locale in options.langs) {\n\t\tmod.localize.installLang(locale, options.langs[locale]);\n\t}\n\n\tmod.localize.setLocale(options.locale);\n\n\t//configure placeholder element\n\tif (typeof options.placeholder == \"string\") {\n\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-placeholder\");\n\n\t\tvar span = document.createElement(\"span\");\n\t\tspan.innerHTML = options.placeholder;\n\n\t\tel.appendChild(span);\n\n\t\toptions.placeholder = el;\n\t}\n\n\t//build table elements\n\telement.appendChild(this.columnManager.getElement());\n\telement.appendChild(this.rowManager.getElement());\n\n\tif (options.footerElement) {\n\t\tthis.footerManager.activate();\n\t}\n\n\tif (options.persistence && this.modExists(\"persistence\", true)) {\n\t\tmod.persistence.initialize();\n\t}\n\n\tif (options.movableRows && this.modExists(\"moveRow\")) {\n\t\tmod.moveRow.initialize();\n\t}\n\n\tif (options.autoColumns && this.options.data) {\n\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t}\n\n\tif (this.modExists(\"columnCalcs\")) {\n\t\tmod.columnCalcs.initialize();\n\t}\n\n\tthis.columnManager.setColumns(options.columns);\n\n\tif (options.dataTree && this.modExists(\"dataTree\", true)) {\n\t\tmod.dataTree.initialize();\n\t}\n\n\tif (this.modExists(\"frozenRows\")) {\n\t\tthis.modules.frozenRows.initialize();\n\t}\n\n\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort || options.initialSort) && this.modExists(\"sort\", true)) {\n\t\tvar sorters = [];\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort) {\n\t\t\tsorters = mod.persistence.load(\"sort\");\n\n\t\t\tif (sorters === false && options.initialSort) {\n\t\t\t\tsorters = options.initialSort;\n\t\t\t}\n\t\t} else if (options.initialSort) {\n\t\t\tsorters = options.initialSort;\n\t\t}\n\n\t\tmod.sort.setSort(sorters);\n\t}\n\n\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists(\"filter\", true)) {\n\t\tvar filters = [];\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter) {\n\t\t\tfilters = mod.persistence.load(\"filter\");\n\n\t\t\tif (filters === false && options.initialFilter) {\n\t\t\t\tfilters = options.initialFilter;\n\t\t\t}\n\t\t} else if (options.initialFilter) {\n\t\t\tfilters = options.initialFilter;\n\t\t}\n\n\t\tmod.filter.setFilter(filters);\n\t}\n\n\tif (options.initialHeaderFilter && this.modExists(\"filter\", true)) {\n\t\toptions.initialHeaderFilter.forEach(function (item) {\n\n\t\t\tvar column = _this24.columnManager.findColumn(item.field);\n\n\t\t\tif (column) {\n\t\t\t\tmod.filter.setHeaderFilterValue(column, item.value);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t}\n\n\tif (this.modExists(\"ajax\")) {\n\t\tmod.ajax.initialize();\n\t}\n\n\tif (options.pagination && this.modExists(\"page\", true)) {\n\t\tmod.page.initialize();\n\t}\n\n\tif (options.groupBy && this.modExists(\"groupRows\", true)) {\n\t\tmod.groupRows.initialize();\n\t}\n\n\tif (this.modExists(\"keybindings\")) {\n\t\tmod.keybindings.initialize();\n\t}\n\n\tif (this.modExists(\"selectRow\")) {\n\t\tmod.selectRow.clearSelectionData(true);\n\t}\n\n\tif (options.autoResize && this.modExists(\"resizeTable\")) {\n\t\tmod.resizeTable.initialize();\n\t}\n\n\tif (this.modExists(\"clipboard\")) {\n\t\tmod.clipboard.initialize();\n\t}\n\n\tif (options.printAsHtml && this.modExists(\"print\")) {\n\t\tmod.print.initialize();\n\t}\n\n\toptions.tableBuilt.call(this);\n};\n\nTabulator.prototype._loadInitialData = function () {\n\tvar self = this;\n\n\tif (self.options.pagination && self.modExists(\"page\")) {\n\t\tself.modules.page.reset(true, true);\n\n\t\tif (self.options.pagination == \"local\") {\n\t\t\tif (self.options.data.length) {\n\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t} else {\n\t\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\t\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {\n\t\t\t\t\t\tif (self.options.paginationInitialPage) {\n\t\t\t\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn;\n\t\t\t\t} else {\n\t\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (self.options.paginationInitialPage) {\n\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.options.ajaxURL) {\n\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});\n\t\t\t} else {\n\t\t\t\tself.rowManager.setData([], false, true);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (self.options.data.length) {\n\t\t\tself.rowManager.setData(self.options.data);\n\t\t} else {\n\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});\n\t\t\t} else {\n\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//deconstructor\nTabulator.prototype.destroy = function () {\n\tvar element = this.element;\n\n\tTabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication\n\n\tif (this.options.reactiveData && this.modExists(\"reactiveData\", true)) {\n\t\tthis.modules.reactiveData.unwatchData();\n\t}\n\n\t//clear row data\n\tthis.rowManager.rows.forEach(function (row) {\n\t\trow.wipe();\n\t});\n\n\tthis.rowManager.rows = [];\n\tthis.rowManager.activeRows = [];\n\tthis.rowManager.displayRows = [];\n\n\t//clear event bindings\n\tif (this.options.autoResize && this.modExists(\"resizeTable\")) {\n\t\tthis.modules.resizeTable.clearBindings();\n\t}\n\n\tif (this.modExists(\"keybindings\")) {\n\t\tthis.modules.keybindings.clearBindings();\n\t}\n\n\t//clear DOM\n\twhile (element.firstChild) {\n\t\telement.removeChild(element.firstChild);\n\t}element.classList.remove(\"tabulator\");\n};\n\nTabulator.prototype._detectBrowser = function () {\n\tvar ua = navigator.userAgent || navigator.vendor || window.opera;\n\n\tif (ua.indexOf(\"Trident\") > -1) {\n\t\tthis.browser = \"ie\";\n\t\tthis.browserSlow = true;\n\t} else if (ua.indexOf(\"Edge\") > -1) {\n\t\tthis.browser = \"edge\";\n\t\tthis.browserSlow = true;\n\t} else if (ua.indexOf(\"Firefox\") > -1) {\n\t\tthis.browser = \"firefox\";\n\t\tthis.browserSlow = false;\n\t} else {\n\t\tthis.browser = \"other\";\n\t\tthis.browserSlow = false;\n\t}\n\n\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0, 4));\n};\n\n////////////////// Data Handling //////////////////\n\n//block table redrawing\nTabulator.prototype.blockRedraw = function () {\n\treturn this.rowManager.blockRedraw();\n};\n\n//restore table redrawing\nTabulator.prototype.restoreRedraw = function () {\n\treturn this.rowManager.restoreRedraw();\n};\n\n//local data from local file\nTabulator.prototype.setDataFromLocalFile = function (extensions) {\n\tvar _this25 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar input = document.createElement(\"input\");\n\t\tinput.type = \"file\";\n\t\tinput.accept = extensions || \".json,application/json\";\n\n\t\tinput.addEventListener(\"change\", function (e) {\n\t\t\tvar file = input.files[0],\n\t\t\t reader = new FileReader(),\n\t\t\t data;\n\n\t\t\treader.readAsText(file);\n\n\t\t\treader.onload = function (e) {\n\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(reader.result);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\n\t\t\t\t\treject(e);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_this25.setData(data).then(function (data) {\n\t\t\t\t\tresolve(data);\n\t\t\t\t}).catch(function (err) {\n\t\t\t\t\tresolve(err);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\treader.onerror = function (e) {\n\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\t\t\t\treject();\n\t\t\t};\n\t\t});\n\n\t\tinput.click();\n\t});\n};\n\n//load data\nTabulator.prototype.setData = function (data, params, config) {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\treturn this._setData(data, params, config, false, true);\n};\n\nTabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {\n\tvar self = this;\n\n\tif (typeof data === \"string\") {\n\t\tif (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0) {\n\t\t\t//data is a json encoded string\n\t\t\treturn self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);\n\t\t} else {\n\n\t\t\tif (self.modExists(\"ajax\", true)) {\n\t\t\t\tif (params) {\n\t\t\t\t\tself.modules.ajax.setParams(params);\n\t\t\t\t}\n\n\t\t\t\tif (config) {\n\t\t\t\t\tself.modules.ajax.setConfig(config);\n\t\t\t\t}\n\n\t\t\t\tself.modules.ajax.setUrl(data);\n\n\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\t\t\t\t\tself.modules.page.reset(true, true);\n\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t} else {\n\t\t\t\t\t//assume data is url, make ajax call to url to get data\n\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (data) {\n\t\t\t//asume data is already an object\n\t\t\treturn self.rowManager.setData(data, inPosition, columnsChanged);\n\t\t} else {\n\n\t\t\t//no data provided, check if ajaxURL is present;\n\t\t\tif (self.modExists(\"ajax\") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {\n\n\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\t\t\t\t\tself.modules.page.reset(true, true);\n\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t} else {\n\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//empty data\n\t\t\t\treturn self.rowManager.setData([], inPosition, columnsChanged);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//clear data\nTabulator.prototype.clearData = function () {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\tthis.rowManager.clearData();\n};\n\n//get table data array\nTabulator.prototype.getData = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getData function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getData(active);\n};\n\n//get table data array count\nTabulator.prototype.getDataCount = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getDataCount(active);\n};\n\n//search for specific row components\nTabulator.prototype.searchRows = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.search(\"rows\", field, type, value);\n\t}\n};\n\n//search for specific data\nTabulator.prototype.searchData = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.search(\"data\", field, type, value);\n\t}\n};\n\n//get table html\nTabulator.prototype.getHtml = function (visible, style, config) {\n\tif (this.modExists(\"export\", true)) {\n\t\treturn this.modules.export.getHtml(visible, style, config);\n\t}\n};\n\n//get print html\nTabulator.prototype.print = function (visible, style, config) {\n\tif (this.modExists(\"print\", true)) {\n\t\treturn this.modules.print.printFullscreen(visible, style, config);\n\t}\n};\n\n//retrieve Ajax URL\nTabulator.prototype.getAjaxUrl = function () {\n\tif (this.modExists(\"ajax\", true)) {\n\t\treturn this.modules.ajax.getUrl();\n\t}\n};\n\n//replace data, keeping table in position with same sort\nTabulator.prototype.replaceData = function (data, params, config) {\n\tif (this.modExists(\"ajax\")) {\n\t\tthis.modules.ajax.blockActiveRequest();\n\t}\n\n\treturn this._setData(data, params, config, true);\n};\n\n//update table data\nTabulator.prototype.updateData = function (data) {\n\tvar _this26 = this;\n\n\tvar self = this;\n\tvar responses = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this26.modExists(\"ajax\")) {\n\t\t\t_this26.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\tif (row) {\n\t\t\t\t\tresponses++;\n\n\t\t\t\t\trow.updateData(item).then(function () {\n\t\t\t\t\t\tresponses--;\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\nTabulator.prototype.addData = function (data, pos, index) {\n\tvar _this27 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this27.modExists(\"ajax\")) {\n\t\t\t_this27.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\t_this27.rowManager.addRows(data, pos, index).then(function (rows) {\n\t\t\t\tvar output = [];\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t});\n\n\t\t\t\tresolve(output);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\n//update table data\nTabulator.prototype.updateOrAddData = function (data) {\n\tvar _this28 = this;\n\n\tvar self = this,\n\t rows = [],\n\t responses = 0;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this28.modExists(\"ajax\")) {\n\t\t\t_this28.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (data) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\tresponses++;\n\n\t\t\t\tif (row) {\n\t\t\t\t\trow.updateData(item).then(function () {\n\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\trows.push(row.getComponent());\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tself.rowManager.addRows(item).then(function (newRows) {\n\t\t\t\t\t\tresponses--;\n\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\n\t\t\t\t\t\tif (!responses) {\n\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No data provided\");\n\t\t\treject(\"Update Error - No data provided\");\n\t\t}\n\t});\n};\n\n//get row object\nTabulator.prototype.getRow = function (index) {\n\tvar row = this.rowManager.findRow(index);\n\n\tif (row) {\n\t\treturn row.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\t\treturn false;\n\t}\n};\n\n//get row object\nTabulator.prototype.getRowFromPosition = function (position, active) {\n\tvar row = this.rowManager.getRowFromPosition(position, active);\n\n\tif (row) {\n\t\treturn row.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\t\treturn false;\n\t}\n};\n\n//delete row from table\nTabulator.prototype.deleteRow = function (index) {\n\tvar _this29 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar self = _this29,\n\t\t count = 0,\n\t\t successCount = 0,\n\t\t foundRows = [];\n\n\t\tfunction doneCheck() {\n\t\t\tcount++;\n\n\t\t\tif (count == index.length) {\n\t\t\t\tif (successCount) {\n\t\t\t\t\tself.rowManager.reRenderInPosition();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!Array.isArray(index)) {\n\t\t\tindex = [index];\n\t\t}\n\n\t\t//find matching rows\n\t\tindex.forEach(function (item) {\n\t\t\tvar row = _this29.rowManager.findRow(item, true);\n\n\t\t\tif (row) {\n\t\t\t\tfoundRows.push(row);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\n\t\t\t\treject(\"Delete Error - No matching row found\");\n\t\t\t\tdoneCheck();\n\t\t\t}\n\t\t});\n\n\t\t//sort rows into correct order to ensure smooth delete from table\n\t\tfoundRows.sort(function (a, b) {\n\t\t\treturn _this29.rowManager.rows.indexOf(a) > _this29.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t});\n\n\t\tfoundRows.forEach(function (row) {\n\t\t\trow.delete().then(function () {\n\t\t\t\tsuccessCount++;\n\t\t\t\tdoneCheck();\n\t\t\t}).catch(function (err) {\n\t\t\t\tdoneCheck();\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t});\n};\n\n//add row to table\nTabulator.prototype.addRow = function (data, pos, index) {\n\tvar _this30 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\t_this30.rowManager.addRows(data, pos, index).then(function (rows) {\n\t\t\t//recalc column calculations if present\n\t\t\tif (_this30.modExists(\"columnCalcs\")) {\n\t\t\t\t_this30.modules.columnCalcs.recalc(_this30.rowManager.activeRows);\n\t\t\t}\n\n\t\t\tresolve(rows[0].getComponent());\n\t\t});\n\t});\n};\n\n//update a row if it exitsts otherwise create it\nTabulator.prototype.updateOrAddRow = function (index, data) {\n\tvar _this31 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this31.rowManager.findRow(index);\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (row) {\n\t\t\trow.updateData(data).then(function () {\n\t\t\t\t//recalc column calculations if present\n\t\t\t\tif (_this31.modExists(\"columnCalcs\")) {\n\t\t\t\t\t_this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tresolve(row.getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\trow = _this31.rowManager.addRows(data).then(function (rows) {\n\t\t\t\t//recalc column calculations if present\n\t\t\t\tif (_this31.modExists(\"columnCalcs\")) {\n\t\t\t\t\t_this31.modules.columnCalcs.recalc(_this31.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tresolve(rows[0].getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t}\n\t});\n};\n\n//update row data\nTabulator.prototype.updateRow = function (index, data) {\n\tvar _this32 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this32.rowManager.findRow(index);\n\n\t\tif (typeof data === \"string\") {\n\t\t\tdata = JSON.parse(data);\n\t\t}\n\n\t\tif (row) {\n\t\t\trow.updateData(data).then(function () {\n\t\t\t\tresolve(row.getComponent());\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\t\t\treject(\"Update Error - No matching row found\");\n\t\t}\n\t});\n};\n\n//scroll to row in DOM\nTabulator.prototype.scrollToRow = function (index, position, ifVisible) {\n\tvar _this33 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar row = _this33.rowManager.findRow(index);\n\n\t\tif (row) {\n\t\t\t_this33.rowManager.scrollToRow(row, position, ifVisible).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\t\t\treject(\"Scroll Error - No matching row found\");\n\t\t}\n\t});\n};\n\nTabulator.prototype.moveRow = function (from, to, after) {\n\tvar fromRow = this.rowManager.findRow(from);\n\n\tif (fromRow) {\n\t\tfromRow.moveToRow(to, after);\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t}\n};\n\nTabulator.prototype.getRows = function (active) {\n\n\tif (active === true) {\n\t\tconsole.warn(\"passing a boolean to the getRows function is deprecated, you should now pass the string 'active'\");\n\t\tactive = \"active\";\n\t}\n\n\treturn this.rowManager.getComponents(active);\n};\n\n//get position of row in table\nTabulator.prototype.getRowPosition = function (index, active) {\n\tvar row = this.rowManager.findRow(index);\n\n\tif (row) {\n\t\treturn this.rowManager.getRowPosition(row, active);\n\t} else {\n\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\t\treturn false;\n\t}\n};\n\n//copy table data to clipboard\nTabulator.prototype.copyToClipboard = function (selector) {\n\tif (this.modExists(\"clipboard\", true)) {\n\t\tthis.modules.clipboard.copy(selector);\n\t}\n};\n\n/////////////// Column Functions ///////////////\n\nTabulator.prototype.setColumns = function (definition) {\n\tthis.columnManager.setColumns(definition);\n};\n\nTabulator.prototype.getColumns = function (structured) {\n\treturn this.columnManager.getComponents(structured);\n};\n\nTabulator.prototype.getColumn = function (field) {\n\tvar col = this.columnManager.findColumn(field);\n\n\tif (col) {\n\t\treturn col.getComponent();\n\t} else {\n\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getColumnDefinitions = function () {\n\treturn this.columnManager.getDefinitionTree();\n};\n\nTabulator.prototype.getColumnLayout = function () {\n\tif (this.modExists(\"persistence\", true)) {\n\t\treturn this.modules.persistence.parseColumns(this.columnManager.getColumns());\n\t}\n};\n\nTabulator.prototype.setColumnLayout = function (layout) {\n\tif (this.modExists(\"persistence\", true)) {\n\t\tthis.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nTabulator.prototype.showColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tcolumn.show();\n\n\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.modules.responsiveLayout.update();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.hideColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tcolumn.hide();\n\n\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\t\t\tthis.modules.responsiveLayout.update();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.toggleColumn = function (field) {\n\tvar column = this.columnManager.findColumn(field);\n\n\tif (column) {\n\t\tif (column.visible) {\n\t\t\tcolumn.hide();\n\t\t} else {\n\t\t\tcolumn.show();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.addColumn = function (definition, before, field) {\n\tvar _this34 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this34.columnManager.findColumn(field);\n\n\t\t_this34.columnManager.addColumn(definition, before, column).then(function (column) {\n\t\t\tresolve(column.getComponent());\n\t\t}).catch(function (err) {\n\t\t\treject(err);\n\t\t});\n\t});\n};\n\nTabulator.prototype.deleteColumn = function (field) {\n\tvar _this35 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this35.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tcolumn.delete().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.updateColumnDefinition = function (field, definition) {\n\tvar _this36 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this36.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tcolumn.updateDefinition(definition).then(function (col) {\n\t\t\t\tresolve(col);\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.moveColumn = function (from, to, after) {\n\tvar fromColumn = this.columnManager.findColumn(from);\n\tvar toColumn = this.columnManager.findColumn(to);\n\n\tif (fromColumn) {\n\t\tif (toColumn) {\n\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t} else {\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t}\n};\n\n//scroll to column in DOM\nTabulator.prototype.scrollToColumn = function (field, position, ifVisible) {\n\tvar _this37 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tvar column = _this37.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\t_this37.columnManager.scrollToColumn(column, position, ifVisible).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (err) {\n\t\t\t\treject(err);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\t\t\treject(\"Scroll Error - No matching column found\");\n\t\t}\n\t});\n};\n\n//////////// Localization Functions ////////////\nTabulator.prototype.setLocale = function (locale) {\n\tthis.modules.localize.setLocale(locale);\n};\n\nTabulator.prototype.getLocale = function () {\n\treturn this.modules.localize.getLocale();\n};\n\nTabulator.prototype.getLang = function (locale) {\n\treturn this.modules.localize.getLang(locale);\n};\n\n//////////// General Public Functions ////////////\n\n//redraw list without updating data\nTabulator.prototype.redraw = function (force) {\n\tthis.columnManager.redraw(force);\n\tthis.rowManager.redraw(force);\n};\n\nTabulator.prototype.setHeight = function (height) {\n\n\tif (this.rowManager.renderMode !== \"classic\") {\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\t\tthis.element.style.height = this.options.height;\n\t\tthis.rowManager.setRenderMode();\n\t\tthis.rowManager.redraw();\n\t} else {\n\t\tconsole.warn(\"setHeight function is not available in classic render mode\");\n\t}\n};\n\n///////////////////// Sorting ////////////////////\n\n//trigger sort\nTabulator.prototype.setSort = function (sortList, dir) {\n\tif (this.modExists(\"sort\", true)) {\n\t\tthis.modules.sort.setSort(sortList, dir);\n\t\tthis.rowManager.sorterRefresh();\n\t}\n};\n\nTabulator.prototype.getSorters = function () {\n\tif (this.modExists(\"sort\", true)) {\n\t\treturn this.modules.sort.getSort();\n\t}\n};\n\nTabulator.prototype.clearSort = function () {\n\tif (this.modExists(\"sort\", true)) {\n\t\tthis.modules.sort.clear();\n\t\tthis.rowManager.sorterRefresh();\n\t}\n};\n\n///////////////////// Filtering ////////////////////\n\n//set standard filters\nTabulator.prototype.setFilter = function (field, type, value, params) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.setFilter(field, type, value, params);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//set standard filters\nTabulator.prototype.refreshFilter = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//add filter to array\nTabulator.prototype.addFilter = function (field, type, value, params) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.addFilter(field, type, value, params);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//get all filters\nTabulator.prototype.getFilters = function (all) {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.getFilters(all);\n\t}\n};\n\nTabulator.prototype.setHeaderFilterFocus = function (field) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tthis.modules.filter.setHeaderFilterFocus(column);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.getHeaderFilterValue = function (field) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\treturn this.modules.filter.getHeaderFilterValue(column);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t}\n\t}\n};\n\nTabulator.prototype.setHeaderFilterValue = function (field, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\t\t\tthis.modules.filter.setHeaderFilterValue(column, value);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.getHeaderFilters = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\treturn this.modules.filter.getHeaderFilters();\n\t}\n};\n\n//remove filter from array\nTabulator.prototype.removeFilter = function (field, type, value) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.removeFilter(field, type, value);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//clear filters\nTabulator.prototype.clearFilter = function (all) {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.clearFilter(all);\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n//clear header filters\nTabulator.prototype.clearHeaderFilter = function () {\n\tif (this.modExists(\"filter\", true)) {\n\t\tthis.modules.filter.clearHeaderFilter();\n\t\tthis.rowManager.filterRefresh();\n\t}\n};\n\n///////////////////// select ////////////////////\nTabulator.prototype.selectRow = function (rows) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tif (rows === true) {\n\t\t\tconsole.warn(\"passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'\");\n\t\t\trows = \"active\";\n\t\t}\n\t\tthis.modules.selectRow.selectRows(rows);\n\t}\n};\n\nTabulator.prototype.deselectRow = function (rows) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tthis.modules.selectRow.deselectRows(rows);\n\t}\n};\n\nTabulator.prototype.toggleSelectRow = function (row) {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\tthis.modules.selectRow.toggleRow(row);\n\t}\n};\n\nTabulator.prototype.getSelectedRows = function () {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\treturn this.modules.selectRow.getSelectedRows();\n\t}\n};\n\nTabulator.prototype.getSelectedData = function () {\n\tif (this.modExists(\"selectRow\", true)) {\n\t\treturn this.modules.selectRow.getSelectedData();\n\t}\n};\n\n///////////////////// validation ////////////////////\nTabulator.prototype.getInvalidCells = function () {\n\tif (this.modExists(\"validate\", true)) {\n\t\treturn this.modules.validate.getInvalidCells();\n\t}\n};\n\nTabulator.prototype.clearCellValidation = function (cells) {\n\tvar _this38 = this;\n\n\tif (this.modExists(\"validate\", true)) {\n\n\t\tif (!cells) {\n\t\t\tcells = this.modules.validate.getInvalidCells();\n\t\t}\n\n\t\tif (!Array.isArray(cells)) {\n\t\t\tcells = [cells];\n\t\t}\n\n\t\tcells.forEach(function (cell) {\n\t\t\t_this38.modules.validate.clearValidation(cell._getSelf());\n\t\t});\n\t}\n};\n\nTabulator.prototype.validate = function (cells) {\n\tvar output = [];\n\n\t//clear row data\n\tthis.rowManager.rows.forEach(function (row) {\n\t\tvar valid = row.validate();\n\n\t\tif (valid !== true) {\n\t\t\toutput = output.concat(valid);\n\t\t}\n\t});\n\n\treturn output.length ? output : true;\n};\n\n//////////// Pagination Functions ////////////\n\nTabulator.prototype.setMaxPage = function (max) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.setMaxPage(max);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setPage = function (page) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.setPage(page);\n\t} else {\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\treject();\n\t\t});\n\t}\n};\n\nTabulator.prototype.setPageToRow = function (row) {\n\tvar _this39 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this39.options.pagination && _this39.modExists(\"page\")) {\n\t\t\trow = _this39.rowManager.findRow(row);\n\n\t\t\tif (row) {\n\t\t\t\t_this39.modules.page.setPageToRow(row).then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n};\n\nTabulator.prototype.setPageSize = function (size) {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.setPageSize(size);\n\t\tthis.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPageSize = function () {\n\tif (this.options.pagination && this.modExists(\"page\", true)) {\n\t\treturn this.modules.page.getPageSize();\n\t}\n};\n\nTabulator.prototype.previousPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.previousPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.nextPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\tthis.modules.page.nextPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPage = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.getPage();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getPageMax = function () {\n\tif (this.options.pagination && this.modExists(\"page\")) {\n\t\treturn this.modules.page.getPageMax();\n\t} else {\n\t\treturn false;\n\t}\n};\n\n///////////////// Grouping Functions ///////////////\n\nTabulator.prototype.setGroupBy = function (groups) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupBy = groups;\n\t\tthis.modules.groupRows.initialize();\n\t\tthis.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\tthis.modules.persistence.save(\"group\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupValues = function (groupValues) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupValues = groupValues;\n\t\tthis.modules.groupRows.initialize();\n\t\tthis.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\tthis.modules.persistence.save(\"group\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupStartOpen = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupStartOpen = values;\n\t\tthis.modules.groupRows.initialize();\n\t\tif (this.options.groupBy) {\n\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.setGroupHeader = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\tthis.options.groupHeader = values;\n\t\tthis.modules.groupRows.initialize();\n\t\tif (this.options.groupBy) {\n\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getGroups = function (values) {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\treturn this.modules.groupRows.getGroups(true);\n\t} else {\n\t\treturn false;\n\t}\n};\n\n// get grouped table data in the same format as getData()\nTabulator.prototype.getGroupedData = function () {\n\tif (this.modExists(\"groupRows\", true)) {\n\t\treturn this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();\n\t}\n};\n\nTabulator.prototype.getEditedCells = function () {\n\tif (this.modExists(\"edit\", true)) {\n\t\treturn this.modules.edit.getEditedCells();\n\t}\n};\n\nTabulator.prototype.clearCellEdited = function (cells) {\n\tvar _this40 = this;\n\n\tif (this.modExists(\"edit\", true)) {\n\n\t\tif (!cells) {\n\t\t\tcells = this.modules.edit.getEditedCells();\n\t\t}\n\n\t\tif (!Array.isArray(cells)) {\n\t\t\tcells = [cells];\n\t\t}\n\n\t\tcells.forEach(function (cell) {\n\t\t\t_this40.modules.edit.clearEdited(cell._getSelf());\n\t\t});\n\t}\n};\n\n///////////////// Column Calculation Functions ///////////////\nTabulator.prototype.getCalcResults = function () {\n\tif (this.modExists(\"columnCalcs\", true)) {\n\t\treturn this.modules.columnCalcs.getResults();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.recalc = function () {\n\tif (this.modExists(\"columnCalcs\", true)) {\n\t\tthis.modules.columnCalcs.recalcAll(this.rowManager.activeRows);\n\t}\n};\n\n/////////////// Navigation Management //////////////\n\nTabulator.prototype.navigatePrev = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\treturn cell.nav().prev();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateNext = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\treturn cell.nav().next();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateLeft = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().left();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateRight = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().right();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateUp = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().up();\n\t\t}\n\t}\n\n\treturn false;\n};\n\nTabulator.prototype.navigateDown = function () {\n\tvar cell = false;\n\n\tif (this.modExists(\"edit\", true)) {\n\t\tcell = this.modules.edit.currentCell;\n\n\t\tif (cell) {\n\t\t\te.preventDefault();\n\t\t\treturn cell.nav().down();\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/////////////// History Management //////////////\nTabulator.prototype.undo = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.undo();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.redo = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.redo();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getHistoryUndoSize = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.getHistoryUndoSize();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.getHistoryRedoSize = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.getHistoryRedoSize();\n\t} else {\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.clearHistory = function () {\n\tif (this.options.history && this.modExists(\"history\", true)) {\n\t\treturn this.modules.history.clear();\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/////////////// Download Management //////////////\n\nTabulator.prototype.download = function (type, filename, options, active) {\n\tif (this.modExists(\"download\", true)) {\n\t\tthis.modules.download.download(type, filename, options, active);\n\t}\n};\n\nTabulator.prototype.downloadToTab = function (type, filename, options, active) {\n\tif (this.modExists(\"download\", true)) {\n\t\tthis.modules.download.download(type, filename, options, active, true);\n\t}\n};\n\n/////////// Inter Table Communications ///////////\n\nTabulator.prototype.tableComms = function (table, module, action, data) {\n\tthis.modules.comms.receive(table, module, action, data);\n};\n\n////////////// Extension Management //////////////\n\n//object to hold module\nTabulator.prototype.moduleBindings = {};\n\n//extend module\nTabulator.prototype.extendModule = function (name, property, values) {\n\n\tif (Tabulator.prototype.moduleBindings[name]) {\n\t\tvar source = Tabulator.prototype.moduleBindings[name].prototype[property];\n\n\t\tif (source) {\n\t\t\tif ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == \"object\") {\n\t\t\t\tfor (var key in values) {\n\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t}\n};\n\n//add module to tabulator\nTabulator.prototype.registerModule = function (name, module) {\n\tvar self = this;\n\tTabulator.prototype.moduleBindings[name] = module;\n};\n\n//ensure that module are bound to instantiated function\nTabulator.prototype.bindModules = function () {\n\tthis.modules = {};\n\n\tfor (var name in Tabulator.prototype.moduleBindings) {\n\t\tthis.modules[name] = new Tabulator.prototype.moduleBindings[name](this);\n\t}\n};\n\n//Check for module\nTabulator.prototype.modExists = function (plugin, required) {\n\tif (this.modules[plugin]) {\n\t\treturn true;\n\t} else {\n\t\tif (required) {\n\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t}\n\t\treturn false;\n\t}\n};\n\nTabulator.prototype.helpers = {\n\n\telVisible: function elVisible(el) {\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t},\n\n\telOffset: function elOffset(el) {\n\t\tvar box = el.getBoundingClientRect();\n\n\t\treturn {\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\t\t};\n\t},\n\n\tdeepClone: function deepClone(obj) {\n\t\tvar clone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\n\n\t\tfor (var i in obj) {\n\t\t\tif (obj[i] != null && _typeof(obj[i]) === \"object\") {\n\t\t\t\tif (obj[i] instanceof Date) {\n\t\t\t\t\tclone[i] = new Date(obj[i]);\n\t\t\t\t} else {\n\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn clone;\n\t}\n};\n\nTabulator.prototype.comms = {\n\ttables: [],\n\tregister: function register(table) {\n\t\tTabulator.prototype.comms.tables.push(table);\n\t},\n\tderegister: function deregister(table) {\n\t\tvar index = Tabulator.prototype.comms.tables.indexOf(table);\n\n\t\tif (index > -1) {\n\t\t\tTabulator.prototype.comms.tables.splice(index, 1);\n\t\t}\n\t},\n\tlookupTable: function lookupTable(query, silent) {\n\t\tvar results = [],\n\t\t matches,\n\t\t match;\n\n\t\tif (typeof query === \"string\") {\n\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\tif (matches.length) {\n\t\t\t\tfor (var i = 0; i < matches.length; i++) {\n\t\t\t\t\tmatch = Tabulator.prototype.comms.matchElement(matches[i]);\n\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement || query instanceof Tabulator) {\n\t\t\tmatch = Tabulator.prototype.comms.matchElement(query);\n\n\t\t\tif (match) {\n\t\t\t\tresults.push(match);\n\t\t\t}\n\t\t} else if (Array.isArray(query)) {\n\t\t\tquery.forEach(function (item) {\n\t\t\t\tresults = results.concat(Tabulator.prototype.comms.lookupTable(item));\n\t\t\t});\n\t\t} else {\n\t\t\tif (!silent) {\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t},\n\tmatchElement: function matchElement(element) {\n\t\treturn Tabulator.prototype.comms.tables.find(function (table) {\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t});\n\t}\n};\n\nTabulator.prototype.findTable = function (query) {\n\tvar results = Tabulator.prototype.comms.lookupTable(query, true);\n\treturn Array.isArray(results) && !results.length ? false : results;\n};\n\nvar Layout = function Layout(table) {\n\n\tthis.table = table;\n\n\tthis.mode = null;\n};\n\n//initialize layout system\n\nLayout.prototype.initialize = function (layout) {\n\n\tif (this.modes[layout]) {\n\n\t\tthis.mode = layout;\n\t} else {\n\n\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\n\t\tthis.mode = 'fitData';\n\t}\n\n\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n};\n\nLayout.prototype.getMode = function () {\n\n\treturn this.mode;\n};\n\n//trigger table layout\n\nLayout.prototype.layout = function () {\n\n\tthis.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\n\n\tif (this.mode.indexOf(\"fitData\") === 0 && this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\tthis.table.modules.persistence.save(\"columns\");\n\t}\n};\n\n//layout render functions\n\nLayout.prototype.modes = {\n\n\t//resize columns to fit data they contain\n\n\t\"fitData\": function fitData(columns) {\n\n\t\tif (this.table.options.virtualDomHoz) {\n\n\t\t\tthis.table.vdomHoz.fitDataLayoutOverride();\n\t\t} else {\n\n\t\t\tcolumns.forEach(function (column) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t});\n\t\t}\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data they contain and stretch row to fill table\n\n\t\"fitDataFill\": function fitDataFill(columns) {\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data they contain\n\n\t\"fitDataTable\": function fitDataTable(columns) {\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tcolumn.reinitializeWidth();\n\t\t});\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\t},\n\n\t//resize columns to fit data the contain and stretch last column to fill table\n\n\t\"fitDataStretch\": function fitDataStretch(columns) {\n\t\tvar _this41 = this;\n\n\t\tvar colsWidth = 0,\n\t\t tableWidth = this.table.rowManager.element.clientWidth,\n\t\t gap = 0,\n\t\t lastCol = false;\n\n\t\tcolumns.forEach(function (column, i) {\n\n\t\t\tif (!column.widthFixed) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (_this41.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {\n\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol) {\n\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tlastCol.setWidth(0);\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t},\n\n\t//resize columns to fit\n\n\t\"fitColumns\": function fitColumns(columns) {\n\n\t\tvar self = this;\n\n\t\tvar totalWidth = self.table.element.clientWidth; //table element width\n\n\t\tvar fixedWidth = 0; //total width of columns with a defined width\n\n\t\tvar flexWidth = 0; //total width available to flexible columns\n\n\t\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\n\n\t\tvar flexColWidth = 0; //desired width of flexible columns\n\n\t\tvar flexColumns = []; //array of flexible width columns\n\n\t\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\n\t\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\n\n\t\tvar overflowWidth = 0; //horizontal overflow width\n\n\t\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\n\t\tfunction calcWidth(width) {\n\n\t\t\tvar colWidth;\n\n\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tcolWidth = width;\n\t\t\t}\n\n\t\t\treturn colWidth;\n\t\t}\n\n\t\t//ensure columns resize to take up the correct amount of space\n\n\t\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols) {\n\n\t\t\tvar oversizeCols = [],\n\t\t\t oversizeSpace = 0,\n\t\t\t remainingSpace = 0,\n\t\t\t nextColWidth = 0,\n\t\t\t remainingFlexGrowUnits = flexGrowUnits,\n\t\t\t gap = 0,\n\t\t\t changeUnits = 0,\n\t\t\t undersizeCols = [];\n\n\t\t\tfunction calcGrow(col) {\n\n\t\t\t\treturn colWidth * (col.column.definition.widthGrow || 1);\n\t\t\t}\n\n\t\t\tfunction calcShrink(col) {\n\n\t\t\t\treturn calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);\n\t\t\t}\n\n\t\t\tcolumns.forEach(function (col, i) {\n\n\t\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\n\t\t\t\tif (col.column.minWidth >= width) {\n\n\t\t\t\t\toversizeCols.push(col);\n\t\t\t\t} else {\n\n\t\t\t\t\tif (col.column.maxWidth && col.column.maxWidth < width) {\n\n\t\t\t\t\t\tcol.width = col.column.maxWidth;\n\n\t\t\t\t\t\tfreeSpace -= col.column.maxWidth;\n\n\t\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;\n\n\t\t\t\t\t\tif (remainingFlexGrowUnits) {\n\n\t\t\t\t\t\t\tcolWidth = Math.floor(freeSpace / remainingFlexGrowUnits);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tundersizeCols.push(col);\n\n\t\t\t\t\t\tchangeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (oversizeCols.length) {\n\n\t\t\t\toversizeCols.forEach(function (col) {\n\n\t\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\n\t\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t\t});\n\n\t\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;\n\n\t\t\t\tgap = remainingSpace - nextColWidth * changeUnits;\n\n\t\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t\t} else {\n\n\t\t\t\tgap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;\n\n\t\t\t\tundersizeCols.forEach(function (column) {\n\n\t\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn gap;\n\t\t}\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t}\n\n\t\t//adjust for vertical scrollbar if present\n\n\t\tif (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {\n\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t}\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\tvar width, minWidth, colWidth;\n\n\t\t\tif (column.visible) {\n\n\t\t\t\twidth = column.definition.width;\n\n\t\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\t\tif (width) {\n\n\t\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\t\tif (column.definition.widthShrink) {\n\n\t\t\t\t\t\tfixedShrinkColumns.push({\n\n\t\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\t\twidth: colWidth > minWidth ? colWidth : minWidth\n\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tflexColumns.push({\n\n\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\twidth: 0\n\n\t\t\t\t\t});\n\n\t\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//calculate available space\n\n\t\tflexWidth = totalWidth - fixedWidth;\n\n\t\t//calculate correct column size\n\n\t\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t\t//generate column widths\n\n\t\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t\t//increase width of last column to account for rounding errors\n\n\t\tif (flexColumns.length && gapFill > 0) {\n\n\t\t\tflexColumns[flexColumns.length - 1].width += +gapFill;\n\t\t}\n\n\t\t//caculate space for columns to be shrunk into\n\n\t\tflexColumns.forEach(function (col) {\n\n\t\t\tflexWidth -= col.width;\n\t\t});\n\n\t\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t\t//shrink oversize columns if there is no available space\n\n\t\tif (overflowWidth > 0 && flexShrinkUnits) {\n\n\t\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t\t}\n\n\t\t//decrease width of last column to account for rounding errors\n\n\t\tif (fixedShrinkColumns.length) {\n\n\t\t\tfixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;\n\t\t}\n\n\t\tflexColumns.forEach(function (col) {\n\n\t\t\tcol.column.setWidth(col.width);\n\t\t});\n\n\t\tfixedShrinkColumns.forEach(function (col) {\n\n\t\t\tcol.column.setWidth(col.width);\n\t\t});\n\t}\n\n};\n\nTabulator.prototype.registerModule(\"layout\", Layout);\nvar Localize = function Localize(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.locale = \"default\"; //current locale\n\tthis.lang = false; //current language\n\tthis.bindings = {}; //update events to call when locale is changed\n\tthis.langList = {};\n};\n\nLocalize.prototype.initialize = function () {\n\tthis.langList = Tabulator.prototype.helpers.deepClone(this.langs);\n};\n\n//set header placehoder\nLocalize.prototype.setHeaderFilterPlaceholder = function (placeholder) {\n\tthis.langList.default.headerFilters.default = placeholder;\n};\n\n//set header filter placeholder by column\nLocalize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {\n\tthis.langList.default.headerFilters.columns[column] = placeholder;\n\n\tif (this.lang && !this.lang.headerFilters.columns[column]) {\n\t\tthis.lang.headerFilters.columns[column] = placeholder;\n\t}\n};\n\n//setup a lang description object\nLocalize.prototype.installLang = function (locale, lang) {\n\tif (this.langList[locale]) {\n\t\tthis._setLangProp(this.langList[locale], lang);\n\t} else {\n\t\tthis.langList[locale] = lang;\n\t}\n};\n\nLocalize.prototype._setLangProp = function (lang, values) {\n\tfor (var key in values) {\n\t\tif (lang[key] && _typeof(lang[key]) == \"object\") {\n\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t} else {\n\t\t\tlang[key] = values[key];\n\t\t}\n\t}\n};\n\n//set current locale\nLocalize.prototype.setLocale = function (desiredLocale) {\n\tvar self = this;\n\n\tdesiredLocale = desiredLocale || \"default\";\n\n\t//fill in any matching languge values\n\tfunction traverseLang(trans, path) {\n\t\tfor (var prop in trans) {\n\t\t\tif (_typeof(trans[prop]) == \"object\") {\n\t\t\t\tif (!path[prop]) {\n\t\t\t\t\tpath[prop] = {};\n\t\t\t\t}\n\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t} else {\n\t\t\t\tpath[prop] = trans[prop];\n\t\t\t}\n\t\t}\n\t}\n\n\t//determing correct locale to load\n\tif (desiredLocale === true && navigator.language) {\n\t\t//get local from system\n\t\tdesiredLocale = navigator.language.toLowerCase();\n\t}\n\n\tif (desiredLocale) {\n\n\t\t//if locale is not set, check for matching top level locale else use default\n\t\tif (!self.langList[desiredLocale]) {\n\t\t\tvar prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\tif (self.langList[prefix]) {\n\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\t\t\t\tdesiredLocale = prefix;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\t\t\t\tdesiredLocale = \"default\";\n\t\t\t}\n\t\t}\n\t}\n\n\tself.locale = desiredLocale;\n\n\t//load default lang template\n\tself.lang = Tabulator.prototype.helpers.deepClone(self.langList.default || {});\n\n\tif (desiredLocale != \"default\") {\n\t\ttraverseLang(self.langList[desiredLocale], self.lang);\n\t}\n\n\tself.table.options.localized.call(self.table, self.locale, self.lang);\n\n\tself._executeBindings();\n};\n\n//get current locale\nLocalize.prototype.getLocale = function (locale) {\n\treturn self.locale;\n};\n\n//get lang object for given local or current if none provided\nLocalize.prototype.getLang = function (locale) {\n\treturn locale ? this.langList[locale] : this.lang;\n};\n\n//get text for current locale\nLocalize.prototype.getText = function (path, value) {\n\tvar path = value ? path + \"|\" + value : path,\n\t pathArray = path.split(\"|\"),\n\t text = this._getLangElement(pathArray, this.locale);\n\n\t// if(text === false){\n\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\t// }\n\n\treturn text || \"\";\n};\n\n//traverse langs object and find localized copy\nLocalize.prototype._getLangElement = function (path, locale) {\n\tvar self = this;\n\tvar root = self.lang;\n\n\tpath.forEach(function (level) {\n\t\tvar rootPath;\n\n\t\tif (root) {\n\t\t\trootPath = root[level];\n\n\t\t\tif (typeof rootPath != \"undefined\") {\n\t\t\t\troot = rootPath;\n\t\t\t} else {\n\t\t\t\troot = false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn root;\n};\n\n//set update binding\nLocalize.prototype.bind = function (path, callback) {\n\tif (!this.bindings[path]) {\n\t\tthis.bindings[path] = [];\n\t}\n\n\tthis.bindings[path].push(callback);\n\n\tcallback(this.getText(path), this.lang);\n};\n\n//itterate through bindings and trigger updates\nLocalize.prototype._executeBindings = function () {\n\tvar self = this;\n\n\tvar _loop = function _loop(path) {\n\t\tself.bindings[path].forEach(function (binding) {\n\t\t\tbinding(self.getText(path), self.lang);\n\t\t});\n\t};\n\n\tfor (var path in self.bindings) {\n\t\t_loop(path);\n\t}\n};\n\n//Localized text listings\nLocalize.prototype.langs = {\n\t\"default\": { //hold default locale text\n\t\t\"groups\": {\n\t\t\t\"item\": \"item\",\n\t\t\t\"items\": \"items\"\n\t\t},\n\t\t\"columns\": {},\n\t\t\"ajax\": {\n\t\t\t\"loading\": \"Loading\",\n\t\t\t\"error\": \"Error\"\n\t\t},\n\t\t\"pagination\": {\n\t\t\t\"page_size\": \"Page Size\",\n\t\t\t\"page_title\": \"Show Page\",\n\t\t\t\"first\": \"First\",\n\t\t\t\"first_title\": \"First Page\",\n\t\t\t\"last\": \"Last\",\n\t\t\t\"last_title\": \"Last Page\",\n\t\t\t\"prev\": \"Prev\",\n\t\t\t\"prev_title\": \"Prev Page\",\n\t\t\t\"next\": \"Next\",\n\t\t\t\"next_title\": \"Next Page\",\n\t\t\t\"all\": \"All\"\n\t\t},\n\t\t\"headerFilters\": {\n\t\t\t\"default\": \"filter column...\",\n\t\t\t\"columns\": {}\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"localize\", Localize);\nvar Comms = function Comms(table) {\n\tthis.table = table;\n};\n\nComms.prototype.getConnections = function (selectors) {\n\tvar self = this,\n\t connections = [],\n\t connection;\n\n\tconnection = Tabulator.prototype.comms.lookupTable(selectors);\n\n\tconnection.forEach(function (con) {\n\t\tif (self.table !== con) {\n\t\t\tconnections.push(con);\n\t\t}\n\t});\n\n\treturn connections;\n};\n\nComms.prototype.send = function (selectors, module, action, data) {\n\tvar self = this,\n\t connections = this.getConnections(selectors);\n\n\tconnections.forEach(function (connection) {\n\t\tconnection.tableComms(self.table.element, module, action, data);\n\t});\n\n\tif (!connections.length && selectors) {\n\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t}\n};\n\nComms.prototype.receive = function (table, module, action, data) {\n\tif (this.table.modExists(module)) {\n\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t} else {\n\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t}\n};\n\nTabulator.prototype.registerModule(\"comms\", Comms);\n\nvar Accessor = function Accessor(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n};\n\n//initialize column accessor\nAccessor.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t match = false,\n\t config = {};\n\n\tthis.allowedTypes.forEach(function (type) {\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t accessor;\n\n\t\tif (column.definition[key]) {\n\t\t\taccessor = self.lookupAccessor(column.definition[key]);\n\n\t\t\tif (accessor) {\n\t\t\t\tmatch = true;\n\n\t\t\t\tconfig[key] = {\n\t\t\t\t\taccessor: accessor,\n\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\tif (match) {\n\t\tcolumn.modules.accessor = config;\n\t}\n};\n\nAccessor.prototype.lookupAccessor = function (value) {\n\tvar accessor = false;\n\n\t//set column accessor\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tif (this.accessors[value]) {\n\t\t\t\taccessor = this.accessors[value];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\taccessor = value;\n\t\t\tbreak;\n\t}\n\n\treturn accessor;\n};\n\n//apply accessor to row\nAccessor.prototype.transformRow = function (row, type) {\n\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t rowComponent = row.getComponent();\n\n\t//clone data object with deep copy to isolate internal data from returned result\n\tvar data = Tabulator.prototype.helpers.deepClone(row.data || {});\n\n\tthis.table.columnManager.traverse(function (column) {\n\t\tvar value, accessor, params, colCompnent;\n\n\t\tif (column.modules.accessor) {\n\n\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\tif (accessor) {\n\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\tif (value != \"undefined\") {\n\t\t\t\t\tcolCompnent = column.getComponent();\n\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\n\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn data;\n},\n\n//default accessors\nAccessor.prototype.accessors = {};\n\nTabulator.prototype.registerModule(\"accessor\", Accessor);\nvar Ajax = function Ajax(table) {\n\n\tthis.table = table; //hold Tabulator object\n\tthis.config = false; //hold config object for ajax request\n\tthis.url = \"\"; //request URL\n\tthis.urlGenerator = false;\n\tthis.params = false; //request parameters\n\n\tthis.loaderElement = this.createLoaderElement(); //loader message div\n\tthis.msgElement = this.createMsgElement(); //message element\n\tthis.loadingElement = false;\n\tthis.errorElement = false;\n\tthis.loaderPromise = false;\n\n\tthis.progressiveLoad = false;\n\tthis.loading = false;\n\n\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\n};\n\n//initialize setup options\nAjax.prototype.initialize = function () {\n\tvar template;\n\n\tthis.loaderElement.appendChild(this.msgElement);\n\n\tif (this.table.options.ajaxLoaderLoading) {\n\t\tif (typeof this.table.options.ajaxLoaderLoading == \"string\") {\n\t\t\ttemplate = document.createElement('template');\n\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderLoading.trim();\n\t\t\tthis.loadingElement = template.content.firstChild;\n\t\t} else {\n\t\t\tthis.loadingElement = this.table.options.ajaxLoaderLoading;\n\t\t}\n\t}\n\n\tthis.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;\n\n\tthis.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;\n\n\tif (this.table.options.ajaxLoaderError) {\n\t\tif (typeof this.table.options.ajaxLoaderError == \"string\") {\n\t\t\ttemplate = document.createElement('template');\n\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderError.trim();\n\t\t\tthis.errorElement = template.content.firstChild;\n\t\t} else {\n\t\t\tthis.errorElement = this.table.options.ajaxLoaderError;\n\t\t}\n\t}\n\n\tif (this.table.options.ajaxParams) {\n\t\tthis.setParams(this.table.options.ajaxParams);\n\t}\n\n\tif (this.table.options.ajaxConfig) {\n\t\tthis.setConfig(this.table.options.ajaxConfig);\n\t}\n\n\tif (this.table.options.ajaxURL) {\n\t\tthis.setUrl(this.table.options.ajaxURL);\n\t}\n\n\tif (this.table.options.ajaxProgressiveLoad) {\n\t\tif (this.table.options.pagination) {\n\t\t\tthis.progressiveLoad = false;\n\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t} else {\n\t\t\tif (this.table.modExists(\"page\")) {\n\t\t\t\tthis.progressiveLoad = this.table.options.ajaxProgressiveLoad;\n\t\t\t\tthis.table.modules.page.initializeProgressive(this.progressiveLoad);\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Pagination plugin is required for progressive ajax loading\");\n\t\t\t}\n\t\t}\n\t}\n};\n\nAjax.prototype.createLoaderElement = function () {\n\tvar el = document.createElement(\"div\");\n\tel.classList.add(\"tabulator-loader\");\n\treturn el;\n};\n\nAjax.prototype.createMsgElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-loader-msg\");\n\tel.setAttribute(\"role\", \"alert\");\n\n\treturn el;\n};\n\n//set ajax params\nAjax.prototype.setParams = function (params, update) {\n\tif (update) {\n\t\tthis.params = this.params || {};\n\n\t\tfor (var key in params) {\n\t\t\tthis.params[key] = params[key];\n\t\t}\n\t} else {\n\t\tthis.params = params;\n\t}\n};\n\nAjax.prototype.getParams = function () {\n\treturn this.params || {};\n};\n\n//load config object\nAjax.prototype.setConfig = function (config) {\n\tthis._loadDefaultConfig();\n\n\tif (typeof config == \"string\") {\n\t\tthis.config.method = config;\n\t} else {\n\t\tfor (var key in config) {\n\t\t\tthis.config[key] = config[key];\n\t\t}\n\t}\n};\n\n//create config object from default\nAjax.prototype._loadDefaultConfig = function (force) {\n\tvar self = this;\n\tif (!self.config || force) {\n\n\t\tself.config = {};\n\n\t\t//load base config from defaults\n\t\tfor (var key in self.defaultConfig) {\n\t\t\tself.config[key] = self.defaultConfig[key];\n\t\t}\n\t}\n};\n\n//set request url\nAjax.prototype.setUrl = function (url) {\n\tthis.url = url;\n};\n\n//get request url\nAjax.prototype.getUrl = function () {\n\treturn this.url;\n};\n\n//lstandard loading function\nAjax.prototype.loadData = function (inPosition, columnsChanged) {\n\tvar self = this;\n\n\tif (this.progressiveLoad) {\n\t\treturn this._loadDataProgressive();\n\t} else {\n\t\treturn this._loadDataStandard(inPosition, columnsChanged);\n\t}\n};\n\nAjax.prototype.nextPage = function (diff) {\n\tvar margin;\n\n\tif (!this.loading) {\n\n\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;\n\n\t\tif (diff < margin) {\n\t\t\tthis.table.modules.page.nextPage().then(function () {}).catch(function () {});\n\t\t}\n\t}\n};\n\nAjax.prototype.blockActiveRequest = function () {\n\tthis.requestOrder++;\n};\n\nAjax.prototype._loadDataProgressive = function () {\n\tthis.table.rowManager.setData([]);\n\treturn this.table.modules.page.setPage(1);\n};\n\nAjax.prototype._loadDataStandard = function (inPosition, columnsChanged) {\n\tvar _this42 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\t_this42.sendRequest(inPosition).then(function (data) {\n\t\t\t_this42.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function (e) {\n\t\t\t\treject(e);\n\t\t\t});\n\t\t}).catch(function (e) {\n\t\t\treject(e);\n\t\t});\n\t});\n};\n\nAjax.prototype.generateParamsList = function (data, prefix) {\n\tvar self = this,\n\t output = [];\n\n\tprefix = prefix || \"\";\n\n\tif (Array.isArray(data)) {\n\t\tdata.forEach(function (item, i) {\n\t\t\toutput = output.concat(self.generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t});\n\t} else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === \"object\") {\n\t\tfor (var key in data) {\n\t\t\toutput = output.concat(self.generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t}\n\t} else {\n\t\toutput.push({ key: prefix, value: data });\n\t}\n\n\treturn output;\n};\n\nAjax.prototype.serializeParams = function (params) {\n\tvar output = this.generateParamsList(params),\n\t encoded = [];\n\n\toutput.forEach(function (item) {\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t});\n\n\treturn encoded.join(\"&\");\n};\n\n//send ajax request\nAjax.prototype.sendRequest = function (silent) {\n\tvar _this43 = this;\n\n\tvar self = this,\n\t url = self.url,\n\t requestNo,\n\t esc,\n\t query;\n\n\tself.requestOrder++;\n\trequestNo = self.requestOrder;\n\n\tself._loadDefaultConfig();\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (self.table.options.ajaxRequesting.call(_this43.table, self.url, self.params) !== false) {\n\n\t\t\tself.loading = true;\n\n\t\t\tif (!silent) {\n\t\t\t\tself.showLoader();\n\t\t\t}\n\n\t\t\t_this43.loaderPromise(url, self.config, self.params).then(function (data) {\n\t\t\t\tif (requestNo === self.requestOrder) {\n\t\t\t\t\tif (self.table.options.ajaxResponse) {\n\t\t\t\t\t\tdata = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data);\n\n\t\t\t\t\tself.hideLoader();\n\t\t\t\t\tself.loading = false;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\tconsole.error(\"Ajax Load Error: \", error);\n\t\t\t\tself.table.options.ajaxError.call(self.table, error);\n\n\t\t\t\tself.showError();\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tself.hideLoader();\n\t\t\t\t}, 3000);\n\n\t\t\t\tself.loading = false;\n\n\t\t\t\treject(error);\n\t\t\t});\n\t\t} else {\n\t\t\treject();\n\t\t}\n\t});\n};\n\nAjax.prototype.showLoader = function () {\n\tvar shouldLoad = typeof this.table.options.ajaxLoader === \"function\" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;\n\n\tif (shouldLoad) {\n\n\t\tthis.hideLoader();\n\n\t\twhile (this.msgElement.firstChild) {\n\t\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t\t}this.msgElement.classList.remove(\"tabulator-error\");\n\t\tthis.msgElement.classList.add(\"tabulator-loading\");\n\n\t\tif (this.loadingElement) {\n\t\t\tthis.msgElement.appendChild(this.loadingElement);\n\t\t} else {\n\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|loading\");\n\t\t}\n\n\t\tthis.table.element.appendChild(this.loaderElement);\n\t}\n};\n\nAjax.prototype.showError = function () {\n\tthis.hideLoader();\n\n\twhile (this.msgElement.firstChild) {\n\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t}this.msgElement.classList.remove(\"tabulator-loading\");\n\tthis.msgElement.classList.add(\"tabulator-error\");\n\n\tif (this.errorElement) {\n\t\tthis.msgElement.appendChild(this.errorElement);\n\t} else {\n\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|error\");\n\t}\n\n\tthis.table.element.appendChild(this.loaderElement);\n};\n\nAjax.prototype.hideLoader = function () {\n\tif (this.loaderElement.parentNode) {\n\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\n\t}\n};\n\n//default ajax config object\nAjax.prototype.defaultConfig = {\n\tmethod: \"GET\"\n};\n\nAjax.prototype.defaultURLGenerator = function (url, config, params) {\n\n\tif (url) {\n\t\tif (params && Object.keys(params).length) {\n\t\t\tif (!config.method || config.method.toLowerCase() == \"get\") {\n\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + this.modules.ajax.serializeParams(params);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn url;\n};\n\nAjax.prototype.defaultLoaderPromise = function (url, config, params) {\n\tvar self = this,\n\t contentType;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\t//set url\n\t\turl = self.urlGenerator.call(self.table, url, config, params);\n\n\t\t//set body content if not GET request\n\t\tif (config.method.toUpperCase() != \"GET\") {\n\t\t\tcontentType = _typeof(self.table.options.ajaxContentType) === \"object\" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];\n\t\t\tif (contentType) {\n\n\t\t\t\tfor (var key in contentType.headers) {\n\t\t\t\t\tif (!config.headers) {\n\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof config.headers[key] === \"undefined\") {\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconfig.body = contentType.body.call(self, url, config, params);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", self.table.options.ajaxContentType);\n\t\t\t}\n\t\t}\n\n\t\tif (url) {\n\n\t\t\t//configure headers\n\t\t\tif (typeof config.headers === \"undefined\") {\n\t\t\t\tconfig.headers = {};\n\t\t\t}\n\n\t\t\tif (typeof config.headers.Accept === \"undefined\") {\n\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t}\n\n\t\t\tif (typeof config.headers[\"X-Requested-With\"] === \"undefined\") {\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\tif (typeof config.mode === \"undefined\") {\n\t\t\t\tconfig.mode = \"cors\";\n\t\t\t}\n\n\t\t\tif (config.mode == \"cors\") {\n\n\t\t\t\tif (typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\") {\n\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\n\t\t\t\t}\n\n\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//send request\n\t\t\tfetch(url, config).then(function (response) {\n\t\t\t\tif (response.ok) {\n\t\t\t\t\tresponse.json().then(function (data) {\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\treject(response);\n\t\t\t\t}\n\t\t\t}).catch(function (error) {\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\treject(error);\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\tresolve([]);\n\t\t}\n\t});\n};\n\nAjax.prototype.contentTypeFormatters = {\n\t\"json\": {\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tbody: function body(url, config, params) {\n\t\t\treturn JSON.stringify(params);\n\t\t}\n\t},\n\t\"form\": {\n\t\theaders: {},\n\t\tbody: function body(url, config, params) {\n\t\t\tvar output = this.generateParamsList(params),\n\t\t\t form = new FormData();\n\n\t\t\toutput.forEach(function (item) {\n\t\t\t\tform.append(item.key, item.value);\n\t\t\t});\n\n\t\t\treturn form;\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"ajax\", Ajax);\n\n//public calc object\nvar CalcComponent = function CalcComponent(row) {\n\tthis._row = row;\n};\n\nCalcComponent.prototype.getData = function (transform) {\n\treturn this._row.getData(transform);\n};\n\nCalcComponent.prototype.getElement = function () {\n\treturn this._row.getElement();\n};\n\nCalcComponent.prototype.getTable = function () {\n\treturn this._row.table;\n};\n\nCalcComponent.prototype.getCells = function () {\n\tvar cells = [];\n\n\tthis._row.getCells().forEach(function (cell) {\n\t\tcells.push(cell.getComponent());\n\t});\n\n\treturn cells;\n};\n\nCalcComponent.prototype.getCell = function (column) {\n\tvar cell = this._row.getCell(column);\n\treturn cell ? cell.getComponent() : false;\n};\n\nCalcComponent.prototype._getSelf = function () {\n\treturn this._row;\n};\n\nvar ColumnCalcs = function ColumnCalcs(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.topCalcs = [];\n\tthis.botCalcs = [];\n\tthis.genColumn = false;\n\tthis.topElement = this.createElement();\n\tthis.botElement = this.createElement();\n\tthis.topRow = false;\n\tthis.botRow = false;\n\tthis.topInitialized = false;\n\tthis.botInitialized = false;\n\n\tthis.initialize();\n};\n\nColumnCalcs.prototype.createElement = function () {\n\tvar el = document.createElement(\"div\");\n\tel.classList.add(\"tabulator-calcs-holder\");\n\treturn el;\n};\n\nColumnCalcs.prototype.initialize = function () {\n\tthis.genColumn = new Column({ field: \"value\" }, this);\n};\n\n//dummy functions to handle being mock column manager\nColumnCalcs.prototype.registerColumnField = function () {};\n\n//initialize column calcs\nColumnCalcs.prototype.initializeColumn = function (column) {\n\tvar def = column.definition;\n\n\tvar config = {\n\t\ttopCalcParams: def.topCalcParams || {},\n\t\tbotCalcParams: def.bottomCalcParams || {}\n\t};\n\n\tif (def.topCalc) {\n\n\t\tswitch (_typeof(def.topCalc)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.calculations[def.topCalc]) {\n\t\t\t\t\tconfig.topCalc = this.calculations[def.topCalc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif (config.topCalc) {\n\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\tthis.topCalcs.push(column);\n\n\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\tthis.initializeTopRow();\n\t\t\t}\n\t\t}\n\t}\n\n\tif (def.bottomCalc) {\n\t\tswitch (_typeof(def.bottomCalc)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.calculations[def.bottomCalc]) {\n\t\t\t\t\tconfig.botCalc = this.calculations[def.bottomCalc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif (config.botCalc) {\n\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\tthis.botCalcs.push(column);\n\n\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\tthis.initializeBottomRow();\n\t\t\t}\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.removeCalcs = function () {\n\tvar changed = false;\n\n\tif (this.topInitialized) {\n\t\tthis.topInitialized = false;\n\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\tchanged = true;\n\t}\n\n\tif (this.botInitialized) {\n\t\tthis.botInitialized = false;\n\t\tthis.table.footerManager.remove(this.botElement);\n\t\tchanged = true;\n\t}\n\n\tif (changed) {\n\t\tthis.table.rowManager.adjustTableSize();\n\t}\n};\n\nColumnCalcs.prototype.initializeTopRow = function () {\n\tif (!this.topInitialized) {\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n\t\tthis.topInitialized = true;\n\t}\n};\n\nColumnCalcs.prototype.initializeBottomRow = function () {\n\tif (!this.botInitialized) {\n\t\tthis.table.footerManager.prepend(this.botElement);\n\t\tthis.botInitialized = true;\n\t}\n};\n\nColumnCalcs.prototype.scrollHorizontal = function (left) {\n\tif (this.botInitialized && this.botRow) {\n\t\tthis.botRow.getElement().style.marginLeft = -left + \"px\";\n\t}\n};\n\nColumnCalcs.prototype.recalc = function (rows) {\n\tvar data, row;\n\n\tif (this.topInitialized || this.botInitialized) {\n\t\tdata = this.rowsToData(rows);\n\n\t\tif (this.topInitialized) {\n\t\t\tif (this.topRow) {\n\t\t\t\tthis.topRow.deleteCells();\n\t\t\t}\n\n\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows));\n\t\t\tthis.topRow = row;\n\t\t\twhile (this.topElement.firstChild) {\n\t\t\t\tthis.topElement.removeChild(this.topElement.firstChild);\n\t\t\t}this.topElement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t}\n\n\t\tif (this.botInitialized) {\n\t\t\tif (this.botRow) {\n\t\t\t\tthis.botRow.deleteCells();\n\t\t\t}\n\n\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows));\n\t\t\tthis.botRow = row;\n\t\t\twhile (this.botElement.firstChild) {\n\t\t\t\tthis.botElement.removeChild(this.botElement.firstChild);\n\t\t\t}this.botElement.appendChild(row.getElement());\n\t\t\trow.initialize(true);\n\t\t}\n\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t//set resizable handles\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.recalcRowGroup = function (row) {\n\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n};\n\nColumnCalcs.prototype.recalcAll = function () {\n\tvar _this44 = this;\n\n\tif (this.topCalcs.length || this.botCalcs.length) {\n\t\tif (this.table.options.columnCalcs !== \"group\") {\n\t\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t}\n\n\t\tif (this.table.options.groupBy && this.table.options.columnCalcs !== \"table\") {\n\n\t\t\tvar groups = table.modules.groupRows.getChildGroups();\n\n\t\t\tgroups.forEach(function (group) {\n\t\t\t\t_this44.recalcGroup(group);\n\t\t\t});\n\t\t}\n\t}\n};\n\nColumnCalcs.prototype.recalcGroup = function (group) {\n\tvar data, rowData;\n\n\tif (group) {\n\t\tif (group.calcs) {\n\t\t\tif (group.calcs.bottom) {\n\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\n\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t}\n\n\t\t\tif (group.calcs.top) {\n\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\trowData = this.generateRowData(\"top\", data);\n\n\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t}\n\t\t}\n\t}\n};\n\n//generate top stats row\nColumnCalcs.prototype.generateTopRow = function (rows) {\n\treturn this.generateRow(\"top\", this.rowsToData(rows));\n};\n//generate bottom stats row\nColumnCalcs.prototype.generateBottomRow = function (rows) {\n\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n};\n\nColumnCalcs.prototype.rowsToData = function (rows) {\n\tvar _this45 = this;\n\n\tvar data = [];\n\n\trows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\n\t\tif (_this45.table.options.dataTree && _this45.table.options.dataTreeChildColumnCalcs) {\n\t\t\tif (row.modules.dataTree.open) {\n\t\t\t\tvar children = _this45.rowsToData(_this45.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\tdata = data.concat(children);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn data;\n};\n\n//generate stats row\nColumnCalcs.prototype.generateRow = function (pos, data) {\n\tvar self = this,\n\t rowData = this.generateRowData(pos, data),\n\t row;\n\n\tif (self.table.modExists(\"mutator\")) {\n\t\tself.table.modules.mutator.disable();\n\t}\n\n\trow = new Row(rowData, this, \"calc\");\n\n\tif (self.table.modExists(\"mutator\")) {\n\t\tself.table.modules.mutator.enable();\n\t}\n\n\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\n\trow.component = false;\n\n\trow.getComponent = function () {\n\t\tif (!this.component) {\n\t\t\tthis.component = new CalcComponent(this);\n\t\t}\n\n\t\treturn this.component;\n\t};\n\n\trow.generateCells = function () {\n\n\t\tvar cells = [];\n\n\t\tself.table.columnManager.columnsByIndex.forEach(function (column) {\n\n\t\t\t//set field name of mock column\n\t\t\tself.genColumn.setField(column.getField());\n\t\t\tself.genColumn.hozAlign = column.hozAlign;\n\n\t\t\tif (column.definition[pos + \"CalcFormatter\"] && self.table.modExists(\"format\")) {\n\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\tformatter: self.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\tformatter: self.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\tparams: {}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//ensure css class defintion is replicated to calculation cell\n\t\t\tself.genColumn.definition.cssClass = column.definition.cssClass;\n\n\t\t\t//generate cell and assign to correct column\n\t\t\tvar cell = new Cell(self.genColumn, row);\n\t\t\tcell.getElement();\n\t\t\tcell.column = column;\n\t\t\tcell.setWidth();\n\n\t\t\tcolumn.cells.push(cell);\n\t\t\tcells.push(cell);\n\n\t\t\tif (!column.visible) {\n\t\t\t\tcell.hide();\n\t\t\t}\n\t\t});\n\n\t\tthis.cells = cells;\n\t};\n\n\treturn row;\n};\n\n//generate stats row\nColumnCalcs.prototype.generateRowData = function (pos, data) {\n\tvar rowData = {},\n\t calcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t type = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t params,\n\t paramKey;\n\n\tcalcs.forEach(function (column) {\n\t\tvar values = [];\n\n\t\tif (column.modules.columnCalcs && column.modules.columnCalcs[type]) {\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t});\n\n\t\t\tparamKey = type + \"Params\";\n\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\n\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t}\n\t});\n\n\treturn rowData;\n};\n\nColumnCalcs.prototype.hasTopCalcs = function () {\n\treturn !!this.topCalcs.length;\n};\n\nColumnCalcs.prototype.hasBottomCalcs = function () {\n\treturn !!this.botCalcs.length;\n};\n\n//handle table redraw\nColumnCalcs.prototype.redraw = function () {\n\tif (this.topRow) {\n\t\tthis.topRow.normalizeHeight(true);\n\t}\n\tif (this.botRow) {\n\t\tthis.botRow.normalizeHeight(true);\n\t}\n};\n\n//return the calculated\nColumnCalcs.prototype.getResults = function () {\n\tvar self = this,\n\t results = {},\n\t groups;\n\n\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\n\t\tgroups.forEach(function (group) {\n\t\t\tresults[group.getKey()] = self.getGroupResults(group);\n\t\t});\n\t} else {\n\t\tresults = {\n\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\tbottom: this.botRow ? this.botRow.getData() : {}\n\t\t};\n\t}\n\n\treturn results;\n};\n\n//get results from a group\nColumnCalcs.prototype.getGroupResults = function (group) {\n\tvar self = this,\n\t groupObj = group._getSelf(),\n\t subGroups = group.getSubGroups(),\n\t subGroupResults = {},\n\t results = {};\n\n\tsubGroups.forEach(function (subgroup) {\n\t\tsubGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);\n\t});\n\n\tresults = {\n\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\tgroups: subGroupResults\n\t};\n\n\treturn results;\n};\n\n//default calculations\nColumnCalcs.prototype.calculations = {\n\t\"avg\": function avg(values, data, calcParams) {\n\t\tvar output = 0,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\tif (values.length) {\n\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\treturn Number(sum) + Number(value);\n\t\t\t});\n\n\t\t\toutput = output / values.length;\n\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t}\n\n\t\treturn parseFloat(output).toString();\n\t},\n\t\"max\": function max(values, data, calcParams) {\n\t\tvar output = null,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function (value) {\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif (value > output || output === null) {\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t},\n\t\"min\": function min(values, data, calcParams) {\n\t\tvar output = null,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tvalues.forEach(function (value) {\n\n\t\t\tvalue = Number(value);\n\n\t\t\tif (value < output || output === null) {\n\t\t\t\toutput = value;\n\t\t\t}\n\t\t});\n\n\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t},\n\t\"sum\": function sum(values, data, calcParams) {\n\t\tvar output = 0,\n\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\tif (values.length) {\n\t\t\tvalues.forEach(function (value) {\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t});\n\t\t}\n\n\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t},\n\t\"concat\": function concat(values, data, calcParams) {\n\t\tvar output = 0;\n\n\t\tif (values.length) {\n\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\treturn String(sum) + String(value);\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t},\n\t\"count\": function count(values, data, calcParams) {\n\t\tvar output = 0;\n\n\t\tif (values.length) {\n\t\t\tvalues.forEach(function (value) {\n\t\t\t\tif (value) {\n\t\t\t\t\toutput++;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t}\n};\n\nTabulator.prototype.registerModule(\"columnCalcs\", ColumnCalcs);\n\nvar Clipboard = function Clipboard(table) {\n\tthis.table = table;\n\tthis.mode = true;\n\n\tthis.pasteParser = function () {};\n\tthis.pasteAction = function () {};\n\tthis.customSelection = false;\n\tthis.rowRange = false;\n\tthis.blocked = true; //block copy actions not originating from this command\n};\n\nClipboard.prototype.initialize = function () {\n\tvar _this46 = this;\n\n\tthis.mode = this.table.options.clipboard;\n\n\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\tif (this.mode === true || this.mode === \"copy\") {\n\t\tthis.table.element.addEventListener(\"copy\", function (e) {\n\t\t\tvar plain, html, list;\n\n\t\t\tif (!_this46.blocked) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (_this46.customSelection) {\n\t\t\t\t\tplain = _this46.customSelection;\n\n\t\t\t\t\tif (_this46.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\tplain = _this46.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tvar list = _this46.table.modules.export.generateExportList(_this46.table.options.clipboardCopyConfig, _this46.table.options.clipboardCopyStyled, _this46.rowRange, \"clipboard\");\n\n\t\t\t\t\thtml = _this46.table.modules.export.genereateHTMLTable(list);\n\t\t\t\t\tplain = html ? _this46.generatePlainContent(list) : \"\";\n\n\t\t\t\t\tif (_this46.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\tplain = _this46.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\thtml = _this46.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\tif (html) {\n\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t}\n\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\tif (html) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t_this46.table.options.clipboardCopied.call(_this46.table, plain, html);\n\n\t\t\t\t_this46.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\tif (this.mode === true || this.mode === \"paste\") {\n\t\tthis.table.element.addEventListener(\"paste\", function (e) {\n\t\t\t_this46.paste(e);\n\t\t});\n\t}\n\n\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n};\n\nClipboard.prototype.reset = function () {\n\tthis.blocked = true;\n\tthis.customSelection = false;\n};\n\nClipboard.prototype.generatePlainContent = function (list) {\n\tvar output = [];\n\n\tlist.forEach(function (row) {\n\t\tvar rowData = [];\n\n\t\trow.columns.forEach(function (col) {\n\t\t\tvar value = \"\";\n\n\t\t\tif (col) {\n\n\t\t\t\tif (row.type === \"group\") {\n\t\t\t\t\tcol.value = col.component.getKey();\n\t\t\t\t}\n\n\t\t\t\tif (col.value === null) {\n\t\t\t\t\tvalue = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvalue = col.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trowData.push(value);\n\t\t});\n\n\t\toutput.push(rowData.join(\"\\t\"));\n\t});\n\n\treturn output.join(\"\\n\");\n};\n\nClipboard.prototype.copy = function (range, internal) {\n\tvar range, sel, textRange;\n\tthis.blocked = false;\n\tthis.customSelection = false;\n\n\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\trange = document.createRange();\n\t\t\trange.selectNodeContents(this.table.element);\n\t\t\tsel = window.getSelection();\n\n\t\t\tif (sel.toString() && internal) {\n\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t}\n\n\t\t\tsel.removeAllRanges();\n\t\t\tsel.addRange(range);\n\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\ttextRange = document.body.createTextRange();\n\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\ttextRange.select();\n\t\t}\n\n\t\tdocument.execCommand('copy');\n\n\t\tif (sel) {\n\t\t\tsel.removeAllRanges();\n\t\t}\n\t}\n};\n\n//PASTE EVENT HANDLING\n\nClipboard.prototype.setPasteAction = function (action) {\n\n\tswitch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) {\n\t\tcase \"string\":\n\t\t\tthis.pasteAction = this.pasteActions[action];\n\n\t\t\tif (!this.pasteAction) {\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.pasteAction = action;\n\t\t\tbreak;\n\t}\n};\n\nClipboard.prototype.setPasteParser = function (parser) {\n\tswitch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) {\n\t\tcase \"string\":\n\t\t\tthis.pasteParser = this.pasteParsers[parser];\n\n\t\t\tif (!this.pasteParser) {\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.pasteParser = parser;\n\t\t\tbreak;\n\t}\n};\n\nClipboard.prototype.paste = function (e) {\n\tvar data, rowData, rows;\n\n\tif (this.checkPaseOrigin(e)) {\n\n\t\tdata = this.getPasteData(e);\n\n\t\trowData = this.pasteParser.call(this, data);\n\n\t\tif (rowData) {\n\t\t\te.preventDefault();\n\n\t\t\tif (this.table.modExists(\"mutator\")) {\n\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t}\n\n\t\t\trows = this.pasteAction.call(this, rowData);\n\t\t\tthis.table.options.clipboardPasted.call(this.table, data, rowData, rows);\n\t\t} else {\n\t\t\tthis.table.options.clipboardPasteError.call(this.table, data);\n\t\t}\n\t}\n};\n\nClipboard.prototype.mutateData = function (data) {\n\tvar self = this,\n\t output = [];\n\n\tif (Array.isArray(data)) {\n\t\tdata.forEach(function (row) {\n\t\t\toutput.push(self.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t});\n\t} else {\n\t\toutput = data;\n\t}\n\n\treturn output;\n};\n\nClipboard.prototype.checkPaseOrigin = function (e) {\n\tvar valid = true;\n\n\tif (e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell) {\n\t\tvalid = false;\n\t}\n\n\treturn valid;\n};\n\nClipboard.prototype.getPasteData = function (e) {\n\tvar data;\n\n\tif (window.clipboardData && window.clipboardData.getData) {\n\t\tdata = window.clipboardData.getData('Text');\n\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\tdata = e.clipboardData.getData('text/plain');\n\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t}\n\n\treturn data;\n};\n\nClipboard.prototype.pasteParsers = {\n\ttable: function table(clipboard) {\n\t\tvar data = [],\n\t\t success = false,\n\t\t headerFindSuccess = true,\n\t\t columns = this.table.columnManager.columns,\n\t\t columnMap = [],\n\t\t rows = [];\n\n\t\t//get data from clipboard into array of columns and rows.\n\t\tclipboard = clipboard.split(\"\\n\");\n\n\t\tclipboard.forEach(function (row) {\n\t\t\tdata.push(row.split(\"\\t\"));\n\t\t});\n\n\t\tif (data.length && !(data.length === 1 && data[0].length < 2)) {\n\t\t\tsuccess = true;\n\n\t\t\t//check if headers are present by title\n\t\t\tdata[0].forEach(function (value) {\n\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t});\n\n\t\t\t\tif (column) {\n\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t} else {\n\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//check if column headers are present by field\n\t\t\tif (!headerFindSuccess) {\n\t\t\t\theaderFindSuccess = true;\n\t\t\t\tcolumnMap = [];\n\n\t\t\t\tdata[0].forEach(function (value) {\n\t\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t});\n\n\t\t\t\t\tif (column) {\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!headerFindSuccess) {\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//remove header row if found\n\t\t\tif (headerFindSuccess) {\n\t\t\t\tdata.shift();\n\t\t\t}\n\n\t\t\tdata.forEach(function (item) {\n\t\t\t\tvar row = {};\n\n\t\t\t\titem.forEach(function (value, i) {\n\t\t\t\t\tif (columnMap[i]) {\n\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\treturn rows;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nClipboard.prototype.pasteActions = {\n\treplace: function replace(rows) {\n\t\treturn this.table.setData(rows);\n\t},\n\tupdate: function update(rows) {\n\t\treturn this.table.updateOrAddData(rows);\n\t},\n\tinsert: function insert(rows) {\n\t\treturn this.table.addData(rows);\n\t}\n};\n\nTabulator.prototype.registerModule(\"clipboard\", Clipboard);\n\nvar DataTree = function DataTree(table) {\n\tthis.table = table;\n\tthis.indent = 10;\n\tthis.field = \"\";\n\tthis.collapseEl = null;\n\tthis.expandEl = null;\n\tthis.branchEl = null;\n\tthis.elementField = false;\n\n\tthis.startOpen = function () {};\n\n\tthis.displayIndex = 0;\n};\n\nDataTree.prototype.initialize = function () {\n\tvar dummyEl = null,\n\t firstCol = this.table.columnManager.getFirstVisibileColumn(),\n\t options = this.table.options;\n\n\tthis.field = options.dataTreeChildField;\n\tthis.indent = options.dataTreeChildIndent;\n\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\n\tif (options.dataTreeBranchElement) {\n\n\t\tif (options.dataTreeBranchElement === true) {\n\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t} else {\n\t\t\tif (typeof options.dataTreeBranchElement === \"string\") {\n\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t} else {\n\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (options.dataTreeCollapseElement) {\n\t\tif (typeof options.dataTreeCollapseElement === \"string\") {\n\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t} else {\n\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t}\n\t} else {\n\t\tthis.collapseEl = document.createElement(\"div\");\n\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\tthis.collapseEl.tabIndex = 0;\n\t\tthis.collapseEl.innerHTML = \"<div class='tabulator-data-tree-control-collapse'></div>\";\n\t}\n\n\tif (options.dataTreeExpandElement) {\n\t\tif (typeof options.dataTreeExpandElement === \"string\") {\n\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t} else {\n\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t}\n\t} else {\n\t\tthis.expandEl = document.createElement(\"div\");\n\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\tthis.expandEl.tabIndex = 0;\n\t\tthis.expandEl.innerHTML = \"<div class='tabulator-data-tree-control-expand'></div>\";\n\t}\n\n\tswitch (_typeof(options.dataTreeStartExpanded)) {\n\t\tcase \"boolean\":\n\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t};\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t};\n\t\t\tbreak;\n\t}\n};\n\nDataTree.prototype.initializeRow = function (row) {\n\tvar childArray = row.getData()[this.field];\n\tvar isArray = Array.isArray(childArray);\n\n\tvar children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === \"object\" && childArray !== null;\n\n\tif (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {\n\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t}\n\n\tif (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {\n\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t}\n\n\trow.modules.dataTree = {\n\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\n\t\topen: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,\n\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\n\t\tchildren: children\n\t};\n};\n\nDataTree.prototype.layoutRow = function (row) {\n\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t el = cell.getElement(),\n\t config = row.modules.dataTree;\n\n\tif (config.branchEl) {\n\t\tif (config.branchEl.parentNode) {\n\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t}\n\t\tconfig.branchEl = false;\n\t}\n\n\tif (config.controlEl) {\n\t\tif (config.controlEl.parentNode) {\n\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t}\n\t\tconfig.controlEl = false;\n\t}\n\n\tthis.generateControlElement(row, el);\n\n\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\n\n\tif (config.index) {\n\t\tif (this.branchEl) {\n\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\n\t\t\tif (this.table.rtl) {\n\t\t\t\tconfig.branchEl.style.marginRight = (config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1) + config.index * this.indent + \"px\";\n\t\t\t} else {\n\t\t\t\tconfig.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + \"px\";\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.table.rtl) {\n\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + config.index * this.indent + \"px\";\n\t\t\t} else {\n\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + \"px\";\n\t\t\t}\n\t\t}\n\t}\n};\n\nDataTree.prototype.generateControlElement = function (row, el) {\n\tvar _this47 = this;\n\n\tvar config = row.modules.dataTree,\n\t el = el || row.getCells()[0].getElement(),\n\t oldControl = config.controlEl;\n\n\tif (config.children !== false) {\n\n\t\tif (config.open) {\n\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t_this47.collapseRow(row);\n\t\t\t});\n\t\t} else {\n\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t_this47.expandRow(row);\n\t\t\t});\n\t\t}\n\n\t\tconfig.controlEl.addEventListener(\"mousedown\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tif (oldControl && oldControl.parentNode === el) {\n\t\t\toldControl.parentNode.replaceChild(config.controlEl, oldControl);\n\t\t} else {\n\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t}\n\t}\n};\n\nDataTree.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nDataTree.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\nDataTree.prototype.getRows = function (rows) {\n\tvar _this48 = this;\n\n\tvar output = [];\n\n\trows.forEach(function (row, i) {\n\t\tvar config, children;\n\n\t\toutput.push(row);\n\n\t\tif (row instanceof Row) {\n\n\t\t\trow.create();\n\n\t\t\tconfig = row.modules.dataTree.children;\n\n\t\t\tif (!config.index && config.children !== false) {\n\t\t\t\tchildren = _this48.getChildren(row);\n\n\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\tchild.create();\n\t\t\t\t\toutput.push(child);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\nDataTree.prototype.getChildren = function (row, allChildren) {\n\tvar _this49 = this;\n\n\tvar config = row.modules.dataTree,\n\t children = [],\n\t output = [];\n\n\tif (config.children !== false && (config.open || allChildren)) {\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tif (this.table.modExists(\"filter\") && this.table.options.dataTreeFilter) {\n\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t} else {\n\t\t\tchildren = config.children;\n\t\t}\n\n\t\tif (this.table.modExists(\"sort\") && this.table.options.dataTreeSort) {\n\t\t\tthis.table.modules.sort.sort(children);\n\t\t}\n\n\t\tchildren.forEach(function (child) {\n\t\t\toutput.push(child);\n\n\t\t\tvar subChildren = _this49.getChildren(child);\n\n\t\t\tsubChildren.forEach(function (sub) {\n\t\t\t\toutput.push(sub);\n\t\t\t});\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.generateChildren = function (row) {\n\tvar _this50 = this;\n\n\tvar children = [];\n\n\tvar childArray = row.getData()[this.field];\n\n\tif (!Array.isArray(childArray)) {\n\t\tchildArray = [childArray];\n\t}\n\n\tchildArray.forEach(function (childData) {\n\t\tvar childRow = new Row(childData || {}, _this50.table.rowManager);\n\n\t\tchildRow.create();\n\n\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\tchildRow.modules.dataTree.parent = row;\n\n\t\tif (childRow.modules.dataTree.children) {\n\t\t\tchildRow.modules.dataTree.open = _this50.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t}\n\t\tchildren.push(childRow);\n\t});\n\n\treturn children;\n};\n\nDataTree.prototype.expandRow = function (row, silent) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tconfig.open = true;\n\n\t\trow.reinitialize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\tthis.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);\n\t}\n};\n\nDataTree.prototype.collapseRow = function (row) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tconfig.open = false;\n\n\t\trow.reinitialize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\tthis.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);\n\t}\n};\n\nDataTree.prototype.toggleRow = function (row) {\n\tvar config = row.modules.dataTree;\n\n\tif (config.children !== false) {\n\t\tif (config.open) {\n\t\t\tthis.collapseRow(row);\n\t\t} else {\n\t\t\tthis.expandRow(row);\n\t\t}\n\t}\n};\n\nDataTree.prototype.getTreeParent = function (row) {\n\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n};\n\nDataTree.prototype.getFilteredTreeChildren = function (row) {\n\tvar config = row.modules.dataTree,\n\t output = [],\n\t children;\n\n\tif (config.children) {\n\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tif (this.table.modExists(\"filter\") && this.table.options.dataTreeFilter) {\n\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t} else {\n\t\t\tchildren = config.children;\n\t\t}\n\n\t\tchildren.forEach(function (childRow) {\n\t\t\tif (childRow instanceof Row) {\n\t\t\t\toutput.push(childRow);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.rowDelete = function (row) {\n\tvar parent = row.modules.dataTree.parent,\n\t childIndex;\n\n\tif (parent) {\n\t\tchildIndex = this.findChildIndex(row, parent);\n\n\t\tif (childIndex !== false) {\n\t\t\tparent.data[this.field].splice(childIndex, 1);\n\t\t}\n\n\t\tif (!parent.data[this.field].length) {\n\t\t\tdelete parent.data[this.field];\n\t\t}\n\n\t\tthis.initializeRow(parent);\n\t\tthis.layoutRow(parent);\n\t}\n\n\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n};\n\nDataTree.prototype.addTreeChildRow = function (row, data, top, index) {\n\tvar childIndex = false;\n\n\tif (typeof data === \"string\") {\n\t\tdata = JSON.parse(data);\n\t}\n\n\tif (!Array.isArray(row.data[this.field])) {\n\t\trow.data[this.field] = [];\n\n\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\n\t}\n\n\tif (typeof index !== \"undefined\") {\n\t\tchildIndex = this.findChildIndex(index, row);\n\n\t\tif (childIndex !== false) {\n\t\t\trow.data[this.field].splice(top ? childIndex : childIndex + 1, 0, data);\n\t\t}\n\t}\n\n\tif (childIndex === false) {\n\t\tif (top) {\n\t\t\trow.data[this.field].unshift(data);\n\t\t} else {\n\t\t\trow.data[this.field].push(data);\n\t\t}\n\t}\n\n\tthis.initializeRow(row);\n\tthis.layoutRow(row);\n\n\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n};\n\nDataTree.prototype.findChildIndex = function (subject, parent) {\n\tvar _this51 = this;\n\n\tvar match = false;\n\n\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\tif (subject instanceof Row) {\n\t\t\t//subject is row element\n\t\t\tmatch = subject.data;\n\t\t} else if (subject instanceof RowComponent) {\n\t\t\t//subject is public row component\n\t\t\tmatch = subject._getSelf().data;\n\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\t\t\tif (parent.modules.dataTree) {\n\t\t\t\tmatch = parent.modules.dataTree.children.find(function (childRow) {\n\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\n\t\t\t\t});\n\n\t\t\t\tif (match) {\n\t\t\t\t\tmatch = match.data;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (typeof subject == \"undefined\" || subject === null) {\n\t\tmatch = false;\n\t} else {\n\t\t//subject should be treated as the index of the row\n\t\tmatch = parent.data[this.field].find(function (row) {\n\t\t\treturn row.data[_this51.table.options.index] == subject;\n\t\t});\n\t}\n\n\tif (match) {\n\n\t\tif (Array.isArray(parent.data[this.field])) {\n\t\t\tmatch = parent.data[this.field].indexOf(match);\n\t\t}\n\n\t\tif (match == -1) {\n\t\t\tmatch = false;\n\t\t}\n\t}\n\n\t//catch all for any other type of input\n\n\treturn match;\n};\n\nDataTree.prototype.getTreeChildren = function (row, component, recurse) {\n\tvar _this52 = this;\n\n\tvar config = row.modules.dataTree,\n\t output = [];\n\n\tif (config.children) {\n\n\t\tif (!Array.isArray(config.children)) {\n\t\t\tconfig.children = this.generateChildren(row);\n\t\t}\n\n\t\tconfig.children.forEach(function (childRow) {\n\t\t\tif (childRow instanceof Row) {\n\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\n\n\t\t\t\tif (recurse) {\n\t\t\t\t\toutput = output.concat(_this52.getTreeChildren(childRow, component, recurse));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn output;\n};\n\nDataTree.prototype.checkForRestyle = function (cell) {\n\tif (!cell.row.cells.indexOf(cell)) {\n\t\tcell.row.reinitialize();\n\t}\n};\n\nDataTree.prototype.getChildField = function () {\n\treturn this.field;\n};\n\nDataTree.prototype.redrawNeeded = function (data) {\n\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n};\n\nTabulator.prototype.registerModule(\"dataTree\", DataTree);\n\nvar Download = function Download(table) {\n\tthis.table = table; //hold Tabulator object\n};\n\n//trigger file download\nDownload.prototype.download = function (type, filename, options, range, interceptCallback) {\n\tvar self = this,\n\t downloadFunc = false;\n\n\tfunction buildLink(data, mime) {\n\t\tif (interceptCallback) {\n\t\t\tif (interceptCallback === true) {\n\t\t\t\tself.triggerDownload(data, mime, type, filename, true);\n\t\t\t} else {\n\t\t\t\tinterceptCallback(data);\n\t\t\t}\n\t\t} else {\n\t\t\tself.triggerDownload(data, mime, type, filename);\n\t\t}\n\t}\n\n\tif (typeof type == \"function\") {\n\t\tdownloadFunc = type;\n\t} else {\n\t\tif (self.downloaders[type]) {\n\t\t\tdownloadFunc = self.downloaders[type];\n\t\t} else {\n\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t}\n\t}\n\n\tif (downloadFunc) {\n\t\tvar list = this.generateExportList(range);\n\n\t\tdownloadFunc.call(this.table, list, options || {}, buildLink);\n\t}\n};\n\nDownload.prototype.generateExportList = function (range) {\n\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\n\n\t//assign group header formatter\n\tvar groupHeader = this.table.options.groupHeaderDownload;\n\n\tif (groupHeader && !Array.isArray(groupHeader)) {\n\t\tgroupHeader = [groupHeader];\n\t}\n\n\tlist.forEach(function (row) {\n\t\tvar group;\n\n\t\tif (row.type === \"group\") {\n\t\t\tgroup = row.columns[0];\n\n\t\t\tif (groupHeader && groupHeader[row.indent]) {\n\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn list;\n};\n\nDownload.prototype.triggerDownload = function (data, mime, type, filename, newTab) {\n\tvar element = document.createElement('a'),\n\t blob = new Blob([data], { type: mime }),\n\t filename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\n\tblob = this.table.options.downloadReady.call(this.table, data, blob);\n\n\tif (blob) {\n\n\t\tif (newTab) {\n\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t} else {\n\t\t\tif (navigator.msSaveOrOpenBlob) {\n\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t} else {\n\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t//set file title\n\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t//trigger download\n\t\t\t\telement.style.display = 'none';\n\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\telement.click();\n\n\t\t\t\t//remove temporary link element\n\t\t\t\tdocument.body.removeChild(element);\n\t\t\t}\n\t\t}\n\n\t\tif (this.table.options.downloadComplete) {\n\t\t\tthis.table.options.downloadComplete();\n\t\t}\n\t}\n};\n\nDownload.prototype.commsReceived = function (table, action, data) {\n\tswitch (action) {\n\t\tcase \"intercept\":\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\tbreak;\n\t}\n};\n\n//downloaders\nDownload.prototype.downloaders = {\n\tcsv: function csv(list, options, setFileContents) {\n\t\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\n\t\t fileContents = [],\n\t\t headers = [];\n\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = [];\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"group\":\n\t\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"header\":\n\t\t\t\t\trow.columns.forEach(function (col, i) {\n\t\t\t\t\t\tif (col && col.depth === 1) {\n\t\t\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : '\"' + String(col.value).split('\"').join('\"\"') + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\trow.columns.forEach(function (col) {\n\n\t\t\t\t\t\tif (col) {\n\n\t\t\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfileContents.push(item.join(delimiter));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (headers.length) {\n\t\t\tfileContents.unshift(headers.join(delimiter));\n\t\t}\n\n\t\tfileContents = fileContents.join(\"\\n\");\n\n\t\tif (options.bom) {\n\t\t\tfileContents = '\\uFEFF' + fileContents;\n\t\t}\n\n\t\tsetFileContents(fileContents, \"text/csv\");\n\t},\n\n\tjson: function json(list, options, setFileContents) {\n\t\tvar fileContents = [];\n\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = {};\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"header\":\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"group\":\n\t\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\trow.columns.forEach(function (col) {\n\t\t\t\t\t\tif (col) {\n\t\t\t\t\t\t\titem[col.component.getField()] = col.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tfileContents.push(item);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tfileContents = JSON.stringify(fileContents, null, '\\t');\n\n\t\tsetFileContents(fileContents, \"application/json\");\n\t},\n\n\tpdf: function pdf(list, options, setFileContents) {\n\t\tvar header = [],\n\t\t body = [],\n\t\t autoTableParams = {},\n\t\t rowGroupStyles = options.rowGroupStyles || {\n\t\t\tfontStyle: \"bold\",\n\t\t\tfontSize: 12,\n\t\t\tcellPadding: 6,\n\t\t\tfillColor: 220\n\t\t},\n\t\t rowCalcStyles = options.rowCalcStyles || {\n\t\t\tfontStyle: \"bold\",\n\t\t\tfontSize: 10,\n\t\t\tcellPadding: 4,\n\t\t\tfillColor: 232\n\t\t},\n\t\t jsPDFParams = options.jsPDF || {},\n\t\t title = options && options.title ? options.title : \"\";\n\n\t\tif (!jsPDFParams.orientation) {\n\t\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t\t}\n\n\t\tif (!jsPDFParams.unit) {\n\t\t\tjsPDFParams.unit = \"pt\";\n\t\t}\n\n\t\t//parse row list\n\t\tlist.forEach(function (row) {\n\t\t\tvar item = {};\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"header\":\n\t\t\t\t\theader.push(parseRow(row));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"group\":\n\t\t\t\t\tbody.push(parseRow(row, rowGroupStyles));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\tbody.push(parseRow(row, rowCalcStyles));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"row\":\n\t\t\t\t\tbody.push(parseRow(row));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tfunction parseRow(row, styles) {\n\t\t\tvar rowData = [];\n\n\t\t\trow.columns.forEach(function (col) {\n\t\t\t\tvar cell;\n\n\t\t\t\tif (col) {\n\t\t\t\t\tswitch (_typeof(col.value)) {\n\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\tcol.value = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcell = {\n\t\t\t\t\t\tcontent: col.value,\n\t\t\t\t\t\tcolSpan: col.width,\n\t\t\t\t\t\trowSpan: col.height\n\t\t\t\t\t};\n\n\t\t\t\t\tif (styles) {\n\t\t\t\t\t\tcell.styles = styles;\n\t\t\t\t\t}\n\n\t\t\t\t\trowData.push(cell);\n\t\t\t\t} else {\n\t\t\t\t\trowData.push(\"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn rowData;\n\t\t}\n\n\t\t//configure PDF\n\t\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\t\tif (options && options.autoTable) {\n\t\t\tif (typeof options.autoTable === \"function\") {\n\t\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t\t} else {\n\t\t\t\tautoTableParams = options.autoTable;\n\t\t\t}\n\t\t}\n\n\t\tif (title) {\n\t\t\tautoTableParams.addPageContent = function (data) {\n\t\t\t\tdoc.text(title, 40, 30);\n\t\t\t};\n\t\t}\n\n\t\tautoTableParams.head = header;\n\t\tautoTableParams.body = body;\n\n\t\tdoc.autoTable(autoTableParams);\n\n\t\tif (options && options.documentProcessing) {\n\t\t\toptions.documentProcessing(doc);\n\t\t}\n\n\t\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n\t},\n\n\txlsx: function xlsx(list, options, setFileContents) {\n\t\tvar self = this,\n\t\t sheetName = options.sheetName || \"Sheet1\",\n\t\t workbook = XLSX.utils.book_new(),\n\t\t output;\n\n\t\tworkbook.SheetNames = [];\n\t\tworkbook.Sheets = {};\n\n\t\tfunction generateSheet() {\n\t\t\tvar rows = [],\n\t\t\t merges = [],\n\t\t\t worksheet = {},\n\t\t\t range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {\n\t\t\t\t\t\treturn a + (b && b.width ? b.width : 1);\n\t\t\t\t\t}, 0) : 0, r: list.length } };\n\n\t\t\t//parse row list\n\t\t\tlist.forEach(function (row, i) {\n\t\t\t\tvar rowData = [];\n\n\t\t\t\trow.columns.forEach(function (col, j) {\n\n\t\t\t\t\tif (col) {\n\t\t\t\t\t\trowData.push(!(col.value instanceof Date) && _typeof(col.value) === \"object\" ? JSON.stringify(col.value) : col.value);\n\n\t\t\t\t\t\tif (col.width > 1 || col.height > -1) {\n\t\t\t\t\t\t\tmerges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trowData.push(\"\");\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\trows.push(rowData);\n\t\t\t});\n\n\t\t\t//convert rows to worksheet\n\t\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\n\n\t\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\t\tif (merges.length) {\n\t\t\t\tworksheet[\"!merges\"] = merges;\n\t\t\t}\n\n\t\t\treturn worksheet;\n\t\t}\n\n\t\tif (options.sheetOnly) {\n\t\t\tsetFileContents(generateSheet());\n\t\t\treturn;\n\t\t}\n\n\t\tif (options.sheets) {\n\t\t\tfor (var sheet in options.sheets) {\n\n\t\t\t\tif (options.sheets[sheet] === true) {\n\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t\t} else {\n\n\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\t\tthis.modules.comms.send(options.sheets[sheet], \"download\", \"intercept\", {\n\t\t\t\t\t\ttype: \"xlsx\",\n\t\t\t\t\t\toptions: { sheetOnly: true },\n\t\t\t\t\t\tactive: self.active,\n\t\t\t\t\t\tintercept: function intercept(data) {\n\t\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tworkbook.SheetNames.push(sheetName);\n\t\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t\t}\n\n\t\tif (options.documentProcessing) {\n\t\t\tworkbook = options.documentProcessing(workbook);\n\t\t}\n\n\t\t//convert workbook to binary array\n\t\tfunction s2ab(s) {\n\t\t\tvar buf = new ArrayBuffer(s.length);\n\t\t\tvar view = new Uint8Array(buf);\n\t\t\tfor (var i = 0; i != s.length; ++i) {\n\t\t\t\tview[i] = s.charCodeAt(i) & 0xFF;\n\t\t\t}return buf;\n\t\t}\n\n\t\toutput = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });\n\n\t\tsetFileContents(s2ab(output), \"application/octet-stream\");\n\t},\n\n\thtml: function html(list, options, setFileContents) {\n\t\tif (this.modExists(\"export\", true)) {\n\t\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\n\t\t}\n\t}\n\n};\n\nTabulator.prototype.registerModule(\"download\", Download);\n\nvar Edit = function Edit(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.currentCell = false; //hold currently editing cell\n\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\n\tthis.recursionBlock = false; //prevent focus recursion\n\tthis.invalidEdit = false;\n\tthis.editedCells = [];\n};\n\n//initialize column editor\nEdit.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = {\n\t\teditor: false,\n\t\tblocked: false,\n\t\tcheck: column.definition.editable,\n\t\tparams: column.definition.editorParams || {}\n\t};\n\n\t//set column editor\n\tswitch (_typeof(column.definition.editor)) {\n\t\tcase \"string\":\n\n\t\t\tif (column.definition.editor === \"tick\") {\n\t\t\t\tcolumn.definition.editor = \"tickCross\";\n\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t}\n\n\t\t\tif (self.editors[column.definition.editor]) {\n\t\t\t\tconfig.editor = self.editors[column.definition.editor];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tconfig.editor = column.definition.editor;\n\t\t\tbreak;\n\n\t\tcase \"boolean\":\n\n\t\t\tif (column.definition.editor === true) {\n\n\t\t\t\tif (typeof column.definition.formatter !== \"function\") {\n\n\t\t\t\t\tif (column.definition.formatter === \"tick\") {\n\t\t\t\t\t\tcolumn.definition.formatter = \"tickCross\";\n\t\t\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.editors[column.definition.formatter]) {\n\t\t\t\t\t\tconfig.editor = self.editors[column.definition.formatter];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig.editor = self.editors[\"input\"];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif (config.editor) {\n\t\tcolumn.modules.edit = config;\n\t}\n};\n\nEdit.prototype.getCurrentCell = function () {\n\treturn this.currentCell ? this.currentCell.getComponent() : false;\n};\n\nEdit.prototype.clearEditor = function (cancel) {\n\tvar cell = this.currentCell,\n\t cellEl;\n\n\tthis.invalidEdit = false;\n\n\tif (cell) {\n\t\tthis.currentCell = false;\n\n\t\tcellEl = cell.getElement();\n\n\t\tif (cancel) {\n\t\t\tcell.validate();\n\t\t} else {\n\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\n\t\t}\n\n\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\twhile (cellEl.firstChild) {\n\t\t\tcellEl.removeChild(cellEl.firstChild);\n\t\t}cell.row.getElement().classList.remove(\"tabulator-row-editing\");\n\t}\n};\n\nEdit.prototype.cancelEdit = function () {\n\n\tif (this.currentCell) {\n\t\tvar cell = this.currentCell;\n\t\tvar component = this.currentCell.getComponent();\n\n\t\tthis.clearEditor(true);\n\t\tcell.setValueActual(cell.getValue());\n\t\tcell.cellRendered();\n\n\t\tif (cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight) {\n\t\t\tcell.row.normalizeHeight(true);\n\t\t}\n\n\t\tif (cell.column.cellEvents.cellEditCancelled) {\n\t\t\tcell.column.cellEvents.cellEditCancelled.call(this.table, component);\n\t\t}\n\n\t\tthis.table.options.cellEditCancelled.call(this.table, component);\n\t}\n};\n\n//return a formatted value for a cell\nEdit.prototype.bindEditor = function (cell) {\n\tvar self = this,\n\t element = cell.getElement(true);\n\n\telement.setAttribute(\"tabindex\", 0);\n\n\telement.addEventListener(\"click\", function (e) {\n\t\tif (!element.classList.contains(\"tabulator-editing\")) {\n\t\t\telement.focus({ preventScroll: true });\n\t\t}\n\t});\n\n\telement.addEventListener(\"mousedown\", function (e) {\n\t\tif (e.button === 2) {\n\t\t\te.preventDefault();\n\t\t} else {\n\t\t\tself.mouseClick = true;\n\t\t}\n\t});\n\n\telement.addEventListener(\"focus\", function (e) {\n\t\tif (!self.recursionBlock) {\n\t\t\tself.edit(cell, e, false);\n\t\t}\n\t});\n};\n\nEdit.prototype.focusCellNoEvent = function (cell, block) {\n\tthis.recursionBlock = true;\n\tif (!(block && this.table.browser === \"ie\")) {\n\t\tcell.getElement().focus({ preventScroll: true });\n\t}\n\tthis.recursionBlock = false;\n};\n\nEdit.prototype.editCell = function (cell, forceEdit) {\n\tthis.focusCellNoEvent(cell);\n\tthis.edit(cell, false, forceEdit);\n};\n\nEdit.prototype.focusScrollAdjust = function (cell) {\n\tif (this.table.rowManager.getRenderMode() == \"virtual\") {\n\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t rowEl = cell.row.getElement(),\n\t\t offset = rowEl.offsetTop;\n\n\t\tif (rowEl.offsetTop < topEdge) {\n\t\t\tthis.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;\n\t\t} else {\n\t\t\tif (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {\n\t\t\t\tthis.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;\n\t\t\t}\n\t\t}\n\n\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\n\t\t rightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\n\t\t cellEl = cell.getElement(),\n\t\t offset = cellEl.offsetLeft;\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\n\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\n\t\t}\n\n\t\tif (this.table.options.virtualDomHoz) {\n\t\t\tleftEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\n\t\t\trightEdge -= parseInt(this.table.vdomHoz.vDomPadLeft);\n\t\t}\n\n\t\tif (cellEl.offsetLeft < leftEdge) {\n\n\t\t\tthis.table.rowManager.element.scrollLeft -= leftEdge - cellEl.offsetLeft;\n\t\t} else {\n\t\t\tif (cellEl.offsetLeft + cellEl.offsetWidth > rightEdge) {\n\t\t\t\tthis.table.rowManager.element.scrollLeft += cellEl.offsetLeft + cellEl.offsetWidth - rightEdge;\n\t\t\t}\n\t\t}\n\t}\n};\n\nEdit.prototype.edit = function (cell, e, forceEdit) {\n\tvar self = this,\n\t allowEdit = true,\n\t rendered = function rendered() {},\n\t element = cell.getElement(),\n\t cellEditor,\n\t component,\n\t params;\n\n\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\tif (this.currentCell) {\n\t\tif (!this.invalidEdit) {\n\t\t\tthis.cancelEdit();\n\t\t}\n\t\treturn;\n\t}\n\n\t//handle successfull value change\n\tfunction success(value) {\n\t\tif (self.currentCell === cell) {\n\t\t\tvar valid = true;\n\n\t\t\tif (cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\") {\n\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\n\t\t\t}\n\n\t\t\tif (valid === true || self.table.options.validationMode === \"highlight\") {\n\t\t\t\tself.clearEditor();\n\n\t\t\t\tif (!cell.modules.edit) {\n\t\t\t\t\tcell.modules.edit = {};\n\t\t\t\t}\n\n\t\t\t\tcell.modules.edit.edited = true;\n\n\t\t\t\tif (self.editedCells.indexOf(cell) == -1) {\n\t\t\t\t\tself.editedCells.push(cell);\n\t\t\t\t}\n\n\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t\t}\n\n\t\t\t\tif (valid !== true) {\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\n\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tself.invalidEdit = true;\n\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\n\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\trendered();\n\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t}\n\t}\n\n\t//handle aborted edit\n\tfunction cancel() {\n\t\tif (self.currentCell === cell) {\n\t\t\tself.cancelEdit();\n\n\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t}\n\t\t} else {\n\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t}\n\t}\n\n\tfunction onRendered(callback) {\n\t\trendered = callback;\n\t}\n\n\tif (!cell.column.modules.edit.blocked) {\n\t\tif (e) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\tswitch (_typeof(cell.column.modules.edit.check)) {\n\t\t\tcase \"function\":\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (allowEdit || forceEdit) {\n\n\t\t\tself.cancelEdit();\n\n\t\t\tself.currentCell = cell;\n\n\t\t\tthis.focusScrollAdjust(cell);\n\n\t\t\tcomponent = cell.getComponent();\n\n\t\t\tif (this.mouseClick) {\n\t\t\t\tthis.mouseClick = false;\n\n\t\t\t\tif (cell.column.cellEvents.cellClick) {\n\t\t\t\t\tcell.column.cellEvents.cellClick.call(this.table, e, component);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cell.column.cellEvents.cellEditing) {\n\t\t\t\tcell.column.cellEvents.cellEditing.call(this.table, component);\n\t\t\t}\n\n\t\t\tself.table.options.cellEditing.call(this.table, component);\n\n\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\n\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\n\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\tif (cellEditor !== false) {\n\n\t\t\t\tif (cellEditor instanceof Node) {\n\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\n\t\t\t\t\twhile (element.firstChild) {\n\t\t\t\t\t\telement.removeChild(element.firstChild);\n\t\t\t\t\t}element.appendChild(cellEditor);\n\n\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\trendered();\n\n\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\tvar children = element.children;\n\n\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\telement.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telement.blur();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.mouseClick = false;\n\t\t\telement.blur();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tthis.mouseClick = false;\n\t\telement.blur();\n\t\treturn false;\n\t}\n};\n\nEdit.prototype.maskInput = function (el, options) {\n\tvar mask = options.mask,\n\t maskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\t maskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\t maskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\n\t success = false;\n\n\tfunction fillSymbols(index) {\n\t\tvar symbol = mask[index];\n\t\tif (typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {\n\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\tfillSymbols(index + 1);\n\t\t}\n\t}\n\n\tel.addEventListener(\"keydown\", function (e) {\n\t\tvar index = el.value.length,\n\t\t char = e.key;\n\n\t\tif (e.keyCode > 46) {\n\t\t\tif (index >= mask.length) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tsuccess = false;\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tswitch (mask[index]) {\n\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\tif (char.toUpperCase() == char.toLowerCase()) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\tif (isNaN(char)) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (char !== mask[index]) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsuccess = true;\n\t\t}\n\n\t\treturn;\n\t});\n\n\tel.addEventListener(\"keyup\", function (e) {\n\t\tif (e.keyCode > 46) {\n\t\t\tif (options.maskAutoFill) {\n\t\t\t\tfillSymbols(el.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (!el.placeholder) {\n\t\tel.placeholder = mask;\n\t}\n\n\tif (options.maskAutoFill) {\n\t\tfillSymbols(el.value.length);\n\t}\n};\n\nEdit.prototype.getEditedCells = function () {\n\tvar output = [];\n\n\tthis.editedCells.forEach(function (cell) {\n\t\toutput.push(cell.getComponent());\n\t});\n\n\treturn output;\n};\n\nEdit.prototype.clearEdited = function (cell) {\n\tvar editIndex;\n\n\tif (cell.modules.edit && cell.modules.edit.edited) {\n\t\tcell.modules.edit.edited = false;\n\n\t\tif (cell.modules.validate) {\n\t\t\tcell.modules.validate.invalid = false;\n\t\t}\n\t}\n\n\teditIndex = this.editedCells.indexOf(cell);\n\n\tif (editIndex > -1) {\n\t\tthis.editedCells.splice(editIndex, 1);\n\t}\n};\n\n//default data editors\nEdit.prototype.editors = {\n\n\t//input element\n\tinput: function input(cell, onRendered, success, cancel, editorParams) {\n\n\t\t//create and style input\n\t\tvar cellValue = cell.getValue(),\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\t\t});\n\n\t\tfunction onChange(e) {\n\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\t\t\t\tif (success(input.value)) {\n\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur or change\n\t\tinput.addEventListener(\"change\", onChange);\n\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\t// case 9:\n\t\t\t\tcase 13:\n\t\t\t\t\tonChange(e);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//resizable text area element\n\ttextarea: function textarea(cell, onRendered, success, cancel, editorParams) {\n\t\tvar self = this,\n\t\t cellValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"hybrid\",\n\t\t value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\t\t count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\n\t\t input = document.createElement(\"textarea\"),\n\t\t scrollHeight = 0;\n\n\t\t//create and style input\n\t\tinput.style.display = \"block\";\n\t\tinput.style.padding = \"2px\";\n\t\tinput.style.height = \"100%\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\tinput.style.whiteSpace = \"pre-wrap\";\n\t\tinput.style.resize = \"none\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = value;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\tinput.scrollHeight;\n\t\t\tinput.style.height = input.scrollHeight + \"px\";\n\t\t\tcell.getRow().normalizeHeight();\n\t\t});\n\n\t\tfunction onChange(e) {\n\n\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\n\t\t\t\tif (success(input.value)) {\n\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t\t}, 300);\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur or change\n\t\tinput.addEventListener(\"change\", onChange);\n\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\tinput.addEventListener(\"keyup\", function () {\n\n\t\t\tinput.style.height = \"\";\n\n\t\t\tvar heightNow = input.scrollHeight;\n\n\t\t\tinput.style.height = heightNow + \"px\";\n\n\t\t\tif (heightNow != scrollHeight) {\n\t\t\t\tscrollHeight = heightNow;\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart !== input.value.length) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//input element with type of number\n\tnumber: function number(cell, onRendered, success, cancel, editorParams) {\n\n\t\tvar cellValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", \"number\");\n\n\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t}\n\n\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t}\n\n\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t}\n\n\t\t//create and style input\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = cellValue;\n\n\t\tvar blurFunc = function blurFunc(e) {\n\t\t\tonChange();\n\t\t};\n\n\t\tonRendered(function () {\n\t\t\t//submit new value on blur\n\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\t\t});\n\n\t\tfunction onChange() {\n\t\t\tvar value = input.value;\n\n\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif (value !== cellValue) {\n\t\t\t\tif (success(value)) {\n\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 13:\n\t\t\t\t\t// case 9:\n\t\t\t\t\tonChange();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 38: //up arrow\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tif (vertNav == \"editor\") {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\treturn input;\n\t},\n\n\t//input element with type of number\n\trange: function range(cell, onRendered, success, cancel, editorParams) {\n\n\t\tvar cellValue = cell.getValue(),\n\t\t input = document.createElement(\"input\");\n\n\t\tinput.setAttribute(\"type\", \"range\");\n\n\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t}\n\n\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t}\n\n\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t}\n\n\t\t//create and style input\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = cellValue;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus({ preventScroll: true });\n\t\t\tinput.style.height = \"100%\";\n\t\t});\n\n\t\tfunction onChange() {\n\t\t\tvar value = input.value;\n\n\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\tvalue = Number(value);\n\t\t\t}\n\n\t\t\tif (value != cellValue) {\n\t\t\t\tif (success(value)) {\n\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tonChange();\n\t\t});\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 13:\n\t\t\t\t\t// case 9:\n\t\t\t\t\tonChange();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn input;\n\t},\n\n\t//select\n\tselect: function select(cell, onRendered, success, cancel, editorParams) {\n\t\tvar _this53 = this;\n\n\t\tvar self = this,\n\t\t cellEl = cell.getElement(),\n\t\t initialValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? Array.isArray(initialValue) ? initialValue : [initialValue] : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : [],\n\t\t input = document.createElement(\"input\"),\n\t\t listEl = document.createElement(\"div\"),\n\t\t multiselect = editorParams.multiselect,\n\t\t dataItems = [],\n\t\t currentItem = {},\n\t\t displayItems = [],\n\t\t currentItems = [],\n\t\t blurable = true,\n\t\t blockListShow = false,\n\t\t searchWord = \"\",\n\t\t searchWordTimeout = null;\n\n\t\tif (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === \"object\" && !editorParams.values) {\n\t\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\n\t\t\teditorParams = { values: editorParams };\n\t\t}\n\n\t\tfunction getUniqueColumnValues(field) {\n\t\t\tvar output = {},\n\t\t\t data = self.table.getData(),\n\t\t\t column;\n\n\t\t\tif (field) {\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t} else {\n\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t}\n\n\t\t\tif (column) {\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\t}\n\n\t\t\treturn Object.keys(output);\n\t\t}\n\n\t\tfunction parseItems(inputValues, curentValues) {\n\t\t\tvar dataList = [];\n\t\t\tvar displayList = [];\n\n\t\t\tfunction processComplexListItem(item) {\n\t\t\t\tvar item = {\n\t\t\t\t\tlabel: item.label,\n\t\t\t\t\tvalue: item.value,\n\t\t\t\t\titemParams: item.itemParams,\n\t\t\t\t\telementAttributes: item.elementAttributes,\n\t\t\t\t\telement: false\n\t\t\t\t};\n\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t// }\n\n\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\tsetItem(item);\n\t\t\t\t}\n\n\t\t\t\tdataList.push(item);\n\t\t\t\tdisplayList.push(item);\n\n\t\t\t\treturn item;\n\t\t\t}\n\n\t\t\tif (typeof inputValues == \"function\") {\n\t\t\t\tinputValues = inputValues(cell);\n\t\t\t}\n\n\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\tinputValues.forEach(function (value) {\n\t\t\t\t\tvar item;\n\n\t\t\t\t\tif ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\") {\n\n\t\t\t\t\t\tif (value.options) {\n\t\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\t\tlabel: value.label,\n\t\t\t\t\t\t\t\tgroup: true,\n\t\t\t\t\t\t\t\titemParams: value.itemParams,\n\t\t\t\t\t\t\t\telementAttributes: value.elementAttributes,\n\t\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tdisplayList.push(item);\n\n\t\t\t\t\t\t\tvalue.options.forEach(function (item) {\n\t\t\t\t\t\t\t\tprocessComplexListItem(item);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprocessComplexListItem(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\tlabel: value,\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\t\t\tsetItem(item);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdataList.push(item);\n\t\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\tvar item = {\n\t\t\t\t\t\tlabel: inputValues[key],\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\telement: false\n\t\t\t\t\t};\n\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\n\t\t\t\t\t// \tsetCurrentItem(item);\n\t\t\t\t\t// }\n\n\t\t\t\t\tif (curentValues.indexOf(item.value) > -1) {\n\t\t\t\t\t\tsetItem(item);\n\t\t\t\t\t}\n\n\t\t\t\t\tdataList.push(item);\n\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\tdataList.sort(function (a, b) {\n\t\t\t\t\treturn a.label < b.label ? -1 : a.label > b.label ? 1 : 0;\n\t\t\t\t});\n\n\t\t\t\tdisplayList.sort(function (a, b) {\n\t\t\t\t\treturn a.label < b.label ? -1 : a.label > b.label ? 1 : 0;\n\t\t\t\t});\n\n\t\t\t\tif (editorParams.sortValuesList !== \"asc\") {\n\t\t\t\t\tdataList.reverse();\n\t\t\t\t\tdisplayList.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdataItems = dataList;\n\t\t\tdisplayItems = displayList;\n\n\t\t\tfillList();\n\t\t}\n\n\t\tfunction fillList() {\n\t\t\twhile (listEl.firstChild) {\n\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t}displayItems.forEach(function (item) {\n\n\t\t\t\tvar el = item.element;\n\n\t\t\t\tif (!el) {\n\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\n\t\t\t\t\tif (item.group) {\n\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\n\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\n\t\t\t\t\t\tel.addEventListener(\"click\", function () {\n\t\t\t\t\t\t\tblockListShow = true;\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tblockListShow = false;\n\t\t\t\t\t\t\t}, 10);\n\n\t\t\t\t\t\t\t// setCurrentItem(item);\n\t\t\t\t\t\t\t// chooseItem();\n\t\t\t\t\t\t\tif (multiselect) {\n\t\t\t\t\t\t\t\ttoggleItem(item);\n\t\t\t\t\t\t\t\tinput.focus();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tchooseItem(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// if(item === currentItem){\n\t\t\t\t\t\t// \tel.classList.add(\"active\");\n\t\t\t\t\t\t// }\n\n\t\t\t\t\t\tif (currentItems.indexOf(item) > -1) {\n\t\t\t\t\t\t\tel.classList.add(\"active\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item.elementAttributes && _typeof(item.elementAttributes) == \"object\") {\n\t\t\t\t\t\tfor (var key in item.elementAttributes) {\n\t\t\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tel.addEventListener(\"mousedown\", function () {\n\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t});\n\n\t\t\t\t\titem.element = el;\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(el);\n\t\t\t});\n\t\t}\n\n\t\tfunction setCurrentItem(item, active) {\n\n\t\t\tif (!multiselect && currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t}\n\n\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"focused\");\n\t\t\t}\n\n\t\t\tcurrentItem = item;\n\n\t\t\tif (item.element) {\n\t\t\t\titem.element.classList.add(\"focused\");\n\t\t\t\tif (active) {\n\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (item && item.element && item.element.scrollIntoView) {\n\t\t\t\titem.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\n\t\t\t}\n\t\t}\n\n\t\t// function chooseItem(){\n\t\t// \thideList();\n\n\t\t// \tif(initialValue !== currentItem.value){\n\t\t// \t\tinitialValue = currentItem.value;\n\t\t// \t\tsuccess(currentItem.value);\n\t\t// \t}else{\n\t\t// \t\tcancel();\n\t\t// \t}\n\t\t// }\n\n\t\tfunction setItem(item) {\n\t\t\tvar index = currentItems.indexOf(item);\n\n\t\t\tif (index == -1) {\n\t\t\t\tcurrentItems.push(item);\n\t\t\t\tsetCurrentItem(item, true);\n\t\t\t}\n\n\t\t\tfillInput();\n\t\t}\n\n\t\tfunction unsetItem(index) {\n\t\t\tvar item = currentItems[index];\n\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentItems.splice(index, 1);\n\t\t\t\tif (item.element) {\n\t\t\t\t\titem.element.classList.remove(\"active\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction toggleItem(item) {\n\t\t\tif (!item) {\n\t\t\t\titem = currentItem;\n\t\t\t}\n\n\t\t\tvar index = currentItems.indexOf(item);\n\n\t\t\tif (index > -1) {\n\t\t\t\tunsetItem(index);\n\t\t\t} else {\n\t\t\t\tif (multiselect !== true && currentItems.length >= multiselect) {\n\t\t\t\t\tunsetItem(0);\n\t\t\t\t}\n\n\t\t\t\tsetItem(item);\n\t\t\t}\n\n\t\t\tfillInput();\n\t\t}\n\n\t\tfunction chooseItem(item) {\n\t\t\thideList();\n\n\t\t\tif (!item) {\n\t\t\t\titem = currentItem;\n\t\t\t}\n\n\t\t\tif (item) {\n\t\t\t\tinput.value = item.label;\n\t\t\t\tsuccess(item.value);\n\t\t\t}\n\n\t\t\tinitialDisplayValue = [item.value];\n\t\t}\n\n\t\tfunction chooseItems(silent) {\n\t\t\tif (!silent) {\n\t\t\t\thideList();\n\t\t\t}\n\n\t\t\tvar output = [];\n\n\t\t\tcurrentItems.forEach(function (item) {\n\t\t\t\toutput.push(item.value);\n\t\t\t});\n\n\t\t\tinitialDisplayValue = output;\n\n\t\t\tsuccess(output);\n\t\t}\n\n\t\tfunction fillInput() {\n\t\t\tvar output = [];\n\n\t\t\tcurrentItems.forEach(function (item) {\n\t\t\t\toutput.push(item.label);\n\t\t\t});\n\n\t\t\tinput.value = output.join(\", \");\n\n\t\t\tif (self.currentCell === false) {\n\t\t\t\tchooseItems(true);\n\t\t\t}\n\t\t}\n\n\t\tfunction unsetItems() {\n\n\t\t\tvar len = currentItems.length;\n\n\t\t\tfor (var _i9 = 0; _i9 < len; _i9++) {\n\t\t\t\tunsetItem(0);\n\t\t\t}\n\t\t}\n\n\t\tfunction cancelItem() {\n\t\t\thideList();\n\t\t\tcancel();\n\t\t}\n\n\t\tfunction showList() {\n\t\t\tcurrentItems = [];\n\n\t\t\tif (!listEl.parentNode) {\n\t\t\t\tif (editorParams.values === true) {\n\t\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\n\t\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\n\t\t\t\t} else {\n\t\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\n\t\t\t\t}\n\n\t\t\t\tvar offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\n\t\t\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\tblurable = false;\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t}, 10);\n\t\t\t\t});\n\n\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction hideList() {\n\t\t\tif (listEl.parentNode) {\n\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t}\n\n\t\t\tremoveScrollListener();\n\t\t}\n\n\t\tfunction removeScrollListener() {\n\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t}\n\n\t\tfunction scrollTovalue(char) {\n\n\t\t\tclearTimeout(searchWordTimeout);\n\n\t\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\n\t\t\tsearchWord += character.toLowerCase();\n\n\t\t\tvar match = dataItems.find(function (item) {\n\t\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\n\t\t\t});\n\n\t\t\tif (match) {\n\t\t\t\tsetCurrentItem(match, !multiselect);\n\t\t\t}\n\n\t\t\tsearchWordTimeout = setTimeout(function () {\n\t\t\t\tsearchWord = \"\";\n\t\t\t}, 800);\n\t\t}\n\n\t\t//style input\n\t\tinput.setAttribute(\"type\", \"text\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\t\tinput.style.cursor = \"default\";\n\t\tinput.readOnly = this.currentCell != false;\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\n\n\t\t// if(editorParams.values === true){\n\t\t// \tparseItems(getUniqueColumnValues(), initialValue);\n\t\t// }else if(typeof editorParams.values === \"string\"){\n\t\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\n\t\t// }else{\n\t\t// \tparseItems(editorParams.values || [], initialValue);\n\t\t// }\n\n\t\tinput.addEventListener(\"search\", function (e) {\n\t\t\tif (!input.value) {\n\t\t\t\tunsetItems();\n\t\t\t\tchooseItems();\n\t\t\t}\n\t\t});\n\n\t\t//allow key based navigation\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tvar index;\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < dataItems.length - 1) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index < dataItems.length - 1) {\n\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\t// chooseItem();\n\n\t\t\t\t\tif (multiselect) {\n\t\t\t\t\t\ttoggleItem();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancelItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 9:\n\t\t\t\t\t//tab\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (self.currentCell === false) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (e.keyCode >= 38 && e.keyCode <= 90) {\n\t\t\t\t\t\tscrollTovalue(e.keyCode);\n\t\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tif (blurable) {\n\t\t\t\tif (multiselect) {\n\t\t\t\t\tchooseItems();\n\t\t\t\t} else {\n\t\t\t\t\tcancelItem();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\tif (!blockListShow) {\n\t\t\t\tshowList();\n\t\t\t}\n\t\t});\n\n\t\t//style list element\n\t\tlistEl = document.createElement(\"div\");\n\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\tonRendered(function () {\n\t\t\tinput.style.height = \"100%\";\n\t\t\tinput.focus({ preventScroll: true });\n\t\t});\n\n\t\tsetTimeout(function () {\n\t\t\t_this53.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\t\t}, 10);\n\n\t\treturn input;\n\t},\n\n\t//autocomplete\n\tautocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {\n\t\tvar _this54 = this;\n\n\t\tvar self = this,\n\t\t cellEl = cell.getElement(),\n\t\t initialValue = cell.getValue(),\n\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\",\n\t\t input = document.createElement(\"input\"),\n\t\t listEl = document.createElement(\"div\"),\n\t\t allItems = [],\n\t\t displayItems = [],\n\t\t values = [],\n\t\t currentItem = false,\n\t\t blurable = true,\n\t\t uniqueColumnValues = false;\n\n\t\t//style input\n\t\tinput.setAttribute(\"type\", \"search\");\n\n\t\tinput.style.padding = \"4px\";\n\t\tinput.style.width = \"100%\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//style list element\n\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tblurable = false;\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tblurable = true;\n\t\t\t}, 10);\n\t\t});\n\n\t\tfunction genUniqueColumnValues() {\n\t\t\tif (editorParams.values === true) {\n\t\t\t\tuniqueColumnValues = getUniqueColumnValues();\n\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\n\t\t\t}\n\t\t}\n\n\t\tfunction getUniqueColumnValues(field) {\n\t\t\tvar output = {},\n\t\t\t data = self.table.getData(),\n\t\t\t column;\n\n\t\t\tif (field) {\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t} else {\n\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t}\n\n\t\t\tif (column) {\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\t\tif (editorParams.sortValuesList == \"asc\") {\n\t\t\t\t\t\toutput = Object.keys(output).sort();\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput = Object.keys(output).sort().reverse();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toutput = Object.keys(output);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\n\t\t\t}\n\n\t\t\treturn output;\n\t\t}\n\n\t\tfunction filterList(term, intialLoad) {\n\t\t\tvar matches = [],\n\t\t\t values,\n\t\t\t items,\n\t\t\t searchEl;\n\n\t\t\t//lookup base values list\n\t\t\tif (uniqueColumnValues) {\n\t\t\t\tvalues = uniqueColumnValues;\n\t\t\t} else {\n\t\t\t\tvalues = editorParams.values || [];\n\t\t\t}\n\n\t\t\tif (editorParams.searchFunc) {\n\t\t\t\tmatches = editorParams.searchFunc(term, values);\n\n\t\t\t\tif (matches instanceof Promise) {\n\n\t\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\n\n\t\t\t\t\tmatches.then(function (result) {\n\t\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\n\t\t\t\t\t}).catch(function (err) {\n\t\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titems = parseItems(values);\n\n\t\t\t\tif (term === \"\") {\n\t\t\t\t\tif (editorParams.showListOnEmpty) {\n\t\t\t\t\t\tmatches = items;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\titems.forEach(function (item) {\n\t\t\t\t\t\tif (item.value !== null || typeof item.value !== \"undefined\") {\n\t\t\t\t\t\t\tif (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {\n\t\t\t\t\t\t\t\tmatches.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfillListIfNotEmpty(matches, intialLoad);\n\t\t\t}\n\t\t}\n\n\t\tfunction addNotice(notice) {\n\t\t\tvar searchEl = document.createElement(\"div\");\n\n\t\t\tclearList();\n\n\t\t\tif (notice !== false) {\n\t\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\n\t\t\t\tsearchEl.tabIndex = 0;\n\n\t\t\t\tif (notice instanceof Node) {\n\t\t\t\t\tsearchEl.appendChild(notice);\n\t\t\t\t} else {\n\t\t\t\t\tsearchEl.innerHTML = notice;\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(searchEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction parseItems(inputValues) {\n\t\t\tvar itemList = [];\n\n\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\tinputValues.forEach(function (value) {\n\n\t\t\t\t\tvar item = {};\n\n\t\t\t\t\tif ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\") {\n\t\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\n\t\t\t\t\t\titem.value = value.value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\n\t\t\t\t\t\titem.value = value;\n\t\t\t\t\t}\n\n\t\t\t\t\titemList.push(item);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\tvar item = {\n\t\t\t\t\t\ttitle: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\n\t\t\t\t\t\tvalue: key\n\t\t\t\t\t};\n\n\t\t\t\t\titemList.push(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn itemList;\n\t\t}\n\n\t\tfunction clearList() {\n\t\t\twhile (listEl.firstChild) {\n\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t}\n\t\t}\n\n\t\tfunction fillListIfNotEmpty(items, intialLoad) {\n\t\t\tif (items.length) {\n\t\t\t\tfillList(items, intialLoad);\n\t\t\t} else {\n\t\t\t\tif (editorParams.emptyPlaceholder) {\n\t\t\t\t\taddNotice(editorParams.emptyPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction fillList(items, intialLoad) {\n\t\t\tvar current = false;\n\n\t\t\tclearList();\n\n\t\t\tdisplayItems = items;\n\n\t\t\tdisplayItems.forEach(function (item) {\n\t\t\t\tvar el = item.element;\n\n\t\t\t\tif (!el) {\n\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\tel.innerHTML = item.title;\n\n\t\t\t\t\tel.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t});\n\n\t\t\t\t\tel.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t});\n\n\t\t\t\t\titem.element = el;\n\n\t\t\t\t\tif (intialLoad && item.value == initialValue) {\n\t\t\t\t\t\tinput.value = item.title;\n\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (item === currentItem) {\n\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlistEl.appendChild(el);\n\t\t\t});\n\n\t\t\tif (!current) {\n\t\t\t\tsetCurrentItem(false);\n\t\t\t}\n\t\t}\n\n\t\tfunction chooseItem() {\n\t\t\thideList();\n\n\t\t\tif (currentItem) {\n\t\t\t\tif (initialValue !== currentItem.value) {\n\t\t\t\t\tinitialValue = currentItem.value;\n\t\t\t\t\tinput.value = currentItem.title;\n\t\t\t\t\tsuccess(currentItem.value);\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (editorParams.freetext) {\n\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\tsuccess(input.value);\n\t\t\t\t} else {\n\t\t\t\t\tif (editorParams.allowEmpty && input.value === \"\") {\n\t\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\t\tsuccess(input.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction showList() {\n\t\t\tif (!listEl.parentNode) {\n\n\t\t\t\tconsole.log(\"show\", initialDisplayValue);\n\t\t\t\twhile (listEl.firstChild) {\n\t\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t\t}var offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t}\n\t\t}\n\n\t\tfunction setCurrentItem(item, showInputValue) {\n\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t}\n\n\t\t\tcurrentItem = item;\n\n\t\t\tif (item && item.element) {\n\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t}\n\n\t\t\tif (item && item.element && item.element.scrollIntoView) {\n\t\t\t\titem.element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\n\t\t\t}\n\t\t}\n\n\t\tfunction hideList() {\n\t\t\tif (listEl.parentNode) {\n\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t}\n\n\t\t\tremoveScrollListener();\n\t\t}\n\n\t\tfunction cancelItem() {\n\t\t\thideList();\n\t\t\tcancel();\n\t\t}\n\n\t\tfunction removeScrollListener() {\n\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t}\n\n\t\t//allow key based navigation\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tvar index;\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38:\n\t\t\t\t\t//up arrow\n\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetCurrentItem(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 40:\n\t\t\t\t\t//down arrow\n\n\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < displayItems.length - 1) {\n\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tif (index < displayItems.length - 1) {\n\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t// e.preventDefault();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tchooseItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancelItem();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 36: //home\n\t\t\t\tcase 35:\n\t\t\t\t\t//end\n\t\t\t\t\t//prevent table navigation while using input element\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"keyup\", function (e) {\n\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 38: //up arrow\n\t\t\t\tcase 37: //left arrow\n\t\t\t\tcase 39: //up arrow\n\t\t\t\tcase 40: //right arrow\n\t\t\t\tcase 13: //enter\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tfilterList(input.value);\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"search\", function (e) {\n\t\t\tfilterList(input.value);\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tif (blurable) {\n\t\t\t\tchooseItem();\n\t\t\t}\n\t\t});\n\n\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\tvar value = initialDisplayValue;\n\t\t\tgenUniqueColumnValues();\n\t\t\tshowList();\n\t\t\tinput.value = value;\n\t\t\tfilterList(value, true);\n\t\t});\n\n\t\tonRendered(function () {\n\t\t\tinput.style.height = \"100%\";\n\t\t\tinput.focus({ preventScroll: true });\n\t\t});\n\n\t\tif (editorParams.mask) {\n\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t}\n\n\t\tsetTimeout(function () {\n\t\t\t_this54.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\t\t}, 10);\n\n\t\tgenUniqueColumnValues();\n\t\tinput.value = initialDisplayValue;\n\t\tfilterList(initialDisplayValue, true);\n\n\t\treturn input;\n\t},\n\n\t//star rating\n\tstar: function star(cell, onRendered, success, cancel, editorParams) {\n\t\tvar self = this,\n\t\t element = cell.getElement(),\n\t\t value = cell.getValue(),\n\t\t maxStars = element.getElementsByTagName(\"svg\").length || 5,\n\t\t size = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\t\t stars = [],\n\t\t starsHolder = document.createElement(\"div\"),\n\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\t\t//change star type\n\t\tfunction starChange(val) {\n\t\t\tstars.forEach(function (star, i) {\n\t\t\t\tif (i < val) {\n\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstar.innerHTML = '<polygon fill=\"#488CE9\" stroke=\"#014AAE\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\n\t\t\t\t} else {\n\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t\t}\n\n\t\t\t\t\tstar.innerHTML = '<polygon fill=\"#010155\" stroke=\"#686868\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t//build stars\n\t\tfunction buildStar(i) {\n\n\t\t\tvar starHolder = document.createElement(\"span\");\n\t\t\tvar nextStar = star.cloneNode(true);\n\n\t\t\tstars.push(nextStar);\n\n\t\t\tstarHolder.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tstarChange(i);\n\t\t\t});\n\n\t\t\tstarHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tstarHolder.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tsuccess(i);\n\t\t\t\telement.blur();\n\t\t\t});\n\n\t\t\tstarHolder.appendChild(nextStar);\n\t\t\tstarsHolder.appendChild(starHolder);\n\t\t}\n\n\t\t//handle keyboard navigation value change\n\t\tfunction changeValue(val) {\n\t\t\tvalue = val;\n\t\t\tstarChange(val);\n\t\t}\n\n\t\t//style cell\n\t\telement.style.whiteSpace = \"nowrap\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\t//style holding element\n\t\tstarsHolder.style.verticalAlign = \"middle\";\n\t\tstarsHolder.style.display = \"inline-block\";\n\t\tstarsHolder.style.padding = \"4px\";\n\n\t\t//style star\n\t\tstar.setAttribute(\"width\", size);\n\t\tstar.setAttribute(\"height\", size);\n\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\tstar.style.padding = \"0 1px\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//create correct number of stars\n\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\tbuildStar(i);\n\t\t}\n\n\t\t//ensure value does not exceed number of stars\n\t\tvalue = Math.min(parseInt(value), maxStars);\n\n\t\t// set initial styling of stars\n\t\tstarChange(value);\n\n\t\tstarsHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\tstarChange(0);\n\t\t});\n\n\t\tstarsHolder.addEventListener(\"click\", function (e) {\n\t\t\tsuccess(0);\n\t\t});\n\n\t\telement.addEventListener(\"blur\", function (e) {\n\t\t\tcancel();\n\t\t});\n\n\t\t//allow key based navigation\n\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\tchangeValue(value + 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37:\n\t\t\t\t\t//left arrow\n\t\t\t\t\tchangeValue(value - 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tsuccess(value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\treturn starsHolder;\n\t},\n\n\t//draggable progress bar\n\tprogress: function progress(cell, onRendered, success, cancel, editorParams) {\n\t\tvar element = cell.getElement(),\n\t\t max = typeof editorParams.max === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100 : editorParams.max,\n\t\t min = typeof editorParams.min === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0 : editorParams.min,\n\t\t percent = (max - min) / 100,\n\t\t value = cell.getValue() || 0,\n\t\t handle = document.createElement(\"div\"),\n\t\t bar = document.createElement(\"div\"),\n\t\t mouseDrag,\n\t\t mouseDragWidth;\n\n\t\t//set new value\n\t\tfunction updateValue() {\n\t\t\tvar style = window.getComputedStyle(element, null);\n\n\t\t\tvar calcVal = percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\"))) / 100)) + min;\n\t\t\tsuccess(calcVal);\n\t\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\t\telement.setAttribute(\"aria-label\", value);\n\t\t}\n\n\t\t//style handle\n\t\thandle.style.position = \"absolute\";\n\t\thandle.style.right = \"0\";\n\t\thandle.style.top = \"0\";\n\t\thandle.style.bottom = \"0\";\n\t\thandle.style.width = \"5px\";\n\t\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t\t//style bar\n\t\tbar.style.display = \"inline-block\";\n\t\tbar.style.position = \"relative\";\n\t\t// bar.style.top = \"8px\";\n\t\t// bar.style.bottom = \"8px\";\n\t\t// bar.style.left = \"4px\";\n\t\t// bar.style.marginRight = \"4px\";\n\t\tbar.style.height = \"100%\";\n\t\tbar.style.backgroundColor = \"#488CE9\";\n\t\tbar.style.maxWidth = \"100%\";\n\t\tbar.style.minWidth = \"0%\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//style cell\n\t\telement.style.padding = \"4px 4px\";\n\n\t\t//make sure value is in range\n\t\tvalue = Math.min(parseFloat(value), max);\n\t\tvalue = Math.max(parseFloat(value), min);\n\n\t\t//workout percentage\n\t\tvalue = Math.round((value - min) / percent);\n\t\t// bar.style.right = value + \"%\";\n\t\tbar.style.width = value + \"%\";\n\n\t\telement.setAttribute(\"aria-valuemin\", min);\n\t\telement.setAttribute(\"aria-valuemax\", max);\n\n\t\tbar.appendChild(handle);\n\n\t\thandle.addEventListener(\"mousedown\", function (e) {\n\t\t\tmouseDrag = e.screenX;\n\t\t\tmouseDragWidth = bar.offsetWidth;\n\t\t});\n\n\t\thandle.addEventListener(\"mouseover\", function () {\n\t\t\thandle.style.cursor = \"ew-resize\";\n\t\t});\n\n\t\telement.addEventListener(\"mousemove\", function (e) {\n\t\t\tif (mouseDrag) {\n\t\t\t\tbar.style.width = mouseDragWidth + e.screenX - mouseDrag + \"px\";\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (mouseDrag) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\n\t\t\t\tmouseDrag = false;\n\t\t\t\tmouseDragWidth = false;\n\n\t\t\t\tupdateValue();\n\t\t\t}\n\t\t});\n\n\t\t//allow key based navigation\n\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase 39:\n\t\t\t\t\t//right arrow\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbar.style.width = bar.clientWidth + element.clientWidth / 100 + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 37:\n\t\t\t\t\t//left arrow\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbar.style.width = bar.clientWidth - element.clientWidth / 100 + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 9: //tab\n\t\t\t\tcase 13:\n\t\t\t\t\t//enter\n\t\t\t\t\tupdateValue();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 27:\n\t\t\t\t\t//escape\n\t\t\t\t\tcancel();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"blur\", function () {\n\t\t\tcancel();\n\t\t});\n\n\t\treturn bar;\n\t},\n\n\t//checkbox\n\ttickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {\n\t\tvar value = cell.getValue(),\n\t\t input = document.createElement(\"input\"),\n\t\t tristate = editorParams.tristate,\n\t\t indetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\t\t indetermState = false;\n\n\t\tinput.setAttribute(\"type\", \"checkbox\");\n\t\tinput.style.marginTop = \"5px\";\n\t\tinput.style.boxSizing = \"border-box\";\n\n\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t} else {\n\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tinput.value = value;\n\n\t\tif (tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")) {\n\t\t\tindetermState = true;\n\t\t\tinput.indeterminate = true;\n\t\t}\n\n\t\tif (this.table.browser != \"firefox\") {\n\t\t\t//prevent blur issue on mac firefox\n\t\t\tonRendered(function () {\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t});\n\t\t}\n\n\t\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\n\n\t\tonRendered(function () {\n\t\t\tinput.focus();\n\t\t});\n\n\t\tfunction setValue(blur) {\n\t\t\tif (tristate) {\n\t\t\t\tif (!blur) {\n\t\t\t\t\tif (input.checked && !indetermState) {\n\t\t\t\t\t\tinput.checked = false;\n\t\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\t\tindetermState = true;\n\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindetermState = false;\n\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (indetermState) {\n\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn input.checked;\n\t\t\t}\n\t\t}\n\n\t\t//submit new value on blur\n\t\tinput.addEventListener(\"change\", function (e) {\n\t\t\tsuccess(setValue());\n\t\t});\n\n\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\tsuccess(setValue(true));\n\t\t});\n\n\t\t//submit new value on enter\n\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\tif (e.keyCode == 13) {\n\t\t\t\tsuccess(setValue());\n\t\t\t}\n\t\t\tif (e.keyCode == 27) {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t});\n\n\t\treturn input;\n\t}\n};\n\nTabulator.prototype.registerModule(\"edit\", Edit);\n\nvar ExportRow = function ExportRow(type, columns, component, indent) {\n\tthis.type = type;\n\tthis.columns = columns;\n\tthis.component = component || false;\n\tthis.indent = indent || 0;\n};\n\nvar ExportColumn = function ExportColumn(value, component, width, height, depth) {\n\tthis.value = value;\n\tthis.component = component || false;\n\tthis.width = width;\n\tthis.height = height;\n\tthis.depth = depth;\n};\n\nvar Export = function Export(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.config = {};\n\tthis.cloneTableStyle = true;\n\tthis.colVisProp = \"\";\n};\n\nExport.prototype.generateExportList = function (config, style, range, colVisProp) {\n\tthis.cloneTableStyle = style;\n\tthis.config = config || {};\n\tthis.colVisProp = colVisProp;\n\n\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\n\tvar body = this.bodyToExportRows(this.rowLookup(range));\n\n\treturn headers.concat(body);\n};\n\nExport.prototype.genereateTable = function (config, style, range, colVisProp) {\n\tvar list = this.generateExportList(config, style, range, colVisProp);\n\n\treturn this.genereateTableElement(list);\n};\n\nExport.prototype.rowLookup = function (range) {\n\tvar _this55 = this;\n\n\tvar rows = [];\n\n\tif (typeof range == \"function\") {\n\t\trange.call(this.table).forEach(function (row) {\n\t\t\trow = _this55.table.rowManager.findRow(row);\n\n\t\t\tif (row) {\n\t\t\t\trows.push(row);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tswitch (range) {\n\t\t\tcase true:\n\t\t\tcase \"visible\":\n\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\tbreak;\n\n\t\t\tcase \"all\":\n\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\tbreak;\n\n\t\t\tcase \"selected\":\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\n\t\t\t\tbreak;\n\n\t\t\tcase \"active\":\n\t\t\tdefault:\n\t\t\t\tif (this.table.options.pagination) {\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\n\t\t\t\t} else {\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t\t}\n\t\t}\n\t}\n\n\treturn Object.assign([], rows);\n};\n\nExport.prototype.generateColumnGroupHeaders = function () {\n\tvar _this56 = this;\n\n\tvar output = [];\n\n\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\n\tcolumns.forEach(function (column) {\n\t\tvar colData = _this56.processColumnGroup(column);\n\n\t\tif (colData) {\n\t\t\toutput.push(colData);\n\t\t}\n\t});\n\n\treturn output;\n};\n\nExport.prototype.processColumnGroup = function (column) {\n\tvar _this57 = this;\n\n\tvar subGroups = column.columns,\n\t maxDepth = 0,\n\t title = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\n\n\tvar groupData = {\n\t\ttitle: title,\n\t\tcolumn: column,\n\t\tdepth: 1\n\t};\n\n\tif (subGroups.length) {\n\t\tgroupData.subGroups = [];\n\t\tgroupData.width = 0;\n\n\t\tsubGroups.forEach(function (subGroup) {\n\t\t\tvar subGroupData = _this57.processColumnGroup(subGroup);\n\n\t\t\tif (subGroupData) {\n\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\tgroupData.subGroups.push(subGroupData);\n\n\t\t\t\tif (subGroupData.depth > maxDepth) {\n\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tgroupData.depth += maxDepth;\n\n\t\tif (!groupData.width) {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tif (this.columnVisCheck(column)) {\n\t\t\tgroupData.width = 1;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn groupData;\n};\n\nExport.prototype.columnVisCheck = function (column) {\n\treturn column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);\n};\n\nExport.prototype.headersToExportRows = function (columns) {\n\tvar headers = [],\n\t headerDepth = 0,\n\t exportRows = [];\n\n\tfunction parseColumnGroup(column, level) {\n\n\t\tvar depth = headerDepth - level;\n\n\t\tif (typeof headers[level] === \"undefined\") {\n\t\t\theaders[level] = [];\n\t\t}\n\n\t\tcolumn.height = column.subGroups ? 1 : depth - column.depth + 1;\n\n\t\theaders[level].push(column);\n\n\t\tif (column.height > 1) {\n\t\t\tfor (var _i10 = 1; _i10 < column.height; _i10++) {\n\n\t\t\t\tif (typeof headers[level + _i10] === \"undefined\") {\n\t\t\t\t\theaders[level + _i10] = [];\n\t\t\t\t}\n\n\t\t\t\theaders[level + _i10].push(false);\n\t\t\t}\n\t\t}\n\n\t\tif (column.width > 1) {\n\t\t\tfor (var _i11 = 1; _i11 < column.width; _i11++) {\n\t\t\t\theaders[level].push(false);\n\t\t\t}\n\t\t}\n\n\t\tif (column.subGroups) {\n\t\t\tcolumn.subGroups.forEach(function (subGroup) {\n\t\t\t\tparseColumnGroup(subGroup, level + 1);\n\t\t\t});\n\t\t}\n\t}\n\n\t//calculate maximum header debth\n\tcolumns.forEach(function (column) {\n\t\tif (column.depth > headerDepth) {\n\t\t\theaderDepth = column.depth;\n\t\t}\n\t});\n\n\tcolumns.forEach(function (column) {\n\t\tparseColumnGroup(column, 0);\n\t});\n\n\theaders.forEach(function (header) {\n\t\tvar columns = [];\n\n\t\theader.forEach(function (col) {\n\t\t\tif (col) {\n\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\n\t\t\t} else {\n\t\t\t\tcolumns.push(null);\n\t\t\t}\n\t\t});\n\n\t\texportRows.push(new ExportRow(\"header\", columns));\n\t});\n\n\treturn exportRows;\n};\n\nExport.prototype.bodyToExportRows = function (rows) {\n\tvar _this58 = this;\n\n\tvar columns = [];\n\tvar exportRows = [];\n\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (_this58.columnVisCheck(column)) {\n\t\t\tcolumns.push(column.getComponent());\n\t\t}\n\t});\n\n\tif (this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.modules.columnCalcs.topInitialized) {\n\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t}\n\n\t\tif (this.table.modules.columnCalcs.botInitialized) {\n\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t}\n\t}\n\n\trows = rows.filter(function (row) {\n\t\tswitch (row.type) {\n\t\t\tcase \"group\":\n\t\t\t\treturn _this58.config.rowGroups !== false;\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\treturn _this58.config.columnCalcs !== false;\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\treturn !(_this58.table.options.dataTree && _this58.config.dataTree === false && row.modules.dataTree.parent);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\trows.forEach(function (row, i) {\n\t\tvar rowData = row.getData(_this58.colVisProp);\n\t\tvar exportCols = [];\n\t\tvar indent = 0;\n\n\t\tswitch (row.type) {\n\t\t\tcase \"group\":\n\t\t\t\tindent = row.level;\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\tcase \"row\":\n\t\t\t\tcolumns.forEach(function (col) {\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\n\t\t\t\t});\n\n\t\t\t\tif (_this58.table.options.dataTree && _this58.config.dataTree !== false) {\n\t\t\t\t\tindent = row.modules.dataTree.index;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\n\t});\n\n\treturn exportRows;\n};\n\nExport.prototype.genereateTableElement = function (list) {\n\tvar _this59 = this;\n\n\tvar table = document.createElement(\"table\"),\n\t headerEl = document.createElement(\"thead\"),\n\t bodyEl = document.createElement(\"tbody\"),\n\t styles = this.lookupTableStyles(),\n\t rowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\n\t setup = {};\n\n\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\n\tif (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")) {\n\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\n\t}\n\n\t//assign group header formatter\n\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\n\tif (setup.groupHeader && !Array.isArray(setup.groupHeader)) {\n\t\tsetup.groupHeader = [setup.groupHeader];\n\t}\n\n\ttable.classList.add(\"tabulator-print-table\");\n\n\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\tif (list.length > 1000) {\n\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t}\n\n\tlist.forEach(function (row, i) {\n\t\tswitch (row.type) {\n\t\t\tcase \"header\":\n\t\t\t\theaderEl.appendChild(_this59.genereateHeaderElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tbodyEl.appendChild(_this59.genereateGroupElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"calc\":\n\t\t\t\tbodyEl.appendChild(_this59.genereateCalcElement(row, setup, styles));\n\t\t\t\tbreak;\n\n\t\t\tcase \"row\":\n\t\t\t\tvar rowEl = _this59.genereateRowElement(row, setup, styles);\n\t\t\t\t_this59.mapElementStyles(i % 2 && styles.evenRow ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\tbodyEl.appendChild(rowEl);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif (headerEl.innerHTML) {\n\t\ttable.appendChild(headerEl);\n\t}\n\n\ttable.appendChild(bodyEl);\n\n\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\treturn table;\n};\n\nExport.prototype.lookupTableStyles = function () {\n\tvar styles = {};\n\n\t//lookup row styles\n\tif (this.cloneTableStyle && window.getComputedStyle) {\n\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\n\t\tif (styles.firstRow) {\n\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\tstyles.firstCell = styles.styleCells[0];\n\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nExport.prototype.genereateHeaderElement = function (row, setup, styles) {\n\tvar _this60 = this;\n\n\tvar rowEl = document.createElement(\"tr\");\n\n\trow.columns.forEach(function (column) {\n\t\tif (column) {\n\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\n\n\t\t\tcellEl.colSpan = column.width;\n\t\t\tcellEl.rowSpan = column.height;\n\n\t\t\tcellEl.innerHTML = column.value;\n\n\t\t\tif (_this60.cloneTableStyle) {\n\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t}\n\n\t\t\tclassNames.forEach(function (className) {\n\t\t\t\tcellEl.classList.add(className);\n\t\t\t});\n\n\t\t\t_this60.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t_this60.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\n\t\t\tif (column.component._column.visible) {\n\t\t\t\t_this60.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\n\t\t\t} else {\n\t\t\t\tif (column.component._column.definition.width) {\n\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (column.component._column.parent) {\n\t\t\t\t_this60.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t}\n\n\t\t\trowEl.appendChild(cellEl);\n\t\t}\n\t});\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateGroupElement = function (row, setup, styles) {\n\n\tvar rowEl = document.createElement(\"tr\"),\n\t cellEl = document.createElement(\"td\"),\n\t group = row.columns[0];\n\n\trowEl.classList.add(\"tabulator-print-table-row\");\n\n\tif (setup.groupHeader && setup.groupHeader[row.indent]) {\n\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t} else {\n\t\tif (setup.groupHeader === false) {\n\t\t\tgroup.value = group.value;\n\t\t} else {\n\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\n\t\t}\n\t}\n\n\tcellEl.colSpan = group.width;\n\tcellEl.innerHTML = group.value;\n\n\trowEl.classList.add(\"tabulator-print-table-group\");\n\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\n\n\tif (group.component.isVisible()) {\n\t\trowEl.classList.add(\"tabulator-group-visible\");\n\t}\n\n\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\n\trowEl.appendChild(cellEl);\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateCalcElement = function (row, setup, styles) {\n\tvar rowEl = this.genereateRowElement(row, setup, styles);\n\n\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateRowElement = function (row, setup, styles) {\n\tvar _this61 = this;\n\n\tvar rowEl = document.createElement(\"tr\");\n\n\trowEl.classList.add(\"tabulator-print-table-row\");\n\n\trow.columns.forEach(function (col) {\n\n\t\tif (col) {\n\t\t\tvar cellEl = document.createElement(\"td\"),\n\t\t\t column = col.component._column,\n\t\t\t value = col.value;\n\n\t\t\tvar cellWrapper = {\n\t\t\t\tmodules: {},\n\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tgetField: function getField() {\n\t\t\t\t\treturn column.definition.field;\n\t\t\t\t},\n\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\treturn cellEl;\n\t\t\t\t},\n\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetData: function getData() {\n\t\t\t\t\treturn row.component.getData();\n\t\t\t\t},\n\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\treturn row.component;\n\t\t\t\t},\n\t\t\t\tgetComponent: function getComponent() {\n\t\t\t\t\treturn cellWrapper;\n\t\t\t\t},\n\t\t\t\tcolumn: column\n\t\t\t};\n\n\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\n\t\t\tclassNames.forEach(function (className) {\n\t\t\t\tcellEl.classList.add(className);\n\t\t\t});\n\n\t\t\tif (_this61.table.modExists(\"format\") && _this61.config.formatCells !== false) {\n\t\t\t\tvalue = _this61.table.modules.format.formatExportValue(cellWrapper, _this61.colVisProp);\n\t\t\t} else {\n\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value instanceof Node) {\n\t\t\t\tcellEl.appendChild(value);\n\t\t\t} else {\n\t\t\t\tcellEl.innerHTML = value;\n\t\t\t}\n\n\t\t\tif (styles.firstCell) {\n\t\t\t\t_this61.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\t\t\t\tif (column.definition.align) {\n\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (_this61.table.options.dataTree && _this61.config.dataTree !== false) {\n\t\t\t\tif (setup.treeElementField && setup.treeElementField == column.field || !setup.treeElementField && i == 0) {\n\t\t\t\t\tif (row.component._row.modules.dataTree.controlEl) {\n\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif (row.component._row.modules.dataTree.branchEl) {\n\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trowEl.appendChild(cellEl);\n\n\t\t\tif (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {\n\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t}\n\n\t\t\tif (setup.rowFormatter && _this61.config.formatCells !== false) {\n\t\t\t\tsetup.rowFormatter(row.component);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn rowEl;\n};\n\nExport.prototype.genereateHTMLTable = function (list) {\n\tvar holder = document.createElement(\"div\");\n\n\tholder.appendChild(this.genereateTableElement(list));\n\n\treturn holder.innerHTML;\n};\n\nExport.prototype.getHtml = function (visible, style, config, colVisProp) {\n\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\n\n\treturn this.genereateHTMLTable(list);\n};\n\nExport.prototype.mapElementStyles = function (from, to, props) {\n\tif (this.cloneTableStyle && from && to) {\n\n\t\tvar lookup = {\n\t\t\t\"background-color\": \"backgroundColor\",\n\t\t\t\"color\": \"fontColor\",\n\t\t\t\"width\": \"width\",\n\t\t\t\"font-weight\": \"fontWeight\",\n\t\t\t\"font-family\": \"fontFamily\",\n\t\t\t\"font-size\": \"fontSize\",\n\t\t\t\"text-align\": \"textAlign\",\n\t\t\t\"border-top\": \"borderTop\",\n\t\t\t\"border-left\": \"borderLeft\",\n\t\t\t\"border-right\": \"borderRight\",\n\t\t\t\"border-bottom\": \"borderBottom\",\n\t\t\t\"padding-top\": \"paddingTop\",\n\t\t\t\"padding-left\": \"paddingLeft\",\n\t\t\t\"padding-right\": \"paddingRight\",\n\t\t\t\"padding-bottom\": \"paddingBottom\"\n\t\t};\n\n\t\tif (window.getComputedStyle) {\n\t\t\tvar fromStyle = window.getComputedStyle(from);\n\n\t\t\tprops.forEach(function (prop) {\n\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t});\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"export\", Export);\n\nvar Filter = function Filter(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.filterList = []; //hold filter list\n\tthis.headerFilters = {}; //hold column filters\n\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\tthis.prevHeaderFilterChangeCheck = \"\";\n\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\tthis.changed = false; //has filtering changed since last render\n};\n\n//initialize column header filter\nFilter.prototype.initializeColumn = function (column, value) {\n\tvar self = this,\n\t field = column.getField(),\n\t params;\n\n\t//handle successfull value change\n\tfunction success(value) {\n\t\tvar filterType = column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\" || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t type = \"\",\n\t\t filterChangeCheck = \"\",\n\t\t filterFunc;\n\n\t\tif (typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value) {\n\n\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\tif (!column.modules.filter.emptyFunc(value)) {\n\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\tswitch (_typeof(column.definition.headerFilterFunc)) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tif (self.filters[column.definition.headerFilterFunc]) {\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!filterFunc) {\n\t\t\t\t\tswitch (filterType) {\n\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tif (typeof colVal !== 'undefined' && colVal !== null) {\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.headerFilters[field] = { value: value, func: filterFunc, type: type, params: params || {} };\n\t\t\t} else {\n\t\t\t\tdelete self.headerFilters[field];\n\t\t\t}\n\n\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\tif (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {\n\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\tself.changed = true;\n\t\t\t\tself.table.rowManager.filterRefresh();\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tcolumn.modules.filter = {\n\t\tsuccess: success,\n\t\tattrType: false,\n\t\ttagType: false,\n\t\temptyFunc: false\n\t};\n\n\tthis.generateHeaderFilterElement(column);\n};\n\nFilter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {\n\tvar _this62 = this;\n\n\tvar self = this,\n\t success = column.modules.filter.success,\n\t field = column.getField(),\n\t filterElement,\n\t editor,\n\t editorElement,\n\t cellWrapper,\n\t typingTimer,\n\t searchTrigger,\n\t params;\n\n\t//handle aborted edit\n\tfunction cancel() {}\n\n\tif (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {\n\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t}\n\n\tif (field) {\n\n\t\t//set empty value function\n\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {\n\t\t\treturn !value && value !== \"0\" && value !== 0;\n\t\t};\n\n\t\tfilterElement = document.createElement(\"div\");\n\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t//set column editor\n\t\tswitch (_typeof(column.definition.headerFilter)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (self.table.modules.edit.editors[column.definition.headerFilter]) {\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\tif ((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tif (column.modules.edit && column.modules.edit.editor) {\n\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t} else {\n\t\t\t\t\tif (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\tif ((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (editor) {\n\n\t\t\tcellWrapper = {\n\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t},\n\t\t\t\tgetField: function getField() {\n\t\t\t\t\treturn column.definition.field;\n\t\t\t\t},\n\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\treturn filterElement;\n\t\t\t\t},\n\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\treturn column.getComponent();\n\t\t\t\t},\n\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnormalizeHeight: function normalizeHeight() {}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\n\n\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);\n\n\t\t\tif (!editorElement) {\n\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!(editorElement instanceof Node)) {\n\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//set Placeholder Text\n\t\t\tif (field) {\n\t\t\t\tself.table.modules.localize.bind(\"headerFilters|columns|\" + column.definition.field, function (value) {\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.table.modules.localize.getText(\"headerFilters|default\"));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.table.modules.localize.bind(\"headerFilters|default\", function (value) {\n\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof self.column.definition.headerFilterPlaceholder !== \"undefined\" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//focus on element on click\n\t\t\teditorElement.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\teditorElement.focus();\n\t\t\t});\n\n\t\t\teditorElement.addEventListener(\"focus\", function (e) {\n\t\t\t\tvar left = _this62.table.columnManager.element.scrollLeft;\n\n\t\t\t\tif (left !== _this62.table.rowManager.element.scrollLeft) {\n\t\t\t\t\t_this62.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t_this62.table.columnManager.scrollHorizontal(left);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//live update filters as user types\n\t\t\ttypingTimer = false;\n\n\t\t\tsearchTrigger = function searchTrigger(e) {\n\t\t\t\tif (typingTimer) {\n\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t}\n\n\t\t\t\ttypingTimer = setTimeout(function () {\n\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t}, self.table.options.headerFilterLiveFilterDelay);\n\t\t\t};\n\n\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\";\n\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\tif (column.definition.headerFilterLiveFilter !== false) {\n\n\t\t\t\tif (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {\n\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\tif (column.modules.filter.attrType == \"number\") {\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\tif (column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\") {\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\n\t\t\t\tif (column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\") {\n\t\t\t\t\teditorElement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\tif (!reinitialize) {\n\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t}\n};\n\n//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\nFilter.prototype.hideHeaderFilterElements = function () {\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t}\n\t});\n};\n\n//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\nFilter.prototype.showHeaderFilterElements = function () {\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t}\n\t});\n};\n\n//programatically set focus of header filter\nFilter.prototype.setHeaderFilterFocus = function (column) {\n\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\tcolumn.modules.filter.headerElement.focus();\n\t} else {\n\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t}\n};\n\n//programmatically get value of header filter\nFilter.prototype.getHeaderFilterValue = function (column) {\n\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\treturn column.modules.filter.headerElement.value;\n\t} else {\n\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t}\n};\n\n//programatically set value of header filter\nFilter.prototype.setHeaderFilterValue = function (column, value) {\n\tif (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\tcolumn.modules.filter.success(value);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n};\n\nFilter.prototype.reloadHeaderFilter = function (column) {\n\tif (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t}\n};\n\n//check if the filters has changed since last use\nFilter.prototype.hasChanged = function () {\n\tvar changed = this.changed;\n\tthis.changed = false;\n\treturn changed;\n};\n\n//set standard filters\nFilter.prototype.setFilter = function (field, type, value, params) {\n\tvar self = this;\n\n\tself.filterList = [];\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value, params: params }];\n\t}\n\n\tself.addFilter(field);\n};\n\n//add filter to array\nFilter.prototype.addFilter = function (field, type, value, params) {\n\tvar self = this;\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value, params: params }];\n\t}\n\n\tfield.forEach(function (filter) {\n\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\tself.filterList.push(filter);\n\n\t\t\tself.changed = true;\n\t\t}\n\t});\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\nFilter.prototype.findFilter = function (filter) {\n\tvar self = this,\n\t column;\n\n\tif (Array.isArray(filter)) {\n\t\treturn this.findSubFilters(filter);\n\t}\n\n\tvar filterFunc = false;\n\n\tif (typeof filter.field == \"function\") {\n\t\tfilterFunc = function filterFunc(data) {\n\t\t\treturn filter.field(data, filter.type || {}); // pass params to custom filter function\n\t\t};\n\t} else {\n\n\t\tif (self.filters[filter.type]) {\n\n\t\t\tcolumn = self.table.columnManager.getColumnByField(filter.field);\n\n\t\t\tif (column) {\n\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\treturn self.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\treturn self.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t}\n\t}\n\n\tfilter.func = filterFunc;\n\n\treturn filter.func ? filter : false;\n};\n\nFilter.prototype.findSubFilters = function (filters) {\n\tvar self = this,\n\t output = [];\n\n\tfilters.forEach(function (filter) {\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\toutput.push(filter);\n\t\t}\n\t});\n\n\treturn output.length ? output : false;\n};\n\n//get all filters\nFilter.prototype.getFilters = function (all, ajax) {\n\tvar output = [];\n\n\tif (all) {\n\t\toutput = this.getHeaderFilters();\n\t}\n\n\tif (ajax) {\n\t\toutput.forEach(function (item) {\n\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\titem.type = \"function\";\n\t\t\t}\n\t\t});\n\t}\n\n\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\treturn output;\n};\n\n//filter to Object\nFilter.prototype.filtersToArray = function (filterList, ajax) {\n\tvar _this63 = this;\n\n\tvar output = [];\n\n\tfilterList.forEach(function (filter) {\n\t\tvar item;\n\n\t\tif (Array.isArray(filter)) {\n\t\t\toutput.push(_this63.filtersToArray(filter, ajax));\n\t\t} else {\n\t\t\titem = { field: filter.field, type: filter.type, value: filter.value };\n\n\t\t\tif (ajax) {\n\t\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\toutput.push(item);\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//get all filters\nFilter.prototype.getHeaderFilters = function () {\n\tvar self = this,\n\t output = [];\n\n\tfor (var key in this.headerFilters) {\n\t\toutput.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });\n\t}\n\n\treturn output;\n};\n\n//remove filter from array\nFilter.prototype.removeFilter = function (field, type, value) {\n\tvar self = this;\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value }];\n\t}\n\n\tfield.forEach(function (filter) {\n\t\tvar index = -1;\n\n\t\tif (_typeof(filter.field) == \"object\") {\n\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\treturn filter === element;\n\t\t\t});\n\t\t} else {\n\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t});\n\t\t}\n\n\t\tif (index > -1) {\n\t\t\tself.filterList.splice(index, 1);\n\t\t\tself.changed = true;\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t}\n\t});\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\n//clear filters\nFilter.prototype.clearFilter = function (all) {\n\tthis.filterList = [];\n\n\tif (all) {\n\t\tthis.clearHeaderFilter();\n\t}\n\n\tthis.changed = true;\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\tthis.table.modules.persistence.save(\"filter\");\n\t}\n};\n\n//clear header filters\nFilter.prototype.clearHeaderFilter = function () {\n\tvar self = this;\n\n\tthis.headerFilters = {};\n\tself.prevHeaderFilterChangeCheck = \"{}\";\n\n\tthis.headerFilterColumns.forEach(function (column) {\n\t\tif (typeof column.modules.filter.value !== \"undefined\") {\n\t\t\tdelete column.modules.filter.value;\n\t\t}\n\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\tself.reloadHeaderFilter(column);\n\t});\n\n\tthis.changed = true;\n};\n\n//search data and return matching rows\nFilter.prototype.search = function (searchType, field, type, value) {\n\tvar self = this,\n\t activeRows = [],\n\t filterList = [];\n\n\tif (!Array.isArray(field)) {\n\t\tfield = [{ field: field, type: type, value: value }];\n\t}\n\n\tfield.forEach(function (filter) {\n\t\tfilter = self.findFilter(filter);\n\n\t\tif (filter) {\n\t\t\tfilterList.push(filter);\n\t\t}\n\t});\n\n\tthis.table.rowManager.rows.forEach(function (row) {\n\t\tvar match = true;\n\n\t\tfilterList.forEach(function (filter) {\n\t\t\tif (!self.filterRecurse(filter, row.getData())) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t}\n\t});\n\n\treturn activeRows;\n};\n\n//filter row array\nFilter.prototype.filter = function (rowList, filters) {\n\tvar self = this,\n\t activeRows = [],\n\t activeRowComponents = [];\n\n\tif (self.table.options.dataFiltering) {\n\t\tself.table.options.dataFiltering.call(self.table, self.getFilters());\n\t}\n\n\tif (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {\n\n\t\trowList.forEach(function (row) {\n\t\t\tif (self.filterRow(row)) {\n\t\t\t\tactiveRows.push(row);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tactiveRows = rowList.slice(0);\n\t}\n\n\tif (self.table.options.dataFiltered) {\n\n\t\tactiveRows.forEach(function (row) {\n\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t});\n\n\t\tself.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);\n\t}\n\n\treturn activeRows;\n};\n\n//filter individual row\nFilter.prototype.filterRow = function (row, filters) {\n\tvar self = this,\n\t match = true,\n\t data = row.getData();\n\n\tself.filterList.forEach(function (filter) {\n\t\tif (!self.filterRecurse(filter, data)) {\n\t\t\tmatch = false;\n\t\t}\n\t});\n\n\tfor (var field in self.headerFilters) {\n\t\tif (!self.headerFilters[field].func(data)) {\n\t\t\tmatch = false;\n\t\t}\n\t}\n\n\treturn match;\n};\n\nFilter.prototype.filterRecurse = function (filter, data) {\n\tvar self = this,\n\t match = false;\n\n\tif (Array.isArray(filter)) {\n\t\tfilter.forEach(function (subFilter) {\n\t\t\tif (self.filterRecurse(subFilter, data)) {\n\t\t\t\tmatch = true;\n\t\t\t}\n\t\t});\n\t} else {\n\t\tmatch = filter.func(data);\n\t}\n\n\treturn match;\n};\n\n//list of available filters\nFilter.prototype.filters = {\n\n\t//equal to\n\t\"=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal == filterVal ? true : false;\n\t},\n\n\t//less than\n\t\"<\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal < filterVal ? true : false;\n\t},\n\n\t//less than or equal to\n\t\"<=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal <= filterVal ? true : false;\n\t},\n\n\t//greater than\n\t\">\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal > filterVal ? true : false;\n\t},\n\n\t//greater than or equal to\n\t\">=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal >= filterVal ? true : false;\n\t},\n\n\t//not equal to\n\t\"!=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\treturn rowVal != filterVal ? true : false;\n\t},\n\n\t\"regex\": function regex(filterVal, rowVal, rowData, filterParams) {\n\n\t\tif (typeof filterVal == \"string\") {\n\t\t\tfilterVal = new RegExp(filterVal);\n\t\t}\n\n\t\treturn filterVal.test(rowVal);\n\t},\n\n\t//contains the string\n\t\"like\": function like(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//contains the keywords\n\t\"keywords\": function keywords(filterVal, rowVal, rowData, filterParams) {\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\n\t\t value = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\n\t\t matches = [];\n\n\t\tkeywords.forEach(function (keyword) {\n\t\t\tif (value.includes(keyword)) {\n\t\t\t\tmatches.push(true);\n\t\t\t}\n\t\t});\n\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\n\t},\n\n\t//starts with the string\n\t\"starts\": function starts(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//ends with the string\n\t\"ends\": function ends(filterVal, rowVal, rowData, filterParams) {\n\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\treturn rowVal === filterVal ? true : false;\n\t\t} else {\n\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\n\t//in array\n\t\"in\": function _in(filterVal, rowVal, rowData, filterParams) {\n\t\tif (Array.isArray(filterVal)) {\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\treturn false;\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"filter\", Filter);\n\nvar Format = function Format(table) {\n\tthis.table = table; //hold Tabulator object\n};\n\n//initialize column formatter\nFormat.prototype.initializeColumn = function (column) {\n\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\n\tif (typeof column.definition.formatterPrint !== \"undefined\") {\n\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t}\n\n\tif (typeof column.definition.formatterClipboard !== \"undefined\") {\n\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t}\n\n\tif (typeof column.definition.formatterHtmlOutput !== \"undefined\") {\n\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t}\n};\n\nFormat.prototype.lookupFormatter = function (column, type) {\n\tvar config = { params: column.definition[\"formatter\" + type + \"Params\"] || {} },\n\t formatter = column.definition[\"formatter\" + type];\n\n\t//set column formatter\n\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\tcase \"string\":\n\n\t\t\tif (formatter === \"tick\") {\n\t\t\t\tformatter = \"tickCross\";\n\n\t\t\t\tif (typeof config.params.crossElement == \"undefined\") {\n\t\t\t\t\tconfig.params.crossElement = false;\n\t\t\t\t}\n\n\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false\");\n\t\t\t}\n\n\t\t\tif (this.formatters[formatter]) {\n\t\t\t\tconfig.formatter = this.formatters[formatter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tconfig.formatter = formatter;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\tbreak;\n\t}\n\n\treturn config;\n};\n\nFormat.prototype.cellRendered = function (cell) {\n\tif (cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered) {\n\t\tcell.modules.format.renderedCallback();\n\t\tcell.modules.format.rendered = true;\n\t}\n};\n\n//return a formatted value for a cell\nFormat.prototype.formatValue = function (cell) {\n\tvar component = cell.getComponent(),\n\t params = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\n\tfunction onRendered(callback) {\n\t\tif (!cell.modules.format) {\n\t\t\tcell.modules.format = {};\n\t\t}\n\n\t\tcell.modules.format.renderedCallback = callback;\n\t\tcell.modules.format.rendered = false;\n\t}\n\n\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n};\n\nFormat.prototype.formatExportValue = function (cell, type) {\n\tvar formatter = cell.column.modules.format[type],\n\t params;\n\n\tif (formatter) {\n\t\tvar onRendered = function onRendered(callback) {\n\t\t\tif (!cell.modules.format) {\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\tcell.modules.format.rendered = false;\n\t\t};\n\n\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\n\n\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t} else {\n\t\treturn this.formatValue(cell);\n\t}\n};\n\nFormat.prototype.sanitizeHTML = function (value) {\n\tif (value) {\n\t\tvar entityMap = {\n\t\t\t'&': '&',\n\t\t\t'<': '<',\n\t\t\t'>': '>',\n\t\t\t'\"': '"',\n\t\t\t\"'\": ''',\n\t\t\t'/': '/',\n\t\t\t'`': '`',\n\t\t\t'=': '='\n\t\t};\n\n\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\n\t\t\treturn entityMap[s];\n\t\t});\n\t} else {\n\t\treturn value;\n\t}\n};\n\nFormat.prototype.emptyToSpace = function (value) {\n\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\n};\n\n//get formatter for cell\nFormat.prototype.getFormatter = function (formatter) {\n\tvar formatter;\n\n\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\tcase \"string\":\n\t\t\tif (this.formatters[formatter]) {\n\t\t\t\tformatter = this.formatters[formatter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\tformatter = this.formatters.plaintext;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tformatter = formatter;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tformatter = this.formatters.plaintext;\n\t\t\tbreak;\n\t}\n\n\treturn formatter;\n};\n\n//default data formatters\nFormat.prototype.formatters = {\n\t//plain text value\n\tplaintext: function plaintext(cell, formatterParams, onRendered) {\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t},\n\n\t//html text value\n\thtml: function html(cell, formatterParams, onRendered) {\n\t\treturn cell.getValue();\n\t},\n\n\t//multiline text area\n\ttextarea: function textarea(cell, formatterParams, onRendered) {\n\t\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t},\n\n\t//currency formatting\n\tmoney: function money(cell, formatterParams, onRendered) {\n\t\tvar floatVal = parseFloat(cell.getValue()),\n\t\t number,\n\t\t integer,\n\t\t decimal,\n\t\t rgx;\n\n\t\tvar decimalSym = formatterParams.decimal || \".\";\n\t\tvar thousandSym = formatterParams.thousand || \",\";\n\t\tvar symbol = formatterParams.symbol || \"\";\n\t\tvar after = !!formatterParams.symbolAfter;\n\t\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\t\tif (isNaN(floatVal)) {\n\t\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t\t}\n\n\t\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\t\tnumber = String(number).split(\".\");\n\n\t\tinteger = number[0];\n\t\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\twhile (rgx.test(integer)) {\n\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t}\n\n\t\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\n\t},\n\n\t//clickable anchor tag\n\tlink: function link(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t urlPrefix = formatterParams.urlPrefix || \"\",\n\t\t download = formatterParams.download,\n\t\t label = value,\n\t\t el = document.createElement(\"a\"),\n\t\t data;\n\n\t\tif (formatterParams.labelField) {\n\t\t\tdata = cell.getData();\n\t\t\tlabel = data[formatterParams.labelField];\n\t\t}\n\n\t\tif (formatterParams.label) {\n\t\t\tswitch (_typeof(formatterParams.label)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlabel = formatterParams.label;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (label) {\n\t\t\tif (formatterParams.urlField) {\n\t\t\t\tdata = cell.getData();\n\t\t\t\tvalue = data[formatterParams.urlField];\n\t\t\t}\n\n\t\t\tif (formatterParams.url) {\n\t\t\t\tswitch (_typeof(formatterParams.url)) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\t\tif (formatterParams.target) {\n\t\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t\t}\n\n\t\t\tif (formatterParams.download) {\n\n\t\t\t\tif (typeof download == \"function\") {\n\t\t\t\t\tdownload = download(cell);\n\t\t\t\t} else {\n\t\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t\t}\n\n\t\t\t\tel.setAttribute(\"download\", download);\n\t\t\t}\n\n\t\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\t\treturn el;\n\t\t} else {\n\t\t\treturn \" \";\n\t\t}\n\t},\n\n\t//image element\n\timage: function image(cell, formatterParams, onRendered) {\n\t\tvar el = document.createElement(\"img\"),\n\t\t src = cell.getValue();\n\n\t\tif (formatterParams.urlPrefix) {\n\t\t\tsrc = formatterParams.urlPrefix + cell.getValue();\n\t\t}\n\n\t\tif (formatterParams.urlSuffix) {\n\t\t\tsrc = src + formatterParams.urlSuffix;\n\t\t}\n\n\t\tel.setAttribute(\"src\", src);\n\n\t\tswitch (_typeof(formatterParams.height)) {\n\t\t\tcase \"number\":\n\t\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\t\t\t\tel.style.height = formatterParams.height;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tswitch (_typeof(formatterParams.width)) {\n\t\t\tcase \"number\":\n\t\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\t\t\t\tel.style.width = formatterParams.width;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tel.addEventListener(\"load\", function () {\n\t\t\tcell.getRow().normalizeHeight();\n\t\t});\n\n\t\treturn el;\n\t},\n\n\t//tick or cross\n\ttickCross: function tickCross(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t element = cell.getElement(),\n\t\t empty = formatterParams.allowEmpty,\n\t\t truthy = formatterParams.allowTruthy,\n\t\t tick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#2DC214\" clip-rule=\"evenodd\" d=\"M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34 c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351 l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07 l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z\" fill-rule=\"evenodd\"/></svg>',\n\t\t cross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#CE1515\" d=\"M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272 c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0 l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269 c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73 L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z\"/></svg>';\n\n\t\tif (truthy && value || value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\") {\n\t\t\telement.setAttribute(\"aria-checked\", true);\n\t\t\treturn tick || \"\";\n\t\t} else {\n\t\t\tif (empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")) {\n\t\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\t\treturn cross || \"\";\n\t\t\t}\n\t\t}\n\t},\n\n\tdatetime: function datetime(cell, formatterParams, onRendered) {\n\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\tvar outputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\n\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\tvar value = cell.getValue();\n\n\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\tif (newDatetime.isValid()) {\n\t\t\treturn formatterParams.timezone ? newDatetime.tz(formatterParams.timezone).format(outputFormat) : newDatetime.format(outputFormat);\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t},\n\n\tdatetimediff: function datetime(cell, formatterParams, onRendered) {\n\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\t\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\n\t\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\t\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\n\t\tvar value = cell.getValue();\n\n\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\tif (newDatetime.isValid()) {\n\t\t\tif (humanize) {\n\t\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\n\t\t\t} else {\n\t\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (invalid === true) {\n\t\t\t\treturn value;\n\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\treturn invalid(value);\n\t\t\t} else {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t},\n\n\t//select\n\tlookup: function lookup(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue();\n\n\t\tif (typeof formatterParams[value] === \"undefined\") {\n\t\t\tconsole.warn('Missing display value for ' + value);\n\t\t\treturn value;\n\t\t}\n\n\t\treturn formatterParams[value];\n\t},\n\n\t//star rating\n\tstar: function star(cell, formatterParams, onRendered) {\n\t\tvar value = cell.getValue(),\n\t\t element = cell.getElement(),\n\t\t maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\t\t stars = document.createElement(\"span\"),\n\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\t\t starActive = '<polygon fill=\"#FFEA00\" stroke=\"#C1AB60\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>',\n\t\t starInactive = '<polygon fill=\"#D2D2D2\" stroke=\"#686868\" stroke-width=\"37.6152\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\" points=\"259.216,29.942 330.27,173.919 489.16,197.007 374.185,309.08 401.33,467.31 259.216,392.612 117.104,467.31 144.25,309.08 29.274,197.007 188.165,173.919 \"/>';\n\n\t\t//style stars holder\n\t\tstars.style.verticalAlign = \"middle\";\n\n\t\t//style star\n\t\tstar.setAttribute(\"width\", \"14\");\n\t\tstar.setAttribute(\"height\", \"14\");\n\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\tstar.style.padding = \"0 1px\";\n\n\t\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\t\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\tvar nextStar = star.cloneNode(true);\n\t\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\t\tstars.appendChild(nextStar);\n\t\t}\n\n\t\telement.style.whiteSpace = \"nowrap\";\n\t\telement.style.overflow = \"hidden\";\n\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\telement.setAttribute(\"aria-label\", value);\n\n\t\treturn stars;\n\t},\n\n\ttraffic: function traffic(cell, formatterParams, onRendered) {\n\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t el = document.createElement(\"span\"),\n\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t colors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\t\t color = \"#666666\",\n\t\t percent,\n\t\t percentValue;\n\n\t\tif (isNaN(value) || typeof cell.getValue() === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\n\t\tel.classList.add(\"tabulator-traffic-light\");\n\n\t\t//make sure value is in range\n\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t//workout percentage\n\t\tpercent = (max - min) / 100;\n\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t//set color\n\t\tswitch (typeof colors === 'undefined' ? 'undefined' : _typeof(colors)) {\n\t\t\tcase \"string\":\n\t\t\t\tcolor = colors;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tcolor = colors(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(colors)) {\n\t\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tcolor = colors[index];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\n\t\tel.style.backgroundColor = color;\n\n\t\treturn el;\n\t},\n\n\t//progress bar\n\tprogress: function progress(cell, formatterParams, onRendered) {\n\t\t//progress bar\n\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t element = cell.getElement(),\n\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\t\t percent,\n\t\t percentValue,\n\t\t color,\n\t\t legend,\n\t\t legendColor,\n\t\t top,\n\t\t left,\n\t\t right,\n\t\t bottom;\n\n\t\t//make sure value is in range\n\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t//workout percentage\n\t\tpercent = (max - min) / 100;\n\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t//set bar color\n\t\tswitch (_typeof(formatterParams.color)) {\n\t\t\tcase \"string\":\n\t\t\t\tcolor = formatterParams.color;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tcolor = formatterParams.color(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(formatterParams.color)) {\n\t\t\t\t\tvar unit = 100 / formatterParams.color.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tcolor = \"#2DC214\";\n\t\t}\n\n\t\t//generate legend\n\t\tswitch (_typeof(formatterParams.legend)) {\n\t\t\tcase \"string\":\n\t\t\t\tlegend = formatterParams.legend;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tlegend = formatterParams.legend(value);\n\t\t\t\tbreak;\n\t\t\tcase \"boolean\":\n\t\t\t\tlegend = value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlegend = false;\n\t\t}\n\n\t\t//set legend color\n\t\tswitch (_typeof(formatterParams.legendColor)) {\n\t\t\tcase \"string\":\n\t\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\t\tbreak;\n\t\t\tcase \"function\":\n\t\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\t\tbreak;\n\t\t\tcase \"object\":\n\t\t\t\tif (Array.isArray(formatterParams.legendColor)) {\n\t\t\t\t\tvar unit = 100 / formatterParams.legendColor.length;\n\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlegendColor = \"#000\";\n\t\t}\n\n\t\telement.style.minWidth = \"30px\";\n\t\telement.style.position = \"relative\";\n\n\t\telement.setAttribute(\"aria-label\", percentValue);\n\n\t\tvar barEl = document.createElement(\"div\");\n\t\tbarEl.style.display = \"inline-block\";\n\t\tbarEl.style.position = \"relative\";\n\t\tbarEl.style.width = percentValue + \"%\";\n\t\tbarEl.style.backgroundColor = color;\n\t\tbarEl.style.height = \"100%\";\n\n\t\tbarEl.setAttribute('data-max', max);\n\t\tbarEl.setAttribute('data-min', min);\n\n\t\tif (legend) {\n\t\t\tvar legendEl = document.createElement(\"div\");\n\t\t\tlegendEl.style.position = \"absolute\";\n\t\t\tlegendEl.style.top = \"4px\";\n\t\t\tlegendEl.style.left = 0;\n\t\t\tlegendEl.style.textAlign = legendAlign;\n\t\t\tlegendEl.style.width = \"100%\";\n\t\t\tlegendEl.style.color = legendColor;\n\t\t\tlegendEl.innerHTML = legend;\n\t\t}\n\n\t\tonRendered(function () {\n\n\t\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\t\tif (!(cell instanceof CellComponent)) {\n\t\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\t\tholderEl.style.position = \"absolute\";\n\t\t\t\tholderEl.style.top = \"4px\";\n\t\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\t\tholderEl.style.left = \"4px\";\n\t\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\t\telement.appendChild(holderEl);\n\n\t\t\t\telement = holderEl;\n\t\t\t}\n\n\t\t\telement.appendChild(barEl);\n\n\t\t\tif (legend) {\n\t\t\t\telement.appendChild(legendEl);\n\t\t\t}\n\t\t});\n\n\t\treturn \"\";\n\t},\n\n\t//background color\n\tcolor: function color(cell, formatterParams, onRendered) {\n\t\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\t\treturn \"\";\n\t},\n\n\t//tick icon\n\tbuttonTick: function buttonTick(cell, formatterParams, onRendered) {\n\t\treturn '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#2DC214\" clip-rule=\"evenodd\" d=\"M21.652,3.211c-0.293-0.295-0.77-0.295-1.061,0L9.41,14.34 c-0.293,0.297-0.771,0.297-1.062,0L3.449,9.351C3.304,9.203,3.114,9.13,2.923,9.129C2.73,9.128,2.534,9.201,2.387,9.351 l-2.165,1.946C0.078,11.445,0,11.63,0,11.823c0,0.194,0.078,0.397,0.223,0.544l4.94,5.184c0.292,0.296,0.771,0.776,1.062,1.07 l2.124,2.141c0.292,0.293,0.769,0.293,1.062,0l14.366-14.34c0.293-0.294,0.293-0.777,0-1.071L21.652,3.211z\" fill-rule=\"evenodd\"/></svg>';\n\t},\n\n\t//cross icon\n\tbuttonCross: function buttonCross(cell, formatterParams, onRendered) {\n\t\treturn '<svg enable-background=\"new 0 0 24 24\" height=\"14\" width=\"14\" viewBox=\"0 0 24 24\" xml:space=\"preserve\" ><path fill=\"#CE1515\" d=\"M22.245,4.015c0.313,0.313,0.313,0.826,0,1.139l-6.276,6.27c-0.313,0.312-0.313,0.826,0,1.14l6.273,6.272 c0.313,0.313,0.313,0.826,0,1.14l-2.285,2.277c-0.314,0.312-0.828,0.312-1.142,0l-6.271-6.271c-0.313-0.313-0.828-0.313-1.141,0 l-6.276,6.267c-0.313,0.313-0.828,0.313-1.141,0l-2.282-2.28c-0.313-0.313-0.313-0.826,0-1.14l6.278-6.269 c0.313-0.312,0.313-0.826,0-1.14L1.709,5.147c-0.314-0.313-0.314-0.827,0-1.14l2.284-2.278C4.308,1.417,4.821,1.417,5.135,1.73 L11.405,8c0.314,0.314,0.828,0.314,1.141,0.001l6.276-6.267c0.312-0.312,0.826-0.312,1.141,0L22.245,4.015z\"/></svg>';\n\t},\n\n\t//current row number\n\trownum: function rownum(cell, formatterParams, onRendered) {\n\t\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\n\t},\n\n\t//row handle\n\thandle: function handle(cell, formatterParams, onRendered) {\n\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\t\treturn \"<div class='tabulator-row-handle-box'><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div><div class='tabulator-row-handle-bar'></div></div>\";\n\t},\n\n\tresponsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {\n\t\tvar self = this,\n\t\t open = false,\n\t\t el = document.createElement(\"div\"),\n\t\t config = cell.getRow()._row.modules.responsiveLayout;\n\n\t\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\tel.innerHTML = \"<span class='tabulator-responsive-collapse-toggle-open'>+</span><span class='tabulator-responsive-collapse-toggle-close'>-</span>\";\n\n\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\t\tfunction toggleList(isOpen) {\n\t\t\tvar collapseEl = config.element;\n\n\t\t\tconfig.open = isOpen;\n\n\t\t\tif (collapseEl) {\n\n\t\t\t\tif (config.open) {\n\t\t\t\t\tel.classList.add(\"open\");\n\t\t\t\t\tcollapseEl.style.display = '';\n\t\t\t\t} else {\n\t\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tel.addEventListener(\"click\", function (e) {\n\t\t\te.stopImmediatePropagation();\n\t\t\ttoggleList(!config.open);\n\t\t});\n\n\t\ttoggleList(config.open);\n\n\t\treturn el;\n\t},\n\n\trowSelection: function rowSelection(cell, formatterParams, onRendered) {\n\t\tvar _this64 = this;\n\n\t\tvar checkbox = document.createElement(\"input\");\n\n\t\tcheckbox.type = 'checkbox';\n\n\t\tif (this.table.modExists(\"selectRow\", true)) {\n\n\t\t\tcheckbox.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif (typeof cell.getRow == 'function') {\n\t\t\t\tvar row = cell.getRow();\n\n\t\t\t\tif (row instanceof RowComponent) {\n\n\t\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t});\n\n\t\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\n\t\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t\t} else {\n\t\t\t\t\tcheckbox = \"\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\tif (_this64.table.modules.selectRow.selectedRows.length) {\n\t\t\t\t\t\t_this64.table.deselectRow();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_this64.table.selectRow(formatterParams.rowRange);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t\t}\n\t\t}\n\t\treturn checkbox;\n\t}\n};\n\nTabulator.prototype.registerModule(\"format\", Format);\n\nvar FrozenColumns = function FrozenColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.leftColumns = [];\n\tthis.rightColumns = [];\n\tthis.leftMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.rightPadding = 0;\n\tthis.initializationMode = \"left\";\n\tthis.active = false;\n\tthis.scrollEndTimer = false;\n};\n\n//reset initial state\nFrozenColumns.prototype.reset = function () {\n\tthis.initializationMode = \"left\";\n\tthis.leftColumns = [];\n\tthis.rightColumns = [];\n\tthis.leftMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.rightMargin = 0;\n\tthis.active = false;\n\n\tthis.table.columnManager.headersElement.style.marginLeft = 0;\n\tthis.table.columnManager.element.style.paddingRight = 0;\n};\n\n//initialize specific column\nFrozenColumns.prototype.initializeColumn = function (column) {\n\tvar config = { margin: 0, edge: false };\n\n\tif (!column.isGroup) {\n\n\t\tif (this.frozenCheck(column)) {\n\n\t\t\tconfig.position = this.initializationMode;\n\n\t\t\tif (this.initializationMode == \"left\") {\n\t\t\t\tthis.leftColumns.push(column);\n\t\t\t} else {\n\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t}\n\n\t\t\tthis.active = true;\n\n\t\t\tcolumn.modules.frozen = config;\n\t\t} else {\n\t\t\tthis.initializationMode = \"right\";\n\t\t}\n\t}\n};\n\nFrozenColumns.prototype.frozenCheck = function (column) {\n\tvar frozen = false;\n\n\tif (column.parent.isGroup && column.definition.frozen) {\n\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t}\n\n\tif (column.parent.isGroup) {\n\t\treturn this.frozenCheck(column.parent);\n\t} else {\n\t\treturn column.definition.frozen;\n\t}\n\n\treturn frozen;\n};\n\n//quick layout to smooth horizontal scrolling\nFrozenColumns.prototype.scrollHorizontal = function () {\n\tvar _this65 = this;\n\n\tvar rows;\n\n\tif (this.active) {\n\t\tclearTimeout(this.scrollEndTimer);\n\n\t\t//layout all rows after scroll is complete\n\t\tthis.scrollEndTimer = setTimeout(function () {\n\t\t\t_this65.layout();\n\t\t}, 100);\n\n\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\tthis.calcMargins();\n\n\t\tthis.layoutColumnPosition();\n\n\t\tthis.layoutCalcRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\t_this65.layoutRow(row);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t}\n};\n\n//calculate margins for rows\nFrozenColumns.prototype.calcMargins = function () {\n\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\n\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\n\n\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\n\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\n\n\t//calculate right frozen columns\n\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\n};\n\n//layout calculation rows\nFrozenColumns.prototype.layoutCalcRows = function () {\n\tif (this.table.modExists(\"columnCalcs\")) {\n\t\tif (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {\n\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t}\n\t\tif (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {\n\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t}\n\t}\n};\n\n//calculate column positions and layout headers\nFrozenColumns.prototype.layoutColumnPosition = function (allCells) {\n\tvar _this66 = this;\n\n\tvar leftParents = [];\n\n\tthis.leftColumns.forEach(function (column, i) {\n\t\tcolumn.modules.frozen.margin = _this66._calcSpace(_this66.leftColumns, i) + _this66.table.columnManager.scrollLeft + \"px\";\n\n\t\tif (i == _this66.leftColumns.length - 1) {\n\t\t\tcolumn.modules.frozen.edge = true;\n\t\t} else {\n\t\t\tcolumn.modules.frozen.edge = false;\n\t\t}\n\n\t\tif (column.parent.isGroup) {\n\t\t\tvar parentEl = _this66.getColGroupParentElement(column);\n\t\t\tif (!leftParents.includes(parentEl)) {\n\t\t\t\t_this66.layoutElement(parentEl, column);\n\t\t\t\tleftParents.push(parentEl);\n\t\t\t}\n\n\t\t\tif (column.modules.frozen.edge) {\n\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t\t}\n\t\t} else {\n\t\t\t_this66.layoutElement(column.getElement(), column);\n\t\t}\n\n\t\tif (allCells) {\n\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t_this66.layoutElement(cell.getElement(true), column);\n\t\t\t});\n\t\t}\n\t});\n\n\tthis.rightColumns.forEach(function (column, i) {\n\t\tcolumn.modules.frozen.margin = _this66.rightPadding - _this66._calcSpace(_this66.rightColumns, i + 1) + \"px\";\n\n\t\tif (i == _this66.rightColumns.length - 1) {\n\t\t\tcolumn.modules.frozen.edge = true;\n\t\t} else {\n\t\t\tcolumn.modules.frozen.edge = false;\n\t\t}\n\n\t\tif (column.parent.isGroup) {\n\t\t\t_this66.layoutElement(_this66.getColGroupParentElement(column), column);\n\t\t} else {\n\t\t\t_this66.layoutElement(column.getElement(), column);\n\t\t}\n\n\t\tif (allCells) {\n\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t_this66.layoutElement(cell.getElement(true), column);\n\t\t\t});\n\t\t}\n\t});\n};\n\nFrozenColumns.prototype.getColGroupParentElement = function (column) {\n\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n};\n\n//layout columns appropropriatly\nFrozenColumns.prototype.layout = function () {\n\tvar self = this,\n\t rightMargin = 0;\n\n\tif (self.active) {\n\n\t\t//calculate row padding\n\t\tthis.calcMargins();\n\n\t\t// self.table.rowManager.activeRows.forEach(function(row){\n\t\t// \tself.layoutRow(row);\n\t\t// });\n\n\t\t// if(self.table.options.dataTree){\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\") {\n\t\t\t\tself.layoutRow(row);\n\t\t\t}\n\t\t});\n\t\t// }\n\n\t\tthis.layoutCalcRows();\n\n\t\t//calculate left columns\n\t\tthis.layoutColumnPosition(true);\n\n\t\t// if(tableHolder.scrollHeight > tableHolder.clientHeight){\n\t\t// \trightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;\n\t\t// }\n\n\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t}\n};\n\nFrozenColumns.prototype.layoutRow = function (row) {\n\tvar _this67 = this;\n\n\tvar rowEl = row.getElement();\n\n\trowEl.style.paddingLeft = this.leftMargin;\n\t// rowEl.style.paddingRight = this.rightMargin + \"px\";\n\n\tthis.leftColumns.forEach(function (column) {\n\t\tvar cell = row.getCell(column);\n\n\t\tif (cell) {\n\t\t\t_this67.layoutElement(cell.getElement(true), column);\n\t\t}\n\t});\n\n\tthis.rightColumns.forEach(function (column) {\n\t\tvar cell = row.getCell(column);\n\n\t\tif (cell) {\n\t\t\t_this67.layoutElement(cell.getElement(true), column);\n\t\t}\n\t});\n};\n\nFrozenColumns.prototype.layoutElement = function (element, column) {\n\n\tif (column.modules.frozen) {\n\t\telement.style.position = \"absolute\";\n\t\telement.style.left = column.modules.frozen.margin;\n\n\t\telement.classList.add(\"tabulator-frozen\");\n\n\t\tif (column.modules.frozen.edge) {\n\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t}\n\t}\n};\n\nFrozenColumns.prototype._calcSpace = function (columns, index) {\n\tvar width = 0;\n\n\tfor (var _i12 = 0; _i12 < index; _i12++) {\n\t\tif (columns[_i12].visible) {\n\t\t\twidth += columns[_i12].getWidth();\n\t\t}\n\t}\n\n\treturn width;\n};\n\nTabulator.prototype.registerModule(\"frozenColumns\", FrozenColumns);\nvar FrozenRows = function FrozenRows(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.topElement = document.createElement(\"div\");\n\tthis.rows = [];\n\tthis.displayIndex = 0; //index in display pipeline\n};\n\nFrozenRows.prototype.initialize = function () {\n\tthis.rows = [];\n\n\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\n\t// this.table.columnManager.element.append(this.topElement);\n\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n};\n\nFrozenRows.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nFrozenRows.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\nFrozenRows.prototype.isFrozen = function () {\n\treturn !!this.rows.length;\n};\n\n//filter frozen rows out of display data\nFrozenRows.prototype.getRows = function (rows) {\n\tvar self = this,\n\t frozen = [],\n\t output = rows.slice(0);\n\n\tthis.rows.forEach(function (row) {\n\t\tvar index = output.indexOf(row);\n\n\t\tif (index > -1) {\n\t\t\toutput.splice(index, 1);\n\t\t}\n\t});\n\n\treturn output;\n};\n\nFrozenRows.prototype.freezeRow = function (row) {\n\tif (!row.modules.frozen) {\n\t\trow.modules.frozen = true;\n\t\tthis.topElement.appendChild(row.getElement());\n\t\trow.initialize();\n\t\trow.normalizeHeight();\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\tthis.rows.push(row);\n\n\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\tthis.styleRows();\n\t} else {\n\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t}\n};\n\nFrozenRows.prototype.unfreezeRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\n\tif (row.modules.frozen) {\n\n\t\trow.modules.frozen = false;\n\n\t\tthis.detachRow(row);\n\n\t\tthis.table.rowManager.adjustTableSize();\n\n\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\tif (this.rows.length) {\n\t\t\tthis.styleRows();\n\t\t}\n\t} else {\n\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t}\n};\n\nFrozenRows.prototype.detachRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\n\tif (index > -1) {\n\t\tvar rowEl = row.getElement();\n\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\tthis.rows.splice(index, 1);\n\t}\n};\n\nFrozenRows.prototype.styleRows = function (row) {\n\tvar self = this;\n\n\tthis.rows.forEach(function (row, i) {\n\t\tself.table.rowManager.styleRow(row, i);\n\t});\n};\n\nTabulator.prototype.registerModule(\"frozenRows\", FrozenRows);\n\n//public group object\nvar GroupComponent = function GroupComponent(group) {\n\tthis._group = group;\n\tthis.type = \"GroupComponent\";\n};\n\nGroupComponent.prototype.getKey = function () {\n\treturn this._group.key;\n};\n\nGroupComponent.prototype.getField = function () {\n\treturn this._group.field;\n};\n\nGroupComponent.prototype.getElement = function () {\n\treturn this._group.element;\n};\n\nGroupComponent.prototype.getRows = function () {\n\treturn this._group.getRows(true);\n};\n\nGroupComponent.prototype.getSubGroups = function () {\n\treturn this._group.getSubGroups(true);\n};\n\nGroupComponent.prototype.getParentGroup = function () {\n\treturn this._group.parent ? this._group.parent.getComponent() : false;\n};\n\nGroupComponent.prototype.getVisibility = function () {\n\tconsole.warn(\"getVisibility function is deprecated, you should now use the isVisible function\");\n\treturn this._group.visible;\n};\n\nGroupComponent.prototype.isVisible = function () {\n\treturn this._group.visible;\n};\n\nGroupComponent.prototype.show = function () {\n\tthis._group.show();\n};\n\nGroupComponent.prototype.hide = function () {\n\tthis._group.hide();\n};\n\nGroupComponent.prototype.toggle = function () {\n\tthis._group.toggleVisibility();\n};\n\nGroupComponent.prototype._getSelf = function () {\n\treturn this._group;\n};\n\nGroupComponent.prototype.getTable = function () {\n\treturn this._group.groupManager.table;\n};\n\n//////////////////////////////////////////////////\n//////////////// Group Functions /////////////////\n//////////////////////////////////////////////////\n\nvar Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {\n\n\tthis.groupManager = groupManager;\n\tthis.parent = parent;\n\tthis.key = key;\n\tthis.level = level;\n\tthis.field = field;\n\tthis.hasSubGroups = level < groupManager.groupIDLookups.length - 1;\n\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\tthis.type = \"group\"; //type of element\n\tthis.old = oldGroup;\n\tthis.rows = [];\n\tthis.groups = [];\n\tthis.groupList = [];\n\tthis.generator = generator;\n\tthis.elementContents = false;\n\tthis.height = 0;\n\tthis.outerHeight = 0;\n\tthis.initialized = false;\n\tthis.calcs = {};\n\tthis.initialized = false;\n\tthis.modules = {};\n\tthis.arrowElement = false;\n\n\tthis.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0];\n\n\tthis.component = null;\n\n\tthis.createElements();\n\tthis.addBindings();\n\n\tthis.createValueGroups();\n};\n\nGroup.prototype.wipe = function () {\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tgroup.wipe();\n\t\t});\n\t} else {\n\t\tthis.element = false;\n\t\tthis.arrowElement = false;\n\t\tthis.elementContents = false;\n\t}\n};\n\nGroup.prototype.createElements = function () {\n\tvar arrow = document.createElement(\"div\");\n\tarrow.classList.add(\"tabulator-arrow\");\n\n\tthis.element = document.createElement(\"div\");\n\tthis.element.classList.add(\"tabulator-row\");\n\tthis.element.classList.add(\"tabulator-group\");\n\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\n\tthis.arrowElement = document.createElement(\"div\");\n\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\tthis.arrowElement.appendChild(arrow);\n\n\t//setup movable rows\n\tif (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")) {\n\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t}\n};\n\nGroup.prototype.createValueGroups = function () {\n\tvar _this68 = this;\n\n\tvar level = this.level + 1;\n\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\tthis.groupManager.allowedValues[level].forEach(function (value) {\n\t\t\t_this68._createGroup(value, level);\n\t\t});\n\t}\n};\n\nGroup.prototype.addBindings = function () {\n\tvar self = this,\n\t dblTap,\n\t tapHold,\n\t tap,\n\t toggleElement;\n\n\t//handle group click events\n\tif (self.groupManager.table.options.groupClick) {\n\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\tself.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupDblClick) {\n\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\tself.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupContext) {\n\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\tself.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());\n\t\t});\n\t}\n\n\tif ((self.groupManager.table.options.groupContextMenu || self.groupManager.table.options.groupClickMenu) && self.groupManager.table.modExists(\"menu\")) {\n\t\tself.groupManager.table.modules.menu.initializeGroup.call(self.groupManager.table.modules.menu, self);\n\t}\n\n\tif (self.groupManager.table.options.groupTap) {\n\n\t\ttap = false;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\ttap = true;\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tif (tap) {\n\t\t\t\tself.groupManager.table.options.groupTap(e, self.getComponent());\n\t\t\t}\n\n\t\t\ttap = false;\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupDblTap) {\n\n\t\tdblTap = null;\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\tif (dblTap) {\n\t\t\t\tclearTimeout(dblTap);\n\t\t\t\tdblTap = null;\n\n\t\t\t\tself.groupManager.table.options.groupDblTap(e, self.getComponent());\n\t\t\t} else {\n\n\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupTapHold) {\n\n\t\ttapHold = null;\n\n\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\n\t\t\ttapHold = setTimeout(function () {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t\ttap = false;\n\t\t\t\tself.groupManager.table.options.groupTapHold(e, self.getComponent());\n\t\t\t}, 1000);\n\t\t}, { passive: true });\n\n\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t});\n\t}\n\n\tif (self.groupManager.table.options.groupToggleElement) {\n\t\ttoggleElement = self.groupManager.table.options.groupToggleElement == \"arrow\" ? self.arrowElement : self.element;\n\n\t\ttoggleElement.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tself.toggleVisibility();\n\t\t});\n\t}\n};\n\nGroup.prototype._createGroup = function (groupID, level) {\n\tvar groupKey = level + \"_\" + groupID;\n\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\n\tthis.groups[groupKey] = group;\n\tthis.groupList.push(group);\n};\n\nGroup.prototype._addRowToGroup = function (row) {\n\n\tvar level = this.level + 1;\n\n\tif (this.hasSubGroups) {\n\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t groupKey = level + \"_\" + groupID;\n\n\t\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\t\tif (this.groups[groupKey]) {\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.groups[groupKey]) {\n\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t}\n\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t}\n};\n\nGroup.prototype._addRow = function (row) {\n\tthis.rows.push(row);\n\trow.modules.group = this;\n};\n\nGroup.prototype.insertRow = function (row, to, after) {\n\tvar data = this.conformRowData({});\n\n\trow.updateData(data);\n\n\tvar toIndex = this.rows.indexOf(to);\n\n\tif (toIndex > -1) {\n\t\tif (after) {\n\t\t\tthis.rows.splice(toIndex + 1, 0, row);\n\t\t} else {\n\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t}\n\t} else {\n\t\tif (after) {\n\t\t\tthis.rows.push(row);\n\t\t} else {\n\t\t\tthis.rows.unshift(row);\n\t\t}\n\t}\n\n\trow.modules.group = this;\n\n\tthis.generateGroupHeaderContents();\n\n\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t}\n\n\tthis.groupManager.updateGroupRows(true);\n};\n\nGroup.prototype.scrollHeader = function (left) {\n\tthis.arrowElement.style.marginLeft = left;\n\n\tthis.groupList.forEach(function (child) {\n\t\tchild.scrollHeader(left);\n\t});\n};\n\nGroup.prototype.getRowIndex = function (row) {};\n\n//update row data to match grouping contraints\nGroup.prototype.conformRowData = function (data) {\n\tif (this.field) {\n\t\tdata[this.field] = this.key;\n\t} else {\n\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t}\n\n\tif (this.parent) {\n\t\tdata = this.parent.conformRowData(data);\n\t}\n\n\treturn data;\n};\n\nGroup.prototype.removeRow = function (row) {\n\tvar index = this.rows.indexOf(row);\n\tvar el = row.getElement();\n\n\tif (index > -1) {\n\t\tthis.rows.splice(index, 1);\n\t}\n\n\tif (!this.groupManager.table.options.groupValues && !this.rows.length) {\n\t\tif (this.parent) {\n\t\t\tthis.parent.removeGroup(this);\n\t\t} else {\n\t\t\tthis.groupManager.removeGroup(this);\n\t\t}\n\n\t\tthis.groupManager.updateGroupRows(true);\n\t} else {\n\n\t\tif (el.parentNode) {\n\t\t\tel.parentNode.removeChild(el);\n\t\t}\n\n\t\tthis.generateGroupHeaderContents();\n\n\t\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\t}\n};\n\nGroup.prototype.removeGroup = function (group) {\n\tvar groupKey = group.level + \"_\" + group.key,\n\t index;\n\n\tif (this.groups[groupKey]) {\n\t\tdelete this.groups[groupKey];\n\n\t\tindex = this.groupList.indexOf(group);\n\n\t\tif (index > -1) {\n\t\t\tthis.groupList.splice(index, 1);\n\t\t}\n\n\t\tif (!this.groupList.length) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t} else {\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\n\t\t}\n\t}\n};\n\nGroup.prototype.getHeadersAndRows = function (noCalc) {\n\tvar output = [];\n\n\toutput.push(this);\n\n\tthis._visSet();\n\n\tif (this.visible) {\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\n\t\t\t});\n\t\t} else {\n\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t}\n\n\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\toutput.push(this.calcs.top);\n\t\t\t}\n\n\t\t\toutput = output.concat(this.rows);\n\n\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t}\n\n\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\") {\n\n\t\t\tif (this.groupManager.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output;\n};\n\nGroup.prototype.getData = function (visible, transform) {\n\tvar self = this,\n\t output = [];\n\n\tthis._visSet();\n\n\tif (!visible || visible && this.visible) {\n\t\tthis.rows.forEach(function (row) {\n\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t});\n\t}\n\n\treturn output;\n};\n\n// Group.prototype.getRows = function(){\n// \tthis._visSet();\n\n// \treturn this.visible ? this.rows : [];\n// };\n\nGroup.prototype.getRowCount = function () {\n\tvar count = 0;\n\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tcount += group.getRowCount();\n\t\t});\n\t} else {\n\t\tcount = this.rows.length;\n\t}\n\treturn count;\n};\n\nGroup.prototype.toggleVisibility = function () {\n\tif (this.visible) {\n\t\tthis.hide();\n\t} else {\n\t\tthis.show();\n\t}\n};\n\nGroup.prototype.hide = function () {\n\tthis.visible = false;\n\n\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\n\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\trow.detachElement();\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tthis.rows.forEach(function (row) {\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t});\n\t\t}\n\n\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\n\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);\n};\n\nGroup.prototype.show = function () {\n\tvar self = this;\n\n\tself.visible = true;\n\n\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\n\t\tvar prev = self.getElement();\n\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tself.rows.forEach(function (row) {\n\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\trow.initialize();\n\t\t\t\tprev = rowEl;\n\t\t\t});\n\t\t}\n\n\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t} else {\n\t\tthis.groupManager.updateGroupRows(true);\n\t}\n\n\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);\n};\n\nGroup.prototype._visSet = function () {\n\tvar data = [];\n\n\tif (typeof this.visible == \"function\") {\n\n\t\tthis.rows.forEach(function (row) {\n\t\t\tdata.push(row.getData());\n\t\t});\n\n\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t}\n};\n\nGroup.prototype.getRowGroup = function (row) {\n\tvar match = false;\n\tif (this.groupList.length) {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tvar result = group.getRowGroup(row);\n\n\t\t\tif (result) {\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\t} else {\n\t\tif (this.rows.find(function (item) {\n\t\t\treturn item === row;\n\t\t})) {\n\t\t\tmatch = this;\n\t\t}\n\t}\n\n\treturn match;\n};\n\nGroup.prototype.getSubGroups = function (component) {\n\tvar output = [];\n\n\tthis.groupList.forEach(function (child) {\n\t\toutput.push(component ? child.getComponent() : child);\n\t});\n\n\treturn output;\n};\n\nGroup.prototype.getRows = function (compoment) {\n\tvar output = [];\n\n\tthis.rows.forEach(function (row) {\n\t\toutput.push(compoment ? row.getComponent() : row);\n\t});\n\n\treturn output;\n};\n\nGroup.prototype.generateGroupHeaderContents = function () {\n\tvar data = [];\n\n\tthis.rows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\t});\n\n\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\n\twhile (this.element.firstChild) {\n\t\tthis.element.removeChild(this.element.firstChild);\n\t}if (typeof this.elementContents === \"string\") {\n\t\tthis.element.innerHTML = this.elementContents;\n\t} else {\n\t\tthis.element.appendChild(this.elementContents);\n\t}\n\n\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n};\n\nGroup.prototype.getPath = function () {\n\tvar path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n\tpath.unshift(this.key);\n\tif (this.parent) {\n\t\tthis.parent.getPath(path);\n\t}\n\treturn path;\n};\n////////////// Standard Row Functions //////////////\n\nGroup.prototype.getElement = function () {\n\tthis.addBindingsd = false;\n\n\tthis._visSet();\n\n\tif (this.visible) {\n\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t} else {\n\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t}\n\n\tfor (var i = 0; i < this.element.childNodes.length; ++i) {\n\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t}\n\n\tthis.generateGroupHeaderContents();\n\n\t// this.addBindings();\n\n\treturn this.element;\n};\n\nGroup.prototype.detachElement = function () {\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t}\n};\n\n//normalize the height of elements in the row\nGroup.prototype.normalizeHeight = function () {\n\tthis.setHeight(this.element.clientHeight);\n};\n\nGroup.prototype.initialize = function (force) {\n\tif (!this.initialized || force) {\n\t\tthis.normalizeHeight();\n\t\tthis.initialized = true;\n\t}\n};\n\nGroup.prototype.reinitialize = function () {\n\tthis.initialized = false;\n\tthis.height = 0;\n\n\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\t\tthis.initialize(true);\n\t}\n};\n\nGroup.prototype.setHeight = function (height) {\n\tif (this.height != height) {\n\t\tthis.height = height;\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t}\n};\n\n//return rows outer height\nGroup.prototype.getHeight = function () {\n\treturn this.outerHeight;\n};\n\nGroup.prototype.getGroup = function () {\n\treturn this;\n};\n\nGroup.prototype.reinitializeHeight = function () {};\nGroup.prototype.calcHeight = function () {};\nGroup.prototype.setCellHeight = function () {};\nGroup.prototype.clearCellHeight = function () {};\n\n//////////////// Object Generation /////////////////\nGroup.prototype.getComponent = function () {\n\tif (!this.component) {\n\t\tthis.component = new GroupComponent(this);\n\t}\n\n\treturn this.component;\n};\n\n//////////////////////////////////////////////////\n////////////// Group Row Extension ///////////////\n//////////////////////////////////////////////////\n\nvar GroupRows = function GroupRows(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\tthis.startOpen = [function () {\n\t\treturn false;\n\t}]; //starting state of group\n\tthis.headerGenerator = [function () {\n\t\treturn \"\";\n\t}];\n\tthis.groupList = []; //ordered list of groups\n\tthis.allowedValues = false;\n\tthis.groups = {}; //hold row groups\n\tthis.displayIndex = 0; //index in display pipeline\n};\n\n//initialize group configuration\nGroupRows.prototype.initialize = function () {\n\tvar self = this,\n\t groupBy = self.table.options.groupBy,\n\t startOpen = self.table.options.groupStartOpen,\n\t groupHeader = self.table.options.groupHeader;\n\n\tthis.allowedValues = self.table.options.groupValues;\n\n\tif (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {\n\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t}\n\n\tself.headerGenerator = [function () {\n\t\treturn \"\";\n\t}];\n\tthis.startOpen = [function () {\n\t\treturn false;\n\t}]; //starting state of group\n\n\tself.table.modules.localize.bind(\"groups|item\", function (langValue, lang) {\n\t\tself.headerGenerator[0] = function (value, count, data) {\n\t\t\t//header layout function\n\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"<span>(\" + count + \" \" + (count === 1 ? langValue : lang.groups.items) + \")</span>\";\n\t\t};\n\t});\n\n\tthis.groupIDLookups = [];\n\n\tif (Array.isArray(groupBy) || groupBy) {\n\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\") {\n\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t}\n\t} else {\n\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\") {\n\n\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\n\t\t\tcols.forEach(function (col) {\n\t\t\t\tif (col.definition.topCalc) {\n\t\t\t\t\tself.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t}\n\n\t\t\t\tif (col.definition.bottomCalc) {\n\t\t\t\t\tself.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (!Array.isArray(groupBy)) {\n\t\tgroupBy = [groupBy];\n\t}\n\n\tgroupBy.forEach(function (group, i) {\n\t\tvar lookupFunc, column;\n\n\t\tif (typeof group == \"function\") {\n\t\t\tlookupFunc = group;\n\t\t} else {\n\t\t\tcolumn = self.table.columnManager.getColumnByField(group);\n\n\t\t\tif (column) {\n\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\treturn data[group];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tself.groupIDLookups.push({\n\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\tfunc: lookupFunc,\n\t\t\tvalues: self.allowedValues ? self.allowedValues[i] : false\n\t\t});\n\t});\n\n\tif (startOpen) {\n\n\t\tif (!Array.isArray(startOpen)) {\n\t\t\tstartOpen = [startOpen];\n\t\t}\n\n\t\tstartOpen.forEach(function (level) {\n\t\t\tlevel = typeof level == \"function\" ? level : function () {\n\t\t\t\treturn true;\n\t\t\t};\n\t\t});\n\n\t\tself.startOpen = startOpen;\n\t}\n\n\tif (groupHeader) {\n\t\tself.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t}\n\n\tthis.initialized = true;\n};\n\nGroupRows.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nGroupRows.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\n//return appropriate rows with group headers\nGroupRows.prototype.getRows = function (rows) {\n\tif (this.groupIDLookups.length) {\n\n\t\tthis.table.options.dataGrouping.call(this.table);\n\n\t\tthis.generateGroups(rows);\n\n\t\tif (this.table.options.dataGrouped) {\n\t\t\tthis.table.options.dataGrouped.call(this.table, this.getGroups(true));\n\t\t}\n\n\t\treturn this.updateGroupRows();\n\t} else {\n\t\treturn rows.slice(0);\n\t}\n};\n\nGroupRows.prototype.getGroups = function (compoment) {\n\tvar groupComponents = [];\n\n\tthis.groupList.forEach(function (group) {\n\t\tgroupComponents.push(compoment ? group.getComponent() : group);\n\t});\n\n\treturn groupComponents;\n};\n\nGroupRows.prototype.getChildGroups = function (group) {\n\tvar _this69 = this;\n\n\tvar groupComponents = [];\n\n\tif (!group) {\n\t\tgroup = this;\n\t}\n\n\tgroup.groupList.forEach(function (child) {\n\t\tif (child.groupList.length) {\n\t\t\tgroupComponents = groupComponents.concat(_this69.getChildGroups(child));\n\t\t} else {\n\t\t\tgroupComponents.push(child);\n\t\t}\n\t});\n\n\treturn groupComponents;\n};\n\nGroupRows.prototype.wipe = function () {\n\tthis.groupList.forEach(function (group) {\n\t\tgroup.wipe();\n\t});\n};\n\nGroupRows.prototype.pullGroupListData = function (groupList) {\n\tvar self = this;\n\tvar groupListData = [];\n\n\tgroupList.forEach(function (group) {\n\t\tvar groupHeader = {};\n\t\tgroupHeader.level = 0;\n\t\tgroupHeader.rowCount = 0;\n\t\tgroupHeader.headerContent = \"\";\n\t\tvar childData = [];\n\n\t\tif (group.hasSubGroups) {\n\t\t\tchildData = self.pullGroupListData(group.groupList);\n\n\t\t\tgroupHeader.level = group.level;\n\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\n\t\t\tgroupListData.push(groupHeader);\n\t\t\tgroupListData = groupListData.concat(childData);\n\t\t} else {\n\t\t\tgroupHeader.level = group.level;\n\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\tgroupHeader.rowCount = group.getRows().length;\n\n\t\t\tgroupListData.push(groupHeader);\n\n\t\t\tgroup.getRows().forEach(function (row) {\n\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t});\n\t\t}\n\t});\n\n\treturn groupListData;\n};\n\nGroupRows.prototype.getGroupedData = function () {\n\n\treturn this.pullGroupListData(this.groupList);\n};\n\nGroupRows.prototype.getRowGroup = function (row) {\n\tvar match = false;\n\n\tthis.groupList.forEach(function (group) {\n\t\tvar result = group.getRowGroup(row);\n\n\t\tif (result) {\n\t\t\tmatch = result;\n\t\t}\n\t});\n\n\treturn match;\n};\n\nGroupRows.prototype.countGroups = function () {\n\treturn this.groupList.length;\n};\n\nGroupRows.prototype.generateGroups = function (rows) {\n\tvar self = this,\n\t oldGroups = self.groups;\n\n\tself.groups = {};\n\tself.groupList = [];\n\n\tif (this.allowedValues && this.allowedValues[0]) {\n\t\tthis.allowedValues[0].forEach(function (value) {\n\t\t\tself.createGroup(value, 0, oldGroups);\n\t\t});\n\n\t\trows.forEach(function (row) {\n\t\t\tself.assignRowToExistingGroup(row, oldGroups);\n\t\t});\n\t} else {\n\t\trows.forEach(function (row) {\n\t\t\tself.assignRowToGroup(row, oldGroups);\n\t\t});\n\t}\n};\n\nGroupRows.prototype.createGroup = function (groupID, level, oldGroups) {\n\tvar groupKey = level + \"_\" + groupID,\n\t group;\n\n\toldGroups = oldGroups || [];\n\n\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\n\tthis.groups[groupKey] = group;\n\tthis.groupList.push(group);\n};\n\n// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){\n// \tvar groupID = this.groupIDLookups[0].func(row.getData()),\n// \tgroupKey = \"0_\" + groupID;\n\n// \tif(!this.groups[groupKey]){\n// \t\tthis.createGroup(groupID, 0, oldGroups);\n// \t}\n\n// \tthis.groups[groupKey].addRow(row);\n// };\n\nGroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {\n\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t groupKey = \"0_\" + groupID;\n\n\tif (this.groups[groupKey]) {\n\t\tthis.groups[groupKey].addRow(row);\n\t}\n};\n\nGroupRows.prototype.assignRowToGroup = function (row, oldGroups) {\n\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t newGroupNeeded = !this.groups[\"0_\" + groupID];\n\n\tif (newGroupNeeded) {\n\t\tthis.createGroup(groupID, 0, oldGroups);\n\t}\n\n\tthis.groups[\"0_\" + groupID].addRow(row);\n\n\treturn !newGroupNeeded;\n};\n\nGroupRows.prototype.reassignRowToGroup = function (row) {\n\tvar oldRowGroup = row.getGroup(),\n\t oldGroupPath = oldRowGroup.getPath(),\n\t newGroupPath = this.getExpectedPath(row),\n\t samePath = true;\n\t// figure out if new group path is the same as old group path\n\tvar samePath = oldGroupPath.length == newGroupPath.length && oldGroupPath.every(function (element, index) {\n\t\treturn element === newGroupPath[index];\n\t});\n\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\n\tif (!samePath) {\n\t\toldRowGroup.removeRow(row);\n\t\tthis.assignRowToGroup(row, self.groups);\n\t\tthis.table.rowManager.refreshActiveData(\"group\", false, true);\n\t}\n};\n\nGroupRows.prototype.getExpectedPath = function (row) {\n\tvar groupPath = [],\n\t rowData = row.getData();\n\tthis.groupIDLookups.forEach(function (groupId) {\n\t\tgroupPath.push(groupId.func(rowData));\n\t});\n\treturn groupPath;\n};\n\nGroupRows.prototype.updateGroupRows = function (force) {\n\tvar self = this,\n\t output = [],\n\t oldRowCount;\n\n\tself.groupList.forEach(function (group) {\n\t\toutput = output.concat(group.getHeadersAndRows());\n\t});\n\n\t//force update of table display\n\tif (force) {\n\n\t\tvar displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\n\n\t\tif (displayIndex !== true) {\n\t\t\tthis.setDisplayIndex(displayIndex);\n\t\t}\n\n\t\tself.table.rowManager.refreshActiveData(\"group\", true, true);\n\t}\n\n\treturn output;\n};\n\nGroupRows.prototype.scrollHeaders = function (left) {\n\tif (this.table.options.virtualDomHoz) {\n\t\tleft -= this.table.vdomHoz.vDomPadLeft;\n\t}\n\n\tleft = left + \"px\";\n\n\tthis.groupList.forEach(function (group) {\n\t\tgroup.scrollHeader(left);\n\t});\n};\n\nGroupRows.prototype.removeGroup = function (group) {\n\tvar groupKey = group.level + \"_\" + group.key,\n\t index;\n\n\tif (this.groups[groupKey]) {\n\t\tdelete this.groups[groupKey];\n\n\t\tindex = this.groupList.indexOf(group);\n\n\t\tif (index > -1) {\n\t\t\tthis.groupList.splice(index, 1);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"groupRows\", GroupRows);\nvar History = function History(table) {\n\tthis.table = table; //hold Tabulator object\n\n\tthis.history = [];\n\tthis.index = -1;\n};\n\nHistory.prototype.clear = function () {\n\tthis.history = [];\n\tthis.index = -1;\n};\n\nHistory.prototype.action = function (type, component, data) {\n\n\tthis.history = this.history.slice(0, this.index + 1);\n\n\tthis.history.push({\n\t\ttype: type,\n\t\tcomponent: component,\n\t\tdata: data\n\t});\n\n\tthis.index++;\n};\n\nHistory.prototype.getHistoryUndoSize = function () {\n\treturn this.index + 1;\n};\n\nHistory.prototype.getHistoryRedoSize = function () {\n\treturn this.history.length - (this.index + 1);\n};\n\nHistory.prototype.clearComponentHistory = function (component) {\n\tvar index = this.history.findIndex(function (item) {\n\t\treturn item.component === component;\n\t});\n\n\tif (index > -1) {\n\t\tthis.history.splice(index, 1);\n\t\tif (index <= this.index) {\n\t\t\tthis.index--;\n\t\t}\n\n\t\tthis.clearComponentHistory(component);\n\t}\n};\n\nHistory.prototype.undo = function () {\n\n\tif (this.index > -1) {\n\t\tvar action = this.history[this.index];\n\n\t\tthis.undoers[action.type].call(this, action);\n\n\t\tthis.index--;\n\n\t\tthis.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"History Undo Error - No more history to undo\");\n\t\treturn false;\n\t}\n};\n\nHistory.prototype.redo = function () {\n\tif (this.history.length - 1 > this.index) {\n\n\t\tthis.index++;\n\n\t\tvar action = this.history[this.index];\n\n\t\tthis.redoers[action.type].call(this, action);\n\n\t\tthis.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"History Redo Error - No more history to redo\");\n\t\treturn false;\n\t}\n};\n\nHistory.prototype.undoers = {\n\tcellEdit: function cellEdit(action) {\n\t\taction.component.setValueProcessData(action.data.oldValue);\n\t},\n\n\trowAdd: function rowAdd(action) {\n\t\taction.component.deleteActual();\n\t},\n\n\trowDelete: function rowDelete(action) {\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\t},\n\n\trowMove: function rowMove(action) {\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t}\n};\n\nHistory.prototype.redoers = {\n\tcellEdit: function cellEdit(action) {\n\t\taction.component.setValueProcessData(action.data.newValue);\n\t},\n\n\trowAdd: function rowAdd(action) {\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t}\n\n\t\tthis._rebindRow(action.component, newRow);\n\t},\n\n\trowDelete: function rowDelete(action) {\n\t\taction.component.deleteActual();\n\t},\n\n\trowMove: function rowMove(action) {\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\n\t\tthis.table.rowManager.redraw();\n\t}\n};\n\n//rebind rows to new element after deletion\nHistory.prototype._rebindRow = function (oldRow, newRow) {\n\tthis.history.forEach(function (action) {\n\t\tif (action.component instanceof Row) {\n\t\t\tif (action.component === oldRow) {\n\t\t\t\taction.component = newRow;\n\t\t\t}\n\t\t} else if (action.component instanceof Cell) {\n\t\t\tif (action.component.row === oldRow) {\n\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\tif (field) {\n\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\nTabulator.prototype.registerModule(\"history\", History);\nvar HtmlTableImport = function HtmlTableImport(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.fieldIndex = [];\n\tthis.hasIndex = false;\n};\n\nHtmlTableImport.prototype.parseTable = function () {\n\tvar self = this,\n\t element = self.table.element,\n\t options = self.table.options,\n\t columns = options.columns,\n\t headers = element.getElementsByTagName(\"th\"),\n\t rows = element.getElementsByTagName(\"tbody\")[0],\n\t data = [],\n\t newTable;\n\n\tself.hasIndex = false;\n\n\tself.table.options.htmlImporting.call(this.table);\n\n\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t//check for tablator inline options\n\tself._extractOptions(element, options);\n\n\tif (headers.length) {\n\t\tself._extractHeaders(headers, rows);\n\t} else {\n\t\tself._generateBlankHeaders(headers, rows);\n\t}\n\n\t//iterate through table rows and build data set\n\tfor (var index = 0; index < rows.length; index++) {\n\t\tvar row = rows[index],\n\t\t cells = row.getElementsByTagName(\"td\"),\n\t\t item = {};\n\n\t\t//create index if the dont exist in table\n\t\tif (!self.hasIndex) {\n\t\t\titem[options.index] = index;\n\t\t}\n\n\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\tvar cell = cells[i];\n\t\t\tif (typeof this.fieldIndex[i] !== \"undefined\") {\n\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t}\n\t\t}\n\n\t\t//add row data to item\n\t\tdata.push(item);\n\t}\n\n\t//create new element\n\tvar newElement = document.createElement(\"div\");\n\n\t//transfer attributes to new element\n\tvar attributes = element.attributes;\n\n\t// loop through attributes and apply them on div\n\n\tfor (var i in attributes) {\n\t\tif (_typeof(attributes[i]) == \"object\") {\n\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t}\n\t}\n\n\t// replace table with div element\n\telement.parentNode.replaceChild(newElement, element);\n\n\toptions.data = data;\n\n\tself.table.options.htmlImported.call(this.table);\n\n\t// // newElement.tabulator(options);\n\n\tthis.table.element = newElement;\n};\n\n//extract tabulator attribute options\nHtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {\n\tvar attributes = element.attributes;\n\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\n\tvar optionsList = {};\n\n\toptionsArr.forEach(function (item) {\n\t\toptionsList[item.toLowerCase()] = item;\n\t});\n\n\tfor (var index in attributes) {\n\t\tvar attrib = attributes[index];\n\t\tvar name;\n\n\t\tif (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0) {\n\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\tif (typeof optionsList[name] !== \"undefined\") {\n\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t}\n\t\t}\n\t}\n};\n\n//get value of attribute\nHtmlTableImport.prototype._attribValue = function (value) {\n\tif (value === \"true\") {\n\t\treturn true;\n\t}\n\n\tif (value === \"false\") {\n\t\treturn false;\n\t}\n\n\treturn value;\n};\n\n//find column if it has already been defined\nHtmlTableImport.prototype._findCol = function (title) {\n\tvar match = this.table.options.columns.find(function (column) {\n\t\treturn column.title === title;\n\t});\n\n\treturn match || false;\n};\n\n//extract column from headers\nHtmlTableImport.prototype._extractHeaders = function (headers, rows) {\n\tfor (var index = 0; index < headers.length; index++) {\n\t\tvar header = headers[index],\n\t\t exists = false,\n\t\t col = this._findCol(header.textContent),\n\t\t width,\n\t\t attributes;\n\n\t\tif (col) {\n\t\t\texists = true;\n\t\t} else {\n\t\t\tcol = { title: header.textContent.trim() };\n\t\t}\n\n\t\tif (!col.field) {\n\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\n\t\t}\n\n\t\twidth = header.getAttribute(\"width\");\n\n\t\tif (width && !col.width) {\n\t\t\tcol.width = width;\n\t\t}\n\n\t\t//check for tablator inline options\n\t\tattributes = header.attributes;\n\n\t\t// //check for tablator inline options\n\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\n\n\t\tthis.fieldIndex[index] = col.field;\n\n\t\tif (col.field == this.table.options.index) {\n\t\t\tthis.hasIndex = true;\n\t\t}\n\n\t\tif (!exists) {\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t}\n};\n\n//generate blank headers\nHtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {\n\tfor (var index = 0; index < headers.length; index++) {\n\t\tvar header = headers[index],\n\t\t col = { title: \"\", field: \"col\" + index };\n\n\t\tthis.fieldIndex[index] = col.field;\n\n\t\tvar width = header.getAttribute(\"width\");\n\n\t\tif (width) {\n\t\t\tcol.width = width;\n\t\t}\n\n\t\tthis.table.options.columns.push(col);\n\t}\n};\n\nTabulator.prototype.registerModule(\"htmlTableImport\", HtmlTableImport);\nvar Keybindings = function Keybindings(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.watchKeys = null;\n\tthis.pressedKeys = null;\n\tthis.keyupBinding = false;\n\tthis.keydownBinding = false;\n};\n\nKeybindings.prototype.initialize = function () {\n\tvar bindings = this.table.options.keybindings,\n\t mergedBindings = {};\n\n\tthis.watchKeys = {};\n\tthis.pressedKeys = [];\n\n\tif (bindings !== false) {\n\n\t\tfor (var key in this.bindings) {\n\t\t\tmergedBindings[key] = this.bindings[key];\n\t\t}\n\n\t\tif (Object.keys(bindings).length) {\n\n\t\t\tfor (var _key in bindings) {\n\t\t\t\tmergedBindings[_key] = bindings[_key];\n\t\t\t}\n\t\t}\n\n\t\tthis.mapBindings(mergedBindings);\n\t\tthis.bindEvents();\n\t}\n};\n\nKeybindings.prototype.mapBindings = function (bindings) {\n\tvar _this70 = this;\n\n\tvar self = this;\n\n\tvar _loop2 = function _loop2(key) {\n\n\t\tif (_this70.actions[key]) {\n\n\t\t\tif (bindings[key]) {\n\n\t\t\t\tif (_typeof(bindings[key]) !== \"object\") {\n\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t}\n\n\t\t\t\tbindings[key].forEach(function (binding) {\n\t\t\t\t\tself.mapBinding(key, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t}\n\t};\n\n\tfor (var key in bindings) {\n\t\t_loop2(key);\n\t}\n};\n\nKeybindings.prototype.mapBinding = function (action, symbolsList) {\n\tvar self = this;\n\n\tvar binding = {\n\t\taction: this.actions[action],\n\t\tkeys: [],\n\t\tctrl: false,\n\t\tshift: false,\n\t\tmeta: false\n\t};\n\n\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\tsymbols.forEach(function (symbol) {\n\t\tswitch (symbol) {\n\t\t\tcase \"ctrl\":\n\t\t\t\tbinding.ctrl = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"shift\":\n\t\t\t\tbinding.shift = true;\n\t\t\t\tbreak;\n\n\t\t\tcase \"meta\":\n\t\t\t\tbinding.meta = true;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tsymbol = parseInt(symbol);\n\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\tif (!self.watchKeys[symbol]) {\n\t\t\t\t\tself.watchKeys[symbol] = [];\n\t\t\t\t}\n\n\t\t\t\tself.watchKeys[symbol].push(binding);\n\t\t}\n\t});\n};\n\nKeybindings.prototype.bindEvents = function () {\n\tvar self = this;\n\n\tthis.keyupBinding = function (e) {\n\t\tvar code = e.keyCode;\n\t\tvar bindings = self.watchKeys[code];\n\n\t\tif (bindings) {\n\n\t\t\tself.pressedKeys.push(code);\n\n\t\t\tbindings.forEach(function (binding) {\n\t\t\t\tself.checkBinding(e, binding);\n\t\t\t});\n\t\t}\n\t};\n\n\tthis.keydownBinding = function (e) {\n\t\tvar code = e.keyCode;\n\t\tvar bindings = self.watchKeys[code];\n\n\t\tif (bindings) {\n\n\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\tif (index > -1) {\n\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n};\n\nKeybindings.prototype.clearBindings = function () {\n\tif (this.keyupBinding) {\n\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t}\n\n\tif (this.keydownBinding) {\n\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t}\n};\n\nKeybindings.prototype.checkBinding = function (e, binding) {\n\tvar self = this,\n\t match = true;\n\n\tif (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {\n\t\tbinding.keys.forEach(function (key) {\n\t\t\tvar index = self.pressedKeys.indexOf(key);\n\n\t\t\tif (index == -1) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tbinding.action.call(self, e);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//default bindings\nKeybindings.prototype.bindings = {\n\tnavPrev: \"shift + 9\",\n\tnavNext: 9,\n\tnavUp: 38,\n\tnavDown: 40,\n\tscrollPageUp: 33,\n\tscrollPageDown: 34,\n\tscrollToStart: 36,\n\tscrollToEnd: 35,\n\tundo: \"ctrl + 90\",\n\tredo: \"ctrl + 89\",\n\tcopyToClipboard: \"ctrl + 67\"\n};\n\n//default actions\nKeybindings.prototype.actions = {\n\tkeyBlock: function keyBlock(e) {\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t},\n\tscrollPageUp: function scrollPageUp(e) {\n\t\tvar rowManager = this.table.rowManager,\n\t\t newPos = rowManager.scrollTop - rowManager.height,\n\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\tif (newPos >= 0) {\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t} else {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollPageDown: function scrollPageDown(e) {\n\t\tvar rowManager = this.table.rowManager,\n\t\t newPos = rowManager.scrollTop + rowManager.height,\n\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\tif (newPos <= scrollMax) {\n\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t} else {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToStart: function scrollToStart(e) {\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tscrollToEnd: function scrollToEnd(e) {\n\t\tvar rowManager = this.table.rowManager;\n\n\t\te.preventDefault();\n\n\t\tif (rowManager.displayRowsCount) {\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t}\n\n\t\tthis.table.element.focus();\n\t},\n\tnavPrev: function navPrev(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().prev();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavNext: function navNext(e) {\n\t\tvar cell = false;\n\t\tvar newRow = this.table.options.tabEndNewRow;\n\t\tvar nav;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tnav = cell.nav();\n\n\t\t\t\tif (!nav.next()) {\n\t\t\t\t\tif (newRow) {\n\n\t\t\t\t\t\tcell.getElement().firstChild.blur();\n\n\t\t\t\t\t\tif (newRow === true) {\n\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (typeof newRow == \"function\") {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewRow.then(function () {\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tnav.next();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tnavLeft: function navLeft(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().left();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavRight: function navRight(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().right();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavUp: function navUp(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().up();\n\t\t\t}\n\t\t}\n\t},\n\n\tnavDown: function navDown(e) {\n\t\tvar cell = false;\n\n\t\tif (this.table.modExists(\"edit\")) {\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tcell.nav().down();\n\t\t\t}\n\t\t}\n\t},\n\n\tundo: function undo(e) {\n\t\tvar cell = false;\n\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (!cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.undo();\n\t\t\t}\n\t\t}\n\t},\n\n\tredo: function redo(e) {\n\t\tvar cell = false;\n\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\tif (!cell) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.table.modules.history.redo();\n\t\t\t}\n\t\t}\n\t},\n\n\tcopyToClipboard: function copyToClipboard(e) {\n\t\tif (!this.table.modules.edit.currentCell) {\n\t\t\tif (this.table.modExists(\"clipboard\", true)) {\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t}\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"keybindings\", Keybindings);\nvar Menu = function Menu(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.menuElements = [];\n\tthis.blurEvent = this.hideMenu.bind(this);\n\tthis.escEvent = this.escMenu.bind(this);\n\tthis.nestedMenuBlock = false;\n\tthis.positionReversedX = false;\n};\n\nMenu.prototype.initializeColumnHeader = function (column) {\n\tvar _this71 = this;\n\n\tvar headerMenuEl;\n\n\tif (column.definition.headerContextMenu) {\n\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\n\t\tthis.tapHold(column, column.definition.headerContextMenu);\n\t}\n\n\t// if(column.definition.headerClickMenu){\n\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\n\t// }\n\n\tif (column.definition.headerMenu) {\n\n\t\theaderMenuEl = document.createElement(\"span\");\n\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\n\t\theaderMenuEl.innerHTML = \"⋮\";\n\n\t\theaderMenuEl.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\n\t\t\t_this71.LoadMenuEvent(column, column.definition.headerMenu, e);\n\t\t});\n\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t}\n};\n\nMenu.prototype.LoadMenuEvent = function (component, menu, e) {\n\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\n\n\t// if(component instanceof Cell){\n\t// \te.stopImmediatePropagation();\n\t// }\n\n\tthis.loadMenu(e, component, menu);\n};\n\nMenu.prototype.tapHold = function (component, menu) {\n\tvar _this72 = this;\n\n\tvar element = component.getElement(),\n\t tapHold = null,\n\t loaded = false;\n\n\telement.addEventListener(\"touchstart\", function (e) {\n\t\tclearTimeout(tapHold);\n\t\tloaded = false;\n\n\t\ttapHold = setTimeout(function () {\n\t\t\tclearTimeout(tapHold);\n\t\t\ttapHold = null;\n\t\t\tloaded = true;\n\n\t\t\t_this72.LoadMenuEvent(component, menu, e);\n\t\t}, 1000);\n\t}, { passive: true });\n\n\telement.addEventListener(\"touchend\", function (e) {\n\t\tclearTimeout(tapHold);\n\t\ttapHold = null;\n\n\t\tif (loaded) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n};\n\nMenu.prototype.initializeCell = function (cell) {\n\tif (cell.column.definition.contextMenu) {\n\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\n\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\n\t}\n\n\tif (cell.column.definition.clickMenu) {\n\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\n\t}\n};\n\nMenu.prototype.initializeRow = function (row) {\n\tif (this.table.options.rowContextMenu) {\n\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\n\t\tthis.tapHold(row, this.table.options.rowContextMenu);\n\t}\n\n\tif (this.table.options.rowClickMenu) {\n\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\n\t}\n};\n\nMenu.prototype.initializeGroup = function (group) {\n\tif (this.table.options.groupContextMenu) {\n\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\n\t\tthis.tapHold(group, this.table.options.groupContextMenu);\n\t}\n\n\tif (this.table.options.groupClickMenu) {\n\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\n\t}\n};\n\nMenu.prototype.loadMenu = function (e, component, menu, parentEl) {\n\tvar _this73 = this;\n\n\tvar touch = !(e instanceof MouseEvent);\n\n\tvar menuEl = document.createElement(\"div\");\n\tmenuEl.classList.add(\"tabulator-menu\");\n\n\tif (!touch) {\n\t\te.preventDefault();\n\t}\n\n\t//abort if no menu set\n\tif (!menu || !menu.length) {\n\t\treturn;\n\t}\n\n\tif (!parentEl) {\n\t\tif (this.nestedMenuBlock) {\n\t\t\t//abort if child menu already open\n\t\t\tif (this.isOpen()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.nestedMenuBlock = setTimeout(function () {\n\t\t\t\t_this73.nestedMenuBlock = false;\n\t\t\t}, 100);\n\t\t}\n\n\t\tthis.hideMenu();\n\t\tthis.menuElements = [];\n\t}\n\n\tmenu.forEach(function (item) {\n\t\tvar itemEl = document.createElement(\"div\"),\n\t\t label = item.label,\n\t\t disabled = item.disabled;\n\n\t\tif (item.separator) {\n\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t} else {\n\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\n\t\t\tif (typeof label == \"function\") {\n\t\t\t\tlabel = label.call(_this73.table, component.getComponent());\n\t\t\t}\n\n\t\t\tif (label instanceof Node) {\n\t\t\t\titemEl.appendChild(label);\n\t\t\t} else {\n\t\t\t\titemEl.innerHTML = label;\n\t\t\t}\n\n\t\t\tif (typeof disabled == \"function\") {\n\t\t\t\tdisabled = disabled.call(_this73.table, component.getComponent());\n\t\t\t}\n\n\t\t\tif (disabled) {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (item.menu && item.menu.length) {\n\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t_this73.hideOldSubMenus(menuEl);\n\t\t\t\t\t\t_this73.loadMenu(e, component, item.menu, itemEl);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (item.action) {\n\t\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (item.menu && item.menu.length) {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\n\t\t\t}\n\t\t}\n\n\t\tmenuEl.appendChild(itemEl);\n\t});\n\n\tmenuEl.addEventListener(\"click\", function (e) {\n\t\t_this73.hideMenu();\n\t});\n\n\tthis.menuElements.push(menuEl);\n\tthis.positionMenu(menuEl, parentEl, touch, e);\n};\n\nMenu.prototype.hideOldSubMenus = function (menuEl) {\n\tvar index = this.menuElements.indexOf(menuEl);\n\n\tif (index > -1) {\n\t\tfor (var _i13 = this.menuElements.length - 1; _i13 > index; _i13--) {\n\t\t\tvar el = this.menuElements[_i13];\n\n\t\t\tif (el.parentNode) {\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\n\t\t\tthis.menuElements.pop();\n\t\t}\n\t}\n};\n\nMenu.prototype.positionMenu = function (element, parentEl, touch, e) {\n\tvar _this74 = this;\n\n\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\n\t x,\n\t y,\n\t parentOffset;\n\n\tif (!parentEl) {\n\t\tx = touch ? e.touches[0].pageX : e.pageX;\n\t\ty = touch ? e.touches[0].pageY : e.pageY;\n\n\t\tthis.positionReversedX = false;\n\t} else {\n\t\tparentOffset = Tabulator.prototype.helpers.elOffset(parentEl);\n\t\tx = parentOffset.left + parentEl.offsetWidth;\n\t\ty = parentOffset.top - 1;\n\t}\n\n\telement.style.top = y + \"px\";\n\telement.style.left = x + \"px\";\n\n\tsetTimeout(function () {\n\t\t_this74.table.rowManager.element.addEventListener(\"scroll\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"click\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"contextmenu\", _this74.blurEvent);\n\t\twindow.addEventListener(\"resize\", _this74.blurEvent);\n\t\tdocument.body.addEventListener(\"keydown\", _this74.escEvent);\n\t}, 100);\n\n\tdocument.body.appendChild(element);\n\n\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\tif (y + element.offsetHeight >= docHeight) {\n\t\telement.style.top = \"\";\n\n\t\tif (parentEl) {\n\t\t\telement.style.bottom = docHeight - parentOffset.top - parentEl.offsetHeight - 1 + \"px\";\n\t\t} else {\n\t\t\telement.style.bottom = docHeight - y + \"px\";\n\t\t}\n\t}\n\n\t//move menu to start on right edge if it is too close to the edge of the screen\n\tif (x + element.offsetWidth >= document.body.offsetWidth || this.positionReversedX) {\n\t\telement.style.left = \"\";\n\n\t\tif (parentEl) {\n\t\t\telement.style.right = document.documentElement.offsetWidth - parentOffset.left + \"px\";\n\t\t} else {\n\t\t\telement.style.right = document.documentElement.offsetWidth - x + \"px\";\n\t\t}\n\n\t\tthis.positionReversedX = true;\n\t}\n};\n\nMenu.prototype.isOpen = function () {\n\treturn !!this.menuElements.length;\n};\n\nMenu.prototype.escMenu = function (e) {\n\tif (e.keyCode == 27) {\n\t\tthis.hideMenu();\n\t}\n};\n\nMenu.prototype.hideMenu = function () {\n\tthis.menuElements.forEach(function (menuEl) {\n\t\tif (menuEl.parentNode) {\n\t\t\tmenuEl.parentNode.removeChild(menuEl);\n\t\t}\n\t});\n\n\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\n\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\twindow.removeEventListener(\"resize\", this.blurEvent);\n\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n};\n\n//default accessors\nMenu.prototype.menus = {};\n\nTabulator.prototype.registerModule(\"menu\", Menu);\nvar MoveColumns = function MoveColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.placeholderElement = this.createPlaceholderElement();\n\tthis.hoverElement = false; //floating column header element\n\tthis.checkTimeout = false; //click check timeout holder\n\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\tthis.moving = false; //currently moving column\n\tthis.toCol = false; //destination column\n\tthis.toColAfter = false; //position of moving column relative to the desitnation column\n\tthis.startX = 0; //starting position within header element\n\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\tthis.autoScrollTimeout = false; //auto scroll timeout\n\tthis.touchMove = false;\n\n\tthis.moveHover = this.moveHover.bind(this);\n\tthis.endMove = this.endMove.bind(this);\n};\n\nMoveColumns.prototype.createPlaceholderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-col\");\n\tel.classList.add(\"tabulator-col-placeholder\");\n\n\treturn el;\n};\n\nMoveColumns.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = {},\n\t colEl;\n\n\tif (!column.modules.frozen) {\n\n\t\tcolEl = column.getElement();\n\n\t\tconfig.mousemove = function (e) {\n\t\t\tif (column.parent === self.moving.parent) {\n\t\t\t\tif ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {\n\t\t\t\t\tif (self.toCol !== column || !self.toColAfter) {\n\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (self.toCol !== column || self.toColAfter) {\n\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tcolEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tself.touchMove = false;\n\t\t\tif (e.which === 1) {\n\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t}, self.checkPeriod);\n\t\t\t}\n\t\t});\n\n\t\tcolEl.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tself.bindTouchEvents(column);\n\t}\n\n\tcolumn.modules.moveColumn = config;\n};\n\nMoveColumns.prototype.bindTouchEvents = function (column) {\n\tvar self = this,\n\t colEl = column.getElement(),\n\t startXMove = false,\n\t //shifting center position of the cell\n\tdir = false,\n\t currentCol,\n\t nextCol,\n\t prevCol,\n\t nextColWidth,\n\t prevColWidth,\n\t nextColWidthLast,\n\t prevColWidthLast;\n\n\tcolEl.addEventListener(\"touchstart\", function (e) {\n\t\tself.checkTimeout = setTimeout(function () {\n\t\t\tself.touchMove = true;\n\t\t\tcurrentCol = column;\n\t\t\tnextCol = column.nextColumn();\n\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\tprevCol = column.prevColumn();\n\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\tnextColWidthLast = 0;\n\t\t\tprevColWidthLast = 0;\n\t\t\tstartXMove = false;\n\n\t\t\tself.startMove(e, column);\n\t\t}, self.checkPeriod);\n\t}, { passive: true });\n\n\tcolEl.addEventListener(\"touchmove\", function (e) {\n\t\tvar halfCol, diff, moveToCol;\n\n\t\tif (self.moving) {\n\t\t\tself.moveHover(e);\n\n\t\t\tif (!startXMove) {\n\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t}\n\n\t\t\tdiff = e.touches[0].pageX - startXMove;\n\n\t\t\tif (diff > 0) {\n\t\t\t\tif (nextCol && diff - nextColWidthLast > nextColWidth) {\n\t\t\t\t\tmoveToCol = nextCol;\n\n\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\tself.moveColumn(moveToCol, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (prevCol && -diff - prevColWidthLast > prevColWidth) {\n\t\t\t\t\tmoveToCol = prevCol;\n\n\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\tself.moveColumn(moveToCol, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (moveToCol) {\n\t\t\t\tcurrentCol = moveToCol;\n\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t}\n\t\t}\n\t}, { passive: true });\n\n\tcolEl.addEventListener(\"touchend\", function (e) {\n\t\tif (self.checkTimeout) {\n\t\t\tclearTimeout(self.checkTimeout);\n\t\t}\n\t\tif (self.moving) {\n\t\t\tself.endMove(e);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype.startMove = function (e, column) {\n\tvar element = column.getElement();\n\n\tthis.moving = column;\n\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;\n\n\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t//create placeholder\n\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\n\telement.parentNode.insertBefore(this.placeholderElement, element);\n\telement.parentNode.removeChild(element);\n\n\t//create hover element\n\tthis.hoverElement = element.cloneNode(true);\n\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\n\n\tthis.hoverElement.style.left = \"0\";\n\tthis.hoverElement.style.bottom = \"0\";\n\n\tif (!this.touchMove) {\n\t\tthis._bindMouseMove();\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t}\n\n\tthis.moveHover(e);\n};\n\nMoveColumns.prototype._bindMouseMove = function () {\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype._unbindMouseMove = function () {\n\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t}\n\t});\n};\n\nMoveColumns.prototype.moveColumn = function (column, after) {\n\tvar movingCells = this.moving.getCells();\n\n\tthis.toCol = column;\n\tthis.toColAfter = after;\n\n\tif (after) {\n\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\tvar cellEl = cell.getElement(true);\n\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t});\n\t} else {\n\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\tvar cellEl = cell.getElement(true);\n\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t});\n\t}\n};\n\nMoveColumns.prototype.endMove = function (e) {\n\tif (e.which === 1 || this.touchMove) {\n\t\tthis._unbindMouseMove();\n\n\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (this.toCol) {\n\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t}\n\n\t\tthis.moving = false;\n\t\tthis.toCol = false;\n\t\tthis.toColAfter = false;\n\n\t\tif (!this.touchMove) {\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t}\n\t}\n};\n\nMoveColumns.prototype.moveHover = function (e) {\n\tvar self = this,\n\t columnHolder = self.table.columnManager.getElement(),\n\t scrollLeft = columnHolder.scrollLeft,\n\t xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,\n\t scrollPos;\n\n\tself.hoverElement.style.left = xPos - self.startX + \"px\";\n\n\tif (xPos - scrollLeft < self.autoScrollMargin) {\n\t\tif (!self.autoScrollTimeout) {\n\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\tscrollPos = Math.max(0, scrollLeft - 5);\n\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t}, 1);\n\t\t}\n\t}\n\n\tif (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {\n\t\tif (!self.autoScrollTimeout) {\n\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);\n\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t}, 1);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"moveColumn\", MoveColumns);\n\nvar MoveRows = function MoveRows(table) {\n\n\tthis.table = table; //hold Tabulator object\n\tthis.placeholderElement = this.createPlaceholderElement();\n\tthis.hoverElement = false; //floating row header element\n\tthis.checkTimeout = false; //click check timeout holder\n\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\tthis.moving = false; //currently moving row\n\tthis.toRow = false; //destination row\n\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\n\tthis.hasHandle = false; //row has handle instead of fully movable row\n\tthis.startY = 0; //starting Y position within header element\n\tthis.startX = 0; //starting X position within header element\n\n\tthis.moveHover = this.moveHover.bind(this);\n\tthis.endMove = this.endMove.bind(this);\n\tthis.tableRowDropEvent = false;\n\n\tthis.touchMove = false;\n\n\tthis.connection = false;\n\tthis.connectionSelectorsTables = false;\n\tthis.connectionSelectorsElements = false;\n\tthis.connectionElements = [];\n\tthis.connections = [];\n\n\tthis.connectedTable = false;\n\tthis.connectedRow = false;\n};\n\nMoveRows.prototype.createPlaceholderElement = function () {\n\tvar el = document.createElement(\"div\");\n\n\tel.classList.add(\"tabulator-row\");\n\tel.classList.add(\"tabulator-row-placeholder\");\n\n\treturn el;\n};\n\nMoveRows.prototype.initialize = function (handle) {\n\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\n\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\n\n\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\n};\n\nMoveRows.prototype.setHandle = function (handle) {\n\tthis.hasHandle = handle;\n};\n\nMoveRows.prototype.initializeGroupHeader = function (group) {\n\tvar self = this,\n\t config = {},\n\t rowEl;\n\n\t//inter table drag drop\n\tconfig.mouseup = function (e) {\n\t\tself.tableRowDrop(e, row);\n\t}.bind(self);\n\n\t//same table drag drop\n\tconfig.mousemove = function (e) {\n\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {\n\t\t\tif (self.toRow !== group || !self.toRowAfter) {\n\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\tself.moveRow(group, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.toRow !== group || self.toRowAfter) {\n\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\tif (rowEl.previousSibling) {\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}.bind(self);\n\n\tgroup.modules.moveRow = config;\n};\n\nMoveRows.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t config = {},\n\t rowEl;\n\n\t//inter table drag drop\n\tconfig.mouseup = function (e) {\n\t\tself.tableRowDrop(e, row);\n\t}.bind(self);\n\n\t//same table drag drop\n\tconfig.mousemove = function (e) {\n\t\tvar rowEl = row.getElement();\n\n\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(rowEl).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {\n\t\t\tif (self.toRow !== row || !self.toRowAfter) {\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\tself.moveRow(row, true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (self.toRow !== row || self.toRowAfter) {\n\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\tself.moveRow(row, false);\n\t\t\t}\n\t\t}\n\t}.bind(self);\n\n\tif (!this.hasHandle) {\n\n\t\trowEl = row.getElement();\n\n\t\trowEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t}, self.checkPeriod);\n\t\t\t}\n\t\t});\n\n\t\trowEl.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.bindTouchEvents(row, row.getElement());\n\t}\n\n\trow.modules.moveRow = config;\n};\n\nMoveRows.prototype.initializeCell = function (cell) {\n\tvar self = this,\n\t cellEl = cell.getElement(true);\n\n\tcellEl.addEventListener(\"mousedown\", function (e) {\n\t\tif (e.which === 1) {\n\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\tself.startMove(e, cell.row);\n\t\t\t}, self.checkPeriod);\n\t\t}\n\t});\n\n\tcellEl.addEventListener(\"mouseup\", function (e) {\n\t\tif (e.which === 1) {\n\t\t\tif (self.checkTimeout) {\n\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t}\n\t\t}\n\t});\n\n\tthis.bindTouchEvents(cell.row, cellEl);\n};\n\nMoveRows.prototype.bindTouchEvents = function (row, element) {\n\tvar self = this,\n\t startYMove = false,\n\t //shifting center position of the cell\n\tdir = false,\n\t currentRow,\n\t nextRow,\n\t prevRow,\n\t nextRowHeight,\n\t prevRowHeight,\n\t nextRowHeightLast,\n\t prevRowHeightLast;\n\n\telement.addEventListener(\"touchstart\", function (e) {\n\t\tself.checkTimeout = setTimeout(function () {\n\t\t\tself.touchMove = true;\n\t\t\tcurrentRow = row;\n\t\t\tnextRow = row.nextRow();\n\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\tprevRow = row.prevRow();\n\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\tnextRowHeightLast = 0;\n\t\t\tprevRowHeightLast = 0;\n\t\t\tstartYMove = false;\n\n\t\t\tself.startMove(e, row);\n\t\t}, self.checkPeriod);\n\t}, { passive: true });\n\tthis.moving, this.toRow, this.toRowAfter;\n\telement.addEventListener(\"touchmove\", function (e) {\n\n\t\tvar halfCol, diff, moveToRow;\n\n\t\tif (self.moving) {\n\t\t\te.preventDefault();\n\n\t\t\tself.moveHover(e);\n\n\t\t\tif (!startYMove) {\n\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t}\n\n\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\tif (diff > 0) {\n\t\t\t\tif (nextRow && diff - nextRowHeightLast > nextRowHeight) {\n\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\tself.moveRow(moveToRow, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (prevRow && -diff - prevRowHeightLast > prevRowHeight) {\n\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\tself.moveRow(moveToRow, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (moveToRow) {\n\t\t\t\tcurrentRow = moveToRow;\n\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t}\n\t\t}\n\t});\n\n\telement.addEventListener(\"touchend\", function (e) {\n\t\tif (self.checkTimeout) {\n\t\t\tclearTimeout(self.checkTimeout);\n\t\t}\n\t\tif (self.moving) {\n\t\t\tself.endMove(e);\n\t\t\tself.touchMove = false;\n\t\t}\n\t});\n};\n\nMoveRows.prototype._bindMouseMove = function () {\n\tvar self = this;\n\n\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t}\n\t});\n};\n\nMoveRows.prototype._unbindMouseMove = function () {\n\tvar self = this;\n\n\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t}\n\t});\n};\n\nMoveRows.prototype.startMove = function (e, row) {\n\tvar element = row.getElement();\n\n\tthis.setStartPosition(e, row);\n\n\tthis.moving = row;\n\n\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t//create placeholder\n\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\tif (!this.connection) {\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\t} else {\n\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\tthis.connectToTables(row);\n\t}\n\n\t//create hover element\n\tthis.hoverElement = element.cloneNode(true);\n\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\tif (this.connection) {\n\t\tdocument.body.appendChild(this.hoverElement);\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.top = \"0\";\n\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t} else {\n\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.top = \"0\";\n\n\t\tthis._bindMouseMove();\n\t}\n\n\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\tthis.moveHover(e);\n};\n\nMoveRows.prototype.setStartPosition = function (e, row) {\n\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t pageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t element,\n\t position;\n\n\telement = row.getElement();\n\tif (this.connection) {\n\t\tposition = element.getBoundingClientRect();\n\n\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t} else {\n\t\tthis.startY = pageY - element.getBoundingClientRect().top;\n\t}\n};\n\nMoveRows.prototype.endMove = function (e) {\n\tif (!e || e.which === 1 || this.touchMove) {\n\t\tthis._unbindMouseMove();\n\n\t\tif (!this.connection) {\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t}\n\n\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (this.toRow) {\n\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t}\n\n\t\tthis.moving = false;\n\t\tthis.toRow = false;\n\t\tthis.toRowAfter = false;\n\n\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\tif (this.connection) {\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\tthis.disconnectFromTables();\n\t\t}\n\t}\n};\n\nMoveRows.prototype.moveRow = function (row, after) {\n\tthis.toRow = row;\n\tthis.toRowAfter = after;\n};\n\nMoveRows.prototype.moveHover = function (e) {\n\tif (this.connection) {\n\t\tthis.moveHoverConnections.call(this, e);\n\t} else {\n\t\tthis.moveHoverTable.call(this, e);\n\t}\n};\n\nMoveRows.prototype.moveHoverTable = function (e) {\n\tvar rowHolder = this.table.rowManager.getElement(),\n\t scrollTop = rowHolder.scrollTop,\n\t yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,\n\t scrollPos;\n\n\tthis.hoverElement.style.top = yPos - this.startY + \"px\";\n};\n\nMoveRows.prototype.moveHoverConnections = function (e) {\n\tthis.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + \"px\";\n\tthis.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + \"px\";\n};\n\nMoveRows.prototype.elementRowDrop = function (e, element, row) {\n\tif (this.table.options.movableRowsElementDrop) {\n\t\tthis.table.options.movableRowsElementDrop(e, element, row ? row.getComponent() : false);\n\t}\n};\n\n//establish connection with other tables\nMoveRows.prototype.connectToTables = function (row) {\n\tvar _this75 = this;\n\n\tvar connectionTables;\n\n\tif (this.connectionSelectorsTables) {\n\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\n\n\t\tthis.table.options.movableRowsSendingStart.call(this.table, connectionTables);\n\n\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\n\t\t\trow: row\n\t\t});\n\t}\n\n\tif (this.connectionSelectorsElements) {\n\n\t\tthis.connectionElements = [];\n\n\t\tif (!Array.isArray(this.connectionSelectorsElements)) {\n\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\n\t\t}\n\n\t\tthis.connectionSelectorsElements.forEach(function (query) {\n\t\t\tif (typeof query === \"string\") {\n\t\t\t\t_this75.connectionElements = _this75.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\n\t\t\t} else {\n\t\t\t\t_this75.connectionElements.push(query);\n\t\t\t}\n\t\t});\n\n\t\tthis.connectionElements.forEach(function (element) {\n\t\t\tvar dropEvent = function dropEvent(e) {\n\t\t\t\t_this75.elementRowDrop(e, element, _this75.moving);\n\t\t\t};\n\n\t\t\telement.addEventListener(\"mouseup\", dropEvent);\n\t\t\telement.tabulatorElementDropEvent = dropEvent;\n\n\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\n\t\t});\n\t}\n};\n\n//disconnect from other tables\nMoveRows.prototype.disconnectFromTables = function () {\n\tvar connectionTables;\n\n\tif (this.connectionSelectorsTables) {\n\t\tconnectionTables = this.table.modules.comms.getConnections(this.connectionSelectorsTables);\n\n\t\tthis.table.options.movableRowsSendingStop.call(this.table, connectionTables);\n\n\t\tthis.table.modules.comms.send(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\n\t}\n\n\tthis.connectionElements.forEach(function (element) {\n\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\n\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\n\t\tdelete element.tabulatorElementDropEvent;\n\t});\n};\n\n//accept incomming connection\nMoveRows.prototype.connect = function (table, row) {\n\tvar self = this;\n\tif (!this.connectedTable) {\n\t\tthis.connectedTable = table;\n\t\tthis.connectedRow = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t}\n\t\t});\n\n\t\tself.tableRowDropEvent = self.tableRowDrop.bind(self);\n\n\t\tself.table.element.addEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\tthis.table.options.movableRowsReceivingStart.call(this.table, row, table);\n\n\t\treturn true;\n\t} else {\n\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\treturn false;\n\t}\n};\n\n//close incomming connection\nMoveRows.prototype.disconnect = function (table) {\n\tvar self = this;\n\tif (table === this.connectedTable) {\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\n\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t}\n\t\t});\n\n\t\tself.table.element.removeEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\tthis.table.options.movableRowsReceivingStop.call(this.table, table);\n\t} else {\n\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t}\n};\n\nMoveRows.prototype.dropComplete = function (table, row, success) {\n\tvar sender = false;\n\n\tif (success) {\n\n\t\tswitch (_typeof(this.table.options.movableRowsSender)) {\n\t\t\tcase \"string\":\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (sender) {\n\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t} else {\n\t\t\tif (this.table.options.movableRowsSender) {\n\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t} else {\n\t\tthis.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t}\n\n\tthis.endMove();\n};\n\nMoveRows.prototype.tableRowDrop = function (e, row) {\n\tvar receiver = false,\n\t success = false;\n\n\te.stopImmediatePropagation();\n\n\tswitch (_typeof(this.table.options.movableRowsReceiver)) {\n\t\tcase \"string\":\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\tbreak;\n\t}\n\n\tif (receiver) {\n\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t} else {\n\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t}\n\n\tif (success) {\n\t\tthis.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t} else {\n\t\tthis.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t}\n\n\tthis.table.modules.comms.send(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\trow: row,\n\t\tsuccess: success\n\t});\n};\n\nMoveRows.prototype.receivers = {\n\tinsert: function insert(fromRow, toRow, fromTable) {\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\treturn true;\n\t},\n\n\tadd: function add(fromRow, toRow, fromTable) {\n\t\tthis.table.addRow(fromRow.getData());\n\t\treturn true;\n\t},\n\n\tupdate: function update(fromRow, toRow, fromTable) {\n\t\tif (toRow) {\n\t\t\ttoRow.update(fromRow.getData());\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\treplace: function replace(fromRow, toRow, fromTable) {\n\t\tif (toRow) {\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\ttoRow.delete();\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\nMoveRows.prototype.senders = {\n\tdelete: function _delete(fromRow, toRow, toTable) {\n\t\tfromRow.delete();\n\t}\n};\n\nMoveRows.prototype.commsReceived = function (table, action, data) {\n\tswitch (action) {\n\t\tcase \"connect\":\n\t\t\treturn this.connect(table, data.row);\n\t\t\tbreak;\n\n\t\tcase \"disconnect\":\n\t\t\treturn this.disconnect(table);\n\t\t\tbreak;\n\n\t\tcase \"dropcomplete\":\n\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t\tbreak;\n\t}\n};\n\nTabulator.prototype.registerModule(\"moveRow\", MoveRows);\nvar Mutator = function Mutator(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\n\tthis.enabled = true;\n};\n\n//initialize column mutator\nMutator.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t match = false,\n\t config = {};\n\n\tthis.allowedTypes.forEach(function (type) {\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t mutator;\n\n\t\tif (column.definition[key]) {\n\t\t\tmutator = self.lookupMutator(column.definition[key]);\n\n\t\t\tif (mutator) {\n\t\t\t\tmatch = true;\n\n\t\t\t\tconfig[key] = {\n\t\t\t\t\tmutator: mutator,\n\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\tif (match) {\n\t\tcolumn.modules.mutate = config;\n\t}\n};\n\nMutator.prototype.lookupMutator = function (value) {\n\tvar mutator = false;\n\n\t//set column mutator\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tif (this.mutators[value]) {\n\t\t\t\tmutator = this.mutators[value];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tmutator = value;\n\t\t\tbreak;\n\t}\n\n\treturn mutator;\n};\n\n//apply mutator to row\nMutator.prototype.transformRow = function (data, type, updatedData) {\n\tvar self = this,\n\t key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t value;\n\n\tif (this.enabled) {\n\n\t\tself.table.columnManager.traverse(function (column) {\n\t\t\tvar mutator, params, component;\n\n\t\t\tif (column.modules.mutate) {\n\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\tif (mutator) {\n\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\tif (type == \"data\" || typeof value !== \"undefined\") {\n\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n};\n\n//apply mutator to new cell value\nMutator.prototype.transformCell = function (cell, value) {\n\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t tempData = {};\n\n\tif (mutator) {\n\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\tcell.column.setFieldValue(tempData, value);\n\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t} else {\n\t\treturn value;\n\t}\n};\n\nMutator.prototype.enable = function () {\n\tthis.enabled = true;\n};\n\nMutator.prototype.disable = function () {\n\tthis.enabled = false;\n};\n\n//default mutators\nMutator.prototype.mutators = {};\n\nTabulator.prototype.registerModule(\"mutator\", Mutator);\nvar Page = function Page(table) {\n\n\tthis.table = table; //hold Tabulator object\n\n\tthis.mode = \"local\";\n\tthis.progressiveLoad = false;\n\n\tthis.size = 0;\n\tthis.page = 1;\n\tthis.count = 5;\n\tthis.max = 1;\n\n\tthis.displayIndex = 0; //index in display pipeline\n\n\tthis.initialLoad = true;\n\n\tthis.pageSizes = [];\n\n\tthis.dataReceivedNames = {};\n\tthis.dataSentNames = {};\n\n\tthis.createElements();\n};\n\nPage.prototype.createElements = function () {\n\n\tvar button;\n\n\tthis.element = document.createElement(\"span\");\n\tthis.element.classList.add(\"tabulator-paginator\");\n\n\tthis.pagesElement = document.createElement(\"span\");\n\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\n\tbutton = document.createElement(\"button\");\n\tbutton.classList.add(\"tabulator-page\");\n\tbutton.setAttribute(\"type\", \"button\");\n\tbutton.setAttribute(\"role\", \"button\");\n\tbutton.setAttribute(\"aria-label\", \"\");\n\tbutton.setAttribute(\"title\", \"\");\n\n\tthis.firstBut = button.cloneNode(true);\n\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\n\tthis.prevBut = button.cloneNode(true);\n\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\n\tthis.nextBut = button.cloneNode(true);\n\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\n\tthis.lastBut = button.cloneNode(true);\n\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\n\tif (this.table.options.paginationSizeSelector) {\n\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t}\n};\n\nPage.prototype.generatePageSizeSelectList = function () {\n\tvar _this76 = this;\n\n\tvar pageSizes = [];\n\n\tif (this.pageSizeSelect) {\n\n\t\tif (Array.isArray(this.table.options.paginationSizeSelector)) {\n\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\tthis.pageSizes = pageSizes;\n\n\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\tpageSizes = [];\n\n\t\t\t\tfor (var _i14 = 1; _i14 < 5; _i14++) {\n\t\t\t\t\tpageSizes.push(this.size * _i14);\n\t\t\t\t}\n\n\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t} else {\n\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t}\n\t\t}\n\n\t\twhile (this.pageSizeSelect.firstChild) {\n\t\t\tthis.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t}pageSizes.forEach(function (item) {\n\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\titemEl.value = item;\n\n\t\t\tif (item === true) {\n\t\t\t\t_this76.table.modules.localize.bind(\"pagination|all\", function (value) {\n\t\t\t\t\titemEl.innerHTML = value;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\titemEl.innerHTML = item;\n\t\t\t}\n\n\t\t\t_this76.pageSizeSelect.appendChild(itemEl);\n\t\t});\n\n\t\tthis.pageSizeSelect.value = this.size;\n\t}\n};\n\n//setup pageination\nPage.prototype.initialize = function (hidden) {\n\tvar self = this,\n\t pageSelectLabel,\n\t testElRow,\n\t testElCell;\n\n\t//update param names\n\tthis.dataSentNames = Object.assign({}, this.paginationDataSentNames);\n\tthis.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);\n\n\tthis.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);\n\tthis.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);\n\n\t//build pagination element\n\n\t//bind localizations\n\tself.table.modules.localize.bind(\"pagination|first\", function (value) {\n\t\tself.firstBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|first_title\", function (value) {\n\t\tself.firstBut.setAttribute(\"aria-label\", value);\n\t\tself.firstBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|prev\", function (value) {\n\t\tself.prevBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|prev_title\", function (value) {\n\t\tself.prevBut.setAttribute(\"aria-label\", value);\n\t\tself.prevBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|next\", function (value) {\n\t\tself.nextBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|next_title\", function (value) {\n\t\tself.nextBut.setAttribute(\"aria-label\", value);\n\t\tself.nextBut.setAttribute(\"title\", value);\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|last\", function (value) {\n\t\tself.lastBut.innerHTML = value;\n\t});\n\n\tself.table.modules.localize.bind(\"pagination|last_title\", function (value) {\n\t\tself.lastBut.setAttribute(\"aria-label\", value);\n\t\tself.lastBut.setAttribute(\"title\", value);\n\t});\n\n\t//click bindings\n\tself.firstBut.addEventListener(\"click\", function () {\n\t\tself.setPage(1).then(function () {}).catch(function () {});\n\t});\n\n\tself.prevBut.addEventListener(\"click\", function () {\n\t\tself.previousPage().then(function () {}).catch(function () {});\n\t});\n\n\tself.nextBut.addEventListener(\"click\", function () {\n\t\tself.nextPage().then(function () {}).catch(function () {});\n\t});\n\n\tself.lastBut.addEventListener(\"click\", function () {\n\t\tself.setPage(self.max).then(function () {}).catch(function () {});\n\t});\n\n\tif (self.table.options.paginationElement) {\n\t\tself.element = self.table.options.paginationElement;\n\t}\n\n\tif (this.pageSizeSelect) {\n\t\tpageSelectLabel = document.createElement(\"label\");\n\n\t\tself.table.modules.localize.bind(\"pagination|page_size\", function (value) {\n\t\t\tself.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\tself.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\tpageSelectLabel.innerHTML = value;\n\t\t});\n\n\t\tself.element.appendChild(pageSelectLabel);\n\t\tself.element.appendChild(self.pageSizeSelect);\n\n\t\tself.pageSizeSelect.addEventListener(\"change\", function (e) {\n\t\t\tself.setPageSize(self.pageSizeSelect.value == \"true\" ? true : self.pageSizeSelect.value);\n\t\t\tself.setPage(1).then(function () {}).catch(function () {});\n\t\t});\n\t}\n\n\t//append to DOM\n\tself.element.appendChild(self.firstBut);\n\tself.element.appendChild(self.prevBut);\n\tself.element.appendChild(self.pagesElement);\n\tself.element.appendChild(self.nextBut);\n\tself.element.appendChild(self.lastBut);\n\n\tif (!self.table.options.paginationElement && !hidden) {\n\t\tself.table.footerManager.append(self.element, self);\n\t}\n\n\t//set default values\n\tself.mode = self.table.options.pagination;\n\n\tif (self.table.options.paginationSize) {\n\t\tself.size = self.table.options.paginationSize;\n\t} else {\n\t\ttestElRow = document.createElement(\"div\");\n\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\ttestElRow.style.visibility = hidden;\n\n\t\ttestElCell = document.createElement(\"div\");\n\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\ttestElCell.innerHTML = \"Page Row Test\";\n\n\t\ttestElRow.appendChild(testElCell);\n\n\t\tself.table.rowManager.getTableElement().appendChild(testElRow);\n\n\t\tself.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\n\t\tself.table.rowManager.getTableElement().removeChild(testElRow);\n\t}\n\n\t// self.page = self.table.options.paginationInitialPage || 1;\n\tself.count = self.table.options.paginationButtonCount;\n\n\tself.generatePageSizeSelectList();\n};\n\nPage.prototype.initializeProgressive = function (mode) {\n\tthis.initialize(true);\n\tthis.mode = \"progressive_\" + mode;\n\tthis.progressiveLoad = true;\n};\n\nPage.prototype.setDisplayIndex = function (index) {\n\tthis.displayIndex = index;\n};\n\nPage.prototype.getDisplayIndex = function () {\n\treturn this.displayIndex;\n};\n\n//calculate maximum page from number of rows\nPage.prototype.setMaxRows = function (rowCount) {\n\tif (!rowCount) {\n\t\tthis.max = 1;\n\t} else {\n\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount / this.size);\n\t}\n\n\tif (this.page > this.max) {\n\t\tthis.page = this.max;\n\t}\n};\n\n//reset to first page without triggering action\nPage.prototype.reset = function (force, columnsChanged) {\n\tif (this.mode == \"local\" || force) {\n\t\tthis.page = 1;\n\t}\n\n\tif (columnsChanged) {\n\t\tthis.initialLoad = true;\n\t}\n\n\treturn true;\n};\n\n//set the maxmum page\nPage.prototype.setMaxPage = function (max) {\n\n\tmax = parseInt(max);\n\n\tthis.max = max || 1;\n\n\tif (this.page > this.max) {\n\t\tthis.page = this.max;\n\t\tthis.trigger();\n\t}\n};\n\n//set current page number\nPage.prototype.setPage = function (page) {\n\tvar _this77 = this;\n\n\tvar self = this;\n\n\tswitch (page) {\n\t\tcase \"first\":\n\t\t\treturn this.setPage(1);\n\t\t\tbreak;\n\n\t\tcase \"prev\":\n\t\t\treturn this.previousPage();\n\t\t\tbreak;\n\n\t\tcase \"next\":\n\t\t\treturn this.nextPage();\n\t\t\tbreak;\n\n\t\tcase \"last\":\n\t\t\treturn this.setPage(this.max);\n\t\t\tbreak;\n\t}\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tpage = parseInt(page);\n\n\t\tif (page > 0 && page <= _this77.max || _this77.mode !== \"local\") {\n\t\t\t_this77.page = page;\n\t\t\t_this77.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.page) {\n\t\t\t\tself.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + _this77.max + \":\", page);\n\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype.setPageToRow = function (row) {\n\tvar _this78 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tvar rows = _this78.table.rowManager.getDisplayRows(_this78.displayIndex - 1);\n\t\tvar index = rows.indexOf(row);\n\n\t\tif (index > -1) {\n\t\t\tvar page = _this78.size === true ? 1 : Math.ceil((index + 1) / _this78.size);\n\n\t\t\t_this78.setPage(page).then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype.setPageSize = function (size) {\n\tif (size !== true) {\n\t\tsize = parseInt(size);\n\t}\n\n\tif (size > 0) {\n\t\tthis.size = size;\n\t}\n\n\tif (this.pageSizeSelect) {\n\t\t// this.pageSizeSelect.value = size;\n\t\tthis.generatePageSizeSelectList();\n\t}\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page) {\n\t\tthis.table.modules.persistence.save(\"page\");\n\t}\n};\n\n//setup the pagination buttons\nPage.prototype._setPageButtons = function () {\n\tvar self = this;\n\n\tvar leftSize = Math.floor((this.count - 1) / 2);\n\tvar rightSize = Math.ceil((this.count - 1) / 2);\n\tvar min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);\n\tvar max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);\n\n\twhile (self.pagesElement.firstChild) {\n\t\tself.pagesElement.removeChild(self.pagesElement.firstChild);\n\t}if (self.page == 1) {\n\t\tself.firstBut.disabled = true;\n\t\tself.prevBut.disabled = true;\n\t} else {\n\t\tself.firstBut.disabled = false;\n\t\tself.prevBut.disabled = false;\n\t}\n\n\tif (self.page == self.max) {\n\t\tself.lastBut.disabled = true;\n\t\tself.nextBut.disabled = true;\n\t} else {\n\t\tself.lastBut.disabled = false;\n\t\tself.nextBut.disabled = false;\n\t}\n\n\tfor (var _i15 = min; _i15 <= max; _i15++) {\n\t\tif (_i15 > 0 && _i15 <= self.max) {\n\t\t\tself.pagesElement.appendChild(self._generatePageButton(_i15));\n\t\t}\n\t}\n\n\tthis.footerRedraw();\n};\n\nPage.prototype._generatePageButton = function (page) {\n\tvar self = this,\n\t button = document.createElement(\"button\");\n\n\tbutton.classList.add(\"tabulator-page\");\n\tif (page == self.page) {\n\t\tbutton.classList.add(\"active\");\n\t}\n\n\tbutton.setAttribute(\"type\", \"button\");\n\tbutton.setAttribute(\"role\", \"button\");\n\n\tself.table.modules.localize.bind(\"pagination|page_title\", function (value) {\n\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\n\t\tbutton.setAttribute(\"title\", value + \" \" + page);\n\t});\n\n\tbutton.setAttribute(\"data-page\", page);\n\tbutton.textContent = page;\n\n\tbutton.addEventListener(\"click\", function (e) {\n\t\tself.setPage(page).then(function () {}).catch(function () {});\n\t});\n\n\treturn button;\n};\n\n//previous page\nPage.prototype.previousPage = function () {\n\tvar _this79 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this79.page > 1) {\n\t\t\t_this79.page--;\n\t\t\t_this79.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (_this79.table.options.persistence && _this79.table.modExists(\"persistence\", true) && _this79.table.modules.persistence.config.page) {\n\t\t\t\t_this79.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\treject();\n\t\t}\n\t});\n};\n\n//next page\nPage.prototype.nextPage = function () {\n\tvar _this80 = this;\n\n\treturn new Promise(function (resolve, reject) {\n\t\tif (_this80.page < _this80.max) {\n\t\t\t_this80.page++;\n\t\t\t_this80.trigger().then(function () {\n\t\t\t\tresolve();\n\t\t\t}).catch(function () {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tif (_this80.table.options.persistence && _this80.table.modExists(\"persistence\", true) && _this80.table.modules.persistence.config.page) {\n\t\t\t\t_this80.table.modules.persistence.save(\"page\");\n\t\t\t}\n\t\t} else {\n\t\t\tif (!_this80.progressiveLoad) {\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + _this80.max + \":\", _this80.max + 1);\n\t\t\t}\n\t\t\treject();\n\t\t}\n\t});\n};\n\n//return current page number\nPage.prototype.getPage = function () {\n\treturn this.page;\n};\n\n//return max page number\nPage.prototype.getPageMax = function () {\n\treturn this.max;\n};\n\nPage.prototype.getPageSize = function (size) {\n\treturn this.size;\n};\n\nPage.prototype.getMode = function () {\n\treturn this.mode;\n};\n\n//return appropriate rows for current page\nPage.prototype.getRows = function (data) {\n\tvar output, start, end;\n\n\tif (this.mode == \"local\") {\n\t\toutput = [];\n\n\t\tif (this.size === true) {\n\t\t\tstart = 0;\n\t\t\tend = data.length;\n\t\t} else {\n\t\t\tstart = this.size * (this.page - 1);\n\t\t\tend = start + parseInt(this.size);\n\t\t}\n\n\t\tthis._setPageButtons();\n\n\t\tfor (var _i16 = start; _i16 < end; _i16++) {\n\t\t\tif (data[_i16]) {\n\t\t\t\toutput.push(data[_i16]);\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t} else {\n\n\t\tthis._setPageButtons();\n\n\t\treturn data.slice(0);\n\t}\n};\n\nPage.prototype.trigger = function () {\n\tvar _this81 = this;\n\n\tvar left;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tswitch (_this81.mode) {\n\t\t\tcase \"local\":\n\t\t\t\tleft = _this81.table.rowManager.scrollLeft;\n\n\t\t\t\t_this81.table.rowManager.refreshActiveData(\"page\");\n\t\t\t\t_this81.table.rowManager.scrollHorizontal(left);\n\n\t\t\t\t_this81.table.options.pageLoaded.call(_this81.table, _this81.getPage());\n\t\t\t\tresolve();\n\t\t\t\tbreak;\n\n\t\t\tcase \"remote\":\n\t\t\tcase \"progressive_load\":\n\t\t\tcase \"progressive_scroll\":\n\t\t\t\t_this81.table.modules.ajax.blockActiveRequest();\n\t\t\t\t_this81._getRemotePage().then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", _this81.mode);\n\t\t\t\treject();\n\t\t}\n\t});\n};\n\nPage.prototype._getRemotePage = function () {\n\tvar _this82 = this;\n\n\tvar self = this,\n\t oldParams,\n\t pageParams;\n\n\treturn new Promise(function (resolve, reject) {\n\n\t\tif (!self.table.modExists(\"ajax\", true)) {\n\t\t\treject();\n\t\t}\n\n\t\t//record old params and restore after request has been made\n\t\toldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});\n\t\tpageParams = self.table.modules.ajax.getParams();\n\n\t\t//configure request params\n\t\tpageParams[_this82.dataSentNames.page] = self.page;\n\n\t\t//set page size if defined\n\t\tif (_this82.size) {\n\t\t\tpageParams[_this82.dataSentNames.size] = _this82.size;\n\t\t}\n\n\t\t//set sort data if defined\n\t\tif (_this82.table.options.ajaxSorting && _this82.table.modExists(\"sort\")) {\n\t\t\tvar sorters = self.table.modules.sort.getSort();\n\n\t\t\tsorters.forEach(function (item) {\n\t\t\t\tdelete item.column;\n\t\t\t});\n\n\t\t\tpageParams[_this82.dataSentNames.sorters] = sorters;\n\t\t}\n\n\t\t//set filter data if defined\n\t\tif (_this82.table.options.ajaxFiltering && _this82.table.modExists(\"filter\")) {\n\t\t\tvar filters = self.table.modules.filter.getFilters(true, true);\n\t\t\tpageParams[_this82.dataSentNames.filters] = filters;\n\t\t}\n\n\t\tself.table.modules.ajax.setParams(pageParams);\n\n\t\tself.table.modules.ajax.sendRequest(_this82.progressiveLoad).then(function (data) {\n\t\t\tself._parseRemoteData(data);\n\t\t\tresolve();\n\t\t}).catch(function (e) {\n\t\t\treject();\n\t\t});\n\n\t\tself.table.modules.ajax.setParams(oldParams);\n\t});\n};\n\nPage.prototype._parseRemoteData = function (data) {\n\tvar self = this,\n\t left,\n\t data,\n\t margin;\n\n\tif (typeof data[this.dataReceivedNames.last_page] === \"undefined\") {\n\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\n\t}\n\n\tif (data[this.dataReceivedNames.data]) {\n\t\tthis.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;\n\n\t\tif (this.progressiveLoad) {\n\t\t\tswitch (this.mode) {\n\t\t\t\tcase \"progressive_load\":\n\n\t\t\t\t\tif (this.page == 1) {\n\t\t\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.table.rowManager.addRows(data[this.dataReceivedNames.data]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.page < this.max) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t\t}, self.table.options.ajaxProgressiveLoadDelay);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\tdata = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);\n\n\t\t\t\t\tthis.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);\n\n\t\t\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;\n\n\t\t\t\t\tif (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {\n\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tleft = this.table.rowManager.scrollLeft;\n\n\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\n\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\n\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\n\t\t}\n\n\t\tthis.initialLoad = false;\n\t} else {\n\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\n\t}\n};\n\n//handle the footer element being redrawn\nPage.prototype.footerRedraw = function () {\n\tvar footer = this.table.footerManager.element;\n\n\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\tthis.pagesElement.style.display = 'none';\n\t} else {\n\t\tthis.pagesElement.style.display = '';\n\n\t\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t}\n\t}\n};\n\n//set the paramter names for pagination requests\nPage.prototype.paginationDataSentNames = {\n\t\"page\": \"page\",\n\t\"size\": \"size\",\n\t\"sorters\": \"sorters\",\n\t// \"sort_dir\":\"sort_dir\",\n\t\"filters\": \"filters\"\n\t// \"filter_value\":\"filter_value\",\n\t// \"filter_type\":\"filter_type\",\n};\n\n//set the property names for pagination responses\nPage.prototype.paginationDataReceivedNames = {\n\t\"current_page\": \"current_page\",\n\t\"last_page\": \"last_page\",\n\t\"data\": \"data\"\n};\n\nTabulator.prototype.registerModule(\"page\", Page);\n\nvar Persistence = function Persistence(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.mode = \"\";\n\tthis.id = \"\";\n\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\tthis.defWatcherBlock = false;\n\tthis.config = {};\n\tthis.readFunc = false;\n\tthis.writeFunc = false;\n};\n\n// Test for whether localStorage is available for use.\nPersistence.prototype.localStorageTest = function () {\n\tvar testKey = \"_tabulator_test\";\n\n\ttry {\n\t\twindow.localStorage.setItem(testKey, testKey);\n\t\twindow.localStorage.removeItem(testKey);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n//setup parameters\nPersistence.prototype.initialize = function () {\n\t//determine persistent layout storage type\n\n\tvar mode = this.table.options.persistenceMode,\n\t id = this.table.options.persistenceID,\n\t retreivedData;\n\n\tthis.mode = mode !== true ? mode : this.localStorageTest() ? \"local\" : \"cookie\";\n\n\tif (this.table.options.persistenceReaderFunc) {\n\t\tif (typeof this.table.options.persistenceReaderFunc === \"function\") {\n\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t} else {\n\t\t\tif (this.readers[this.table.options.persistenceReaderFunc]) {\n\t\t\t\tthis.readFunc = this.readers[this.table.options.persistenceReaderFunc];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.readers[this.mode]) {\n\t\t\tthis.readFunc = this.readers[this.mode];\n\t\t} else {\n\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t}\n\t}\n\n\tif (this.table.options.persistenceWriterFunc) {\n\t\tif (typeof this.table.options.persistenceWriterFunc === \"function\") {\n\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t} else {\n\t\t\tif (this.readers[this.table.options.persistenceWriterFunc]) {\n\t\t\t\tthis.writeFunc = this.readers[this.table.options.persistenceWriterFunc];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (this.writers[this.mode]) {\n\t\t\tthis.writeFunc = this.writers[this.mode];\n\t\t} else {\n\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t}\n\t}\n\n\t//set storage tag\n\tthis.id = \"tabulator-\" + (id || this.table.element.getAttribute(\"id\") || \"\");\n\n\tthis.config = {\n\t\tsort: this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\tfilter: this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\tgroup: this.table.options.persistence === true || this.table.options.persistence.group,\n\t\tpage: this.table.options.persistence === true || this.table.options.persistence.page,\n\t\tcolumns: this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns\n\t};\n\n\t//load pagination data if needed\n\tif (this.config.page) {\n\t\tretreivedData = this.retreiveData(\"page\");\n\n\t\tif (retreivedData) {\n\t\t\tif (typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)) {\n\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\n\t\t\t}\n\n\t\t\tif (typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)) {\n\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\n\t\t\t}\n\t\t}\n\t}\n\n\t//load group data if needed\n\tif (this.config.group) {\n\t\tretreivedData = this.retreiveData(\"group\");\n\n\t\tif (retreivedData) {\n\t\t\tif (typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)) {\n\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\n\t\t\t}\n\t\t\tif (typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)) {\n\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\n\t\t\t}\n\t\t\tif (typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)) {\n\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.config.columns) {\n\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\n\t}\n};\n\nPersistence.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t def,\n\t keys;\n\n\tif (this.config.columns) {\n\t\tthis.defWatcherBlock = true;\n\n\t\tdef = column.getDefinition();\n\n\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\tkeys.forEach(function (key) {\n\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\tvar value = def[key];\n\t\t\tif (props) {\n\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\tset: function set(newValue) {\n\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\tif (!self.defWatcherBlock) {\n\t\t\t\t\t\t\tself.save(\"columns\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (props.set) {\n\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tget: function get() {\n\t\t\t\t\t\tif (props.get) {\n\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.defWatcherBlock = false;\n\t}\n};\n\n//load saved definitions\nPersistence.prototype.load = function (type, current) {\n\tvar data = this.retreiveData(type);\n\n\tif (current) {\n\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t}\n\n\treturn data;\n};\n\n//retreive data from memory\nPersistence.prototype.retreiveData = function (type) {\n\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n};\n\n//merge old and new column definitions\nPersistence.prototype.mergeDefinition = function (oldCols, newCols) {\n\tvar self = this,\n\t output = [];\n\n\t// oldCols = oldCols || [];\n\tnewCols = newCols || [];\n\n\tnewCols.forEach(function (column, to) {\n\n\t\tvar from = self._findColumn(oldCols, column),\n\t\t keys;\n\n\t\tif (from) {\n\n\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\tkeys = Object.keys(from);\n\t\t\t\tkeys.push(\"width\");\n\t\t\t} else {\n\t\t\t\tkeys = self.config.columns;\n\t\t\t}\n\n\t\t\tkeys.forEach(function (key) {\n\t\t\t\tif (key !== \"columns\" && typeof column[key] !== \"undefined\") {\n\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (from.columns) {\n\t\t\t\tfrom.columns = self.mergeDefinition(from.columns, column.columns);\n\t\t\t}\n\n\t\t\toutput.push(from);\n\t\t}\n\t});\n\n\toldCols.forEach(function (column, i) {\n\t\tvar from = self._findColumn(newCols, column);\n\t\tif (!from) {\n\t\t\tif (output.length > i) {\n\t\t\t\toutput.splice(i, 0, column);\n\t\t\t} else {\n\t\t\t\toutput.push(column);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\n//find matching columns\nPersistence.prototype._findColumn = function (columns, subject) {\n\tvar type = subject.columns ? \"group\" : subject.field ? \"field\" : \"object\";\n\n\treturn columns.find(function (col) {\n\t\tswitch (type) {\n\t\t\tcase \"group\":\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\t\t\t\tbreak;\n\n\t\t\tcase \"field\":\n\t\t\t\treturn col.field === subject.field;\n\t\t\t\tbreak;\n\n\t\t\tcase \"object\":\n\t\t\t\treturn col === subject;\n\t\t\t\tbreak;\n\t\t}\n\t});\n};\n\n//save data\nPersistence.prototype.save = function (type) {\n\tvar data = {};\n\n\tswitch (type) {\n\t\tcase \"columns\":\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\tbreak;\n\n\t\tcase \"filter\":\n\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\tbreak;\n\n\t\tcase \"sort\":\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\tbreak;\n\n\t\tcase \"group\":\n\t\t\tdata = this.getGroupConfig();\n\t\t\tbreak;\n\n\t\tcase \"page\":\n\t\t\tdata = this.getPageConfig();\n\t\t\tbreak;\n\t}\n\n\tif (this.writeFunc) {\n\t\tthis.writeFunc(this.id, type, data);\n\t}\n};\n\n//ensure sorters contain no function data\nPersistence.prototype.validateSorters = function (data) {\n\tdata.forEach(function (item) {\n\t\titem.column = item.field;\n\t\tdelete item.field;\n\t});\n\n\treturn data;\n};\n\nPersistence.prototype.getGroupConfig = function () {\n\tvar data = {};\n\n\tif (this.config.group) {\n\t\tif (this.config.group === true || this.config.group.groupBy) {\n\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t}\n\n\t\tif (this.config.group === true || this.config.group.groupStartOpen) {\n\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t}\n\n\t\tif (this.config.group === true || this.config.group.groupHeader) {\n\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t}\n\t}\n\n\treturn data;\n};\n\nPersistence.prototype.getPageConfig = function () {\n\tvar data = {};\n\n\tif (this.config.page) {\n\t\tif (this.config.page === true || this.config.page.size) {\n\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t}\n\n\t\tif (this.config.page === true || this.config.page.page) {\n\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t}\n\t}\n\n\treturn data;\n};\n\n//parse columns for data to store\nPersistence.prototype.parseColumns = function (columns) {\n\tvar self = this,\n\t definitions = [],\n\t excludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\n\n\tcolumns.forEach(function (column) {\n\t\tvar defStore = {},\n\t\t colDef = column.getDefinition(),\n\t\t keys;\n\n\t\tif (column.isGroup) {\n\t\t\tdefStore.title = colDef.title;\n\t\t\tdefStore.columns = self.parseColumns(column.getColumns());\n\t\t} else {\n\t\t\tdefStore.field = column.getField();\n\n\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\tkeys.push(\"width\");\n\t\t\t} else {\n\t\t\t\tkeys = self.config.columns;\n\t\t\t}\n\n\t\t\tkeys.forEach(function (key) {\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1) {\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tdefinitions.push(defStore);\n\t});\n\n\treturn definitions;\n};\n\n// read peristence information from storage\nPersistence.prototype.readers = {\n\tlocal: function local(id, type) {\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\treturn data ? JSON.parse(data) : false;\n\t},\n\tcookie: function cookie(id, type) {\n\t\tvar cookie = document.cookie,\n\t\t key = id + \"-\" + type,\n\t\t cookiePos = cookie.indexOf(key + \"=\"),\n\t\t end,\n\t\t data;\n\n\t\t//if cookie exists, decode and load column data into tabulator\n\t\tif (cookiePos > -1) {\n\t\t\tcookie = cookie.substr(cookiePos);\n\n\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\tif (end > -1) {\n\t\t\t\tcookie = cookie.substr(0, end);\n\t\t\t}\n\n\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t}\n\n\t\treturn data ? JSON.parse(data) : false;\n\t}\n};\n\n//write persistence information to storage\nPersistence.prototype.writers = {\n\tlocal: function local(id, type, data) {\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t},\n\tcookie: function cookie(id, type, data) {\n\t\tvar expireDate = new Date();\n\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t}\n};\n\nTabulator.prototype.registerModule(\"persistence\", Persistence);\n\nvar Print = function Print(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.element = false;\n\tthis.manualBlock = false;\n};\n\nPrint.prototype.initialize = function () {\n\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\n\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\n};\n\nPrint.prototype.replaceTable = function () {\n\tif (!this.manualBlock) {\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\tthis.table.element.style.display = \"none\";\n\n\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t}\n};\n\nPrint.prototype.cleanup = function () {\n\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\tif (this.element && this.element.parentNode) {\n\t\tthis.element.parentNode.removeChild(this.element);\n\t\tthis.table.element.style.display = \"\";\n\t}\n};\n\nPrint.prototype.printFullscreen = function (visible, style, config) {\n\tvar scrollX = window.scrollX,\n\t scrollY = window.scrollY,\n\t headerEl = document.createElement(\"div\"),\n\t footerEl = document.createElement(\"div\"),\n\t tableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible, \"print\"),\n\t headerContent,\n\t footerContent;\n\n\tthis.manualBlock = true;\n\n\tthis.element = document.createElement(\"div\");\n\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\tif (this.table.options.printHeader) {\n\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\tif (typeof headerContent == \"string\") {\n\t\t\theaderEl.innerHTML = headerContent;\n\t\t} else {\n\t\t\theaderEl.appendChild(headerContent);\n\t\t}\n\n\t\tthis.element.appendChild(headerEl);\n\t}\n\n\tthis.element.appendChild(tableEl);\n\n\tif (this.table.options.printFooter) {\n\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\t\tif (typeof footerContent == \"string\") {\n\t\t\tfooterEl.innerHTML = footerContent;\n\t\t} else {\n\t\t\tfooterEl.appendChild(footerContent);\n\t\t}\n\n\t\tthis.element.appendChild(footerEl);\n\t}\n\n\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\tdocument.body.appendChild(this.element);\n\n\tif (this.table.options.printFormatter) {\n\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t}\n\n\twindow.print();\n\n\tthis.cleanup();\n\n\twindow.scrollTo(scrollX, scrollY);\n\n\tthis.manualBlock = false;\n};\n\nTabulator.prototype.registerModule(\"print\", Print);\nvar ReactiveData = function ReactiveData(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.data = false;\n\tthis.blocked = false; //block reactivity while performing update\n\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\tthis.currentVersion = 0;\n};\n\nReactiveData.prototype.watchData = function (data) {\n\tvar self = this,\n\t pushFunc,\n\t version;\n\n\tthis.currentVersion++;\n\n\tversion = this.currentVersion;\n\n\tself.unwatchData();\n\n\tself.data = data;\n\n\t//override array push function\n\tself.origFuncs.push = data.push;\n\n\tObject.defineProperty(self.data, \"push\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments);\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn self.origFuncs.push.apply(data, arguments);\n\t\t}\n\t});\n\n\t//override array unshift function\n\tself.origFuncs.unshift = data.unshift;\n\n\tObject.defineProperty(self.data, \"unshift\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments);\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\n\t\t}\n\t});\n\n\t//override array shift function\n\tself.origFuncs.shift = data.shift;\n\n\tObject.defineProperty(self.data, \"shift\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar row;\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tif (self.data.length) {\n\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\n\t\t\t\t\tif (row) {\n\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self.origFuncs.shift.call(data);\n\t\t}\n\t});\n\n\t//override array pop function\n\tself.origFuncs.pop = data.pop;\n\n\tObject.defineProperty(self.data, \"pop\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar row;\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tif (self.data.length) {\n\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\n\t\t\t\t\tif (row) {\n\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn self.origFuncs.pop.call(data);\n\t\t}\n\t});\n\n\t//override array splice function\n\tself.origFuncs.splice = data.splice;\n\n\tObject.defineProperty(self.data, \"splice\", {\n\t\tenumerable: false,\n\t\tconfigurable: true,\n\t\tvalue: function value() {\n\t\t\tvar args = Array.from(arguments),\n\t\t\t start = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t end = args[1],\n\t\t\t newRows = args[2] ? args.slice(2) : false,\n\t\t\t startRow;\n\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\n\t\t\t\t//add new rows\n\t\t\t\tif (newRows) {\n\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\n\t\t\t\t\tif (startRow) {\n\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\n\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//delete removed rows\n\t\t\t\tif (end !== 0) {\n\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\n\t\t\t\t\toldRows.forEach(function (rowData, i) {\n\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\n\t\t\t\t\t\tif (row) {\n\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (newRows || end !== 0) {\n\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn self.origFuncs.splice.apply(data, arguments);\n\t\t}\n\t});\n};\n\nReactiveData.prototype.unwatchData = function () {\n\tif (this.data !== false) {\n\t\tfor (var key in this.origFuncs) {\n\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true,\n\t\t\t\tvalue: this.origFuncs.key\n\t\t\t});\n\t\t}\n\t}\n};\n\nReactiveData.prototype.watchRow = function (row) {\n\tvar data = row.getData();\n\n\tthis.blocked = true;\n\n\tfor (var key in data) {\n\t\tthis.watchKey(row, data, key);\n\t}\n\n\tif (this.table.options.dataTree) {\n\t\tthis.watchTreeChildren(row);\n\t}\n\n\tthis.blocked = false;\n};\n\nReactiveData.prototype.watchTreeChildren = function (row) {\n\tvar self = this,\n\t childField = row.getData()[this.table.options.dataTreeChildField],\n\t origFuncs = {};\n\n\tfunction rebuildTree() {\n\t\tself.table.modules.dataTree.initializeRow(row);\n\t\tself.table.modules.dataTree.layoutRow(row);\n\t\tself.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t}\n\n\tif (childField) {\n\n\t\torigFuncs.push = childField.push;\n\n\t\tObject.defineProperty(childField, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.unshift = childField.unshift;\n\n\t\tObject.defineProperty(childField, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.shift = childField.shift;\n\n\t\tObject.defineProperty(childField, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.shift.call(childField);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.pop = childField.pop;\n\n\t\tObject.defineProperty(childField, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.pop.call(childField);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\n\t\torigFuncs.splice = childField.splice;\n\n\t\tObject.defineProperty(childField, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\n\n\t\t\t\trebuildTree();\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t});\n\t}\n};\n\nReactiveData.prototype.watchKey = function (row, data, key) {\n\tvar self = this,\n\t props = Object.getOwnPropertyDescriptor(data, key),\n\t value = data[key],\n\t version = this.currentVersion;\n\n\tObject.defineProperty(data, key, {\n\t\tset: function set(newValue) {\n\t\t\tvalue = newValue;\n\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\tvar update = {};\n\t\t\t\tupdate[key] = newValue;\n\t\t\t\trow.updateData(update);\n\t\t\t}\n\n\t\t\tif (props.set) {\n\t\t\t\tprops.set(newValue);\n\t\t\t}\n\t\t},\n\t\tget: function get() {\n\n\t\t\tif (props.get) {\n\t\t\t\tprops.get();\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}\n\t});\n};\n\nReactiveData.prototype.unwatchRow = function (row) {\n\tvar data = row.getData();\n\n\tfor (var key in data) {\n\t\tObject.defineProperty(data, key, {\n\t\t\tvalue: data[key]\n\t\t});\n\t}\n};\n\nReactiveData.prototype.block = function () {\n\tthis.blocked = true;\n};\n\nReactiveData.prototype.unblock = function () {\n\tthis.blocked = false;\n};\n\nTabulator.prototype.registerModule(\"reactiveData\", ReactiveData);\n\nvar ResizeColumns = function ResizeColumns(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.startColumn = false;\n\tthis.startX = false;\n\tthis.startWidth = false;\n\tthis.handle = null;\n\tthis.prevHandle = null;\n};\n\nResizeColumns.prototype.initializeColumn = function (type, column, element) {\n\tvar self = this,\n\t variableHeight = false,\n\t mode = this.table.options.resizableColumns;\n\n\t//set column resize mode\n\tif (type === \"header\") {\n\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\tcolumn.modules.resize = { variableHeight: variableHeight };\n\t}\n\n\tif (mode === true || mode == type) {\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-col-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function handleDown(e) {\n\t\t\tvar nearestColumn = column.getLastColumn();\n\n\t\t\tif (nearestColumn && self._checkResizability(nearestColumn)) {\n\t\t\t\tself.startColumn = column;\n\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t}\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\t\t//reszie column on double click\n\t\thandle.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar col = column.getLastColumn();\n\n\t\t\tif (col && self._checkResizability(col)) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tcol.reinitializeWidth(true);\n\t\t\t}\n\t\t});\n\n\t\tprevHandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function prevHandleDown(e) {\n\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\tif (nearestColumn) {\n\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\tself.startColumn = column;\n\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\t\t//resize column on double click\n\t\tprevHandle.addEventListener(\"dblclick\", function (e) {\n\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\tif (nearestColumn) {\n\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tprevColumn.reinitializeWidth(true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.appendChild(handle);\n\t\telement.appendChild(prevHandle);\n\t}\n};\n\nResizeColumns.prototype._checkResizability = function (column) {\n\treturn typeof column.definition.resizable != \"undefined\" ? column.definition.resizable : this.table.options.resizableColumns;\n};\n\nResizeColumns.prototype._mouseDown = function (e, column, handle) {\n\tvar self = this;\n\n\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\tfunction mouseMove(e) {\n\t\t// self.table.columnManager.tempScrollBlock();\n\n\t\tif (self.table.rtl) {\n\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\n\t\t} else {\n\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\n\t\t}\n\n\t\tif (self.table.options.virtualDomHoz) {\n\t\t\tself.table.vdomHoz.reinitialize(true);\n\t\t}\n\n\t\tif (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\tcolumn.checkCellHeights();\n\t\t}\n\t}\n\n\tfunction mouseUp(e) {\n\n\t\t//block editor from taking action while resizing is taking place\n\t\tif (self.startColumn.modules.edit) {\n\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t}\n\n\t\tif (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\tcolumn.checkCellHeights();\n\t\t}\n\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.columns) {\n\t\t\tself.table.modules.persistence.save(\"columns\");\n\t\t}\n\n\t\tself.table.options.columnResized.call(self.table, column.getComponent());\n\t}\n\n\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t//block editor from taking action while resizing is taking place\n\tif (self.startColumn.modules.edit) {\n\t\tself.startColumn.modules.edit.blocked = true;\n\t}\n\n\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\tself.startWidth = column.getWidth();\n\n\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\thandle.addEventListener(\"touchend\", mouseUp);\n};\n\nTabulator.prototype.registerModule(\"resizeColumns\", ResizeColumns);\nvar ResizeRows = function ResizeRows(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.startColumn = false;\n\tthis.startY = false;\n\tthis.startHeight = false;\n\tthis.handle = null;\n\tthis.prevHandle = null;\n};\n\nResizeRows.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t rowEl = row.getElement();\n\n\tvar handle = document.createElement('div');\n\thandle.className = \"tabulator-row-resize-handle\";\n\n\tvar prevHandle = document.createElement('div');\n\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\thandle.addEventListener(\"click\", function (e) {\n\t\te.stopPropagation();\n\t});\n\n\tvar handleDown = function handleDown(e) {\n\t\tself.startRow = row;\n\t\tself._mouseDown(e, row, handle);\n\t};\n\n\thandle.addEventListener(\"mousedown\", handleDown);\n\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\tprevHandle.addEventListener(\"click\", function (e) {\n\t\te.stopPropagation();\n\t});\n\n\tvar prevHandleDown = function prevHandleDown(e) {\n\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\tif (prevRow) {\n\t\t\tself.startRow = prevRow;\n\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t}\n\t};\n\n\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\trowEl.appendChild(handle);\n\trowEl.appendChild(prevHandle);\n};\n\nResizeRows.prototype._mouseDown = function (e, row, handle) {\n\tvar self = this;\n\n\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\tfunction mouseMove(e) {\n\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t}\n\n\tfunction mouseUp(e) {\n\n\t\t// //block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t// }\n\n\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\tself.table.options.rowResized.call(this.table, row.getComponent());\n\t}\n\n\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t//block editor from taking action while resizing is taking place\n\t// if(self.startColumn.modules.edit){\n\t// \tself.startColumn.modules.edit.blocked = true;\n\t// }\n\n\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\tself.startHeight = row.getHeight();\n\n\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\thandle.addEventListener(\"touchend\", mouseUp);\n};\n\nTabulator.prototype.registerModule(\"resizeRows\", ResizeRows);\nvar ResizeTable = function ResizeTable(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.binding = false;\n\tthis.observer = false;\n\tthis.containerObserver = false;\n\n\tthis.tableHeight = 0;\n\tthis.tableWidth = 0;\n\tthis.containerHeight = 0;\n\tthis.containerWidth = 0;\n\n\tthis.autoResize = false;\n};\n\nResizeTable.prototype.initialize = function (row) {\n\tvar _this83 = this;\n\n\tvar table = this.table,\n\t tableStyle;\n\n\tthis.tableHeight = table.element.clientHeight;\n\tthis.tableWidth = table.element.clientWidth;\n\n\tif (table.element.parentNode) {\n\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t}\n\n\tif (typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\") {\n\n\t\tthis.autoResize = true;\n\n\t\tthis.observer = new ResizeObserver(function (entry) {\n\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\tif (_this83.tableHeight != nodeHeight || _this83.tableWidth != nodeWidth) {\n\t\t\t\t\t_this83.tableHeight = nodeHeight;\n\t\t\t\t\t_this83.tableWidth = nodeWidth;\n\n\t\t\t\t\tif (table.element.parentNode) {\n\t\t\t\t\t\t_this83.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t_this83.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t\t}\n\n\t\t\t\t\ttable.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.observer.observe(table.element);\n\n\t\ttableStyle = window.getComputedStyle(table.element);\n\n\t\tif (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))) {\n\n\t\t\tthis.containerObserver = new ResizeObserver(function (entry) {\n\t\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\t\tif (_this83.containerHeight != nodeHeight || _this83.containerWidth != nodeWidth) {\n\t\t\t\t\t\t_this83.containerHeight = nodeHeight;\n\t\t\t\t\t\t_this83.containerWidth = nodeWidth;\n\t\t\t\t\t\t_this83.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t_this83.tableWidth = table.element.clientWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t\t}\n\n\t\t\t\t\ttable.redraw();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t}\n\t} else {\n\t\tthis.binding = function () {\n\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\t\t\t\tif (table.options.virtualDomHoz) {\n\t\t\t\t\ttable.vdomHoz.reinitialize(true);\n\t\t\t\t}\n\n\t\t\t\ttable.redraw();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"resize\", this.binding);\n\t}\n};\n\nResizeTable.prototype.clearBindings = function (row) {\n\tif (this.binding) {\n\t\twindow.removeEventListener(\"resize\", this.binding);\n\t}\n\n\tif (this.observer) {\n\t\tthis.observer.unobserve(this.table.element);\n\t}\n\n\tif (this.containerObserver) {\n\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t}\n};\n\nTabulator.prototype.registerModule(\"resizeTable\", ResizeTable);\nvar ResponsiveLayout = function ResponsiveLayout(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.columns = [];\n\tthis.hiddenColumns = [];\n\tthis.mode = \"\";\n\tthis.index = 0;\n\tthis.collapseFormatter = [];\n\tthis.collapseStartOpen = true;\n\tthis.collapseHandleColumn = false;\n};\n\n//generate resposive columns list\nResponsiveLayout.prototype.initialize = function () {\n\tvar self = this,\n\t columns = [];\n\n\tthis.mode = this.table.options.responsiveLayout;\n\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\tthis.hiddenColumns = [];\n\n\t//detemine level of responsivity for each column\n\tthis.table.columnManager.columnsByIndex.forEach(function (column, i) {\n\t\tif (column.modules.responsive) {\n\t\t\tif (column.modules.responsive.order && column.modules.responsive.visible) {\n\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\tcolumns.push(column);\n\n\t\t\t\tif (!column.visible && self.mode === \"collapse\") {\n\t\t\t\t\tself.hiddenColumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t//sort list by responsivity\n\tcolumns = columns.reverse();\n\tcolumns = columns.sort(function (a, b) {\n\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\treturn diff || b.modules.responsive.index - a.modules.responsive.index;\n\t});\n\n\tthis.columns = columns;\n\n\tif (this.mode === \"collapse\") {\n\t\tthis.generateCollapsedContent();\n\t}\n\n\t//assign collapse column\n\tfor (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i17 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\tvar _ref;\n\n\t\tif (_isArray) {\n\t\t\tif (_i17 >= _iterator.length) break;\n\t\t\t_ref = _iterator[_i17++];\n\t\t} else {\n\t\t\t_i17 = _iterator.next();\n\t\t\tif (_i17.done) break;\n\t\t\t_ref = _i17.value;\n\t\t}\n\n\t\tvar col = _ref;\n\n\t\tif (col.definition.formatter == \"responsiveCollapse\") {\n\t\t\tthis.collapseHandleColumn = col;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (this.collapseHandleColumn) {\n\t\tif (this.hiddenColumns.length) {\n\t\t\tthis.collapseHandleColumn.show();\n\t\t} else {\n\t\t\tthis.collapseHandleColumn.hide();\n\t\t}\n\t}\n};\n\n//define layout information\nResponsiveLayout.prototype.initializeColumn = function (column) {\n\tvar def = column.getDefinition();\n\n\tcolumn.modules.responsive = { order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible: def.visible === false ? false : true };\n};\n\nResponsiveLayout.prototype.initializeRow = function (row) {\n\tvar el;\n\n\tif (row.type !== \"calc\") {\n\t\tel = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\trow.modules.responsiveLayout = {\n\t\t\telement: el,\n\t\t\topen: this.collapseStartOpen\n\t\t};\n\n\t\tif (!this.collapseStartOpen) {\n\t\t\tel.style.display = 'none';\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.layoutRow = function (row) {\n\tvar rowEl = row.getElement();\n\n\tif (row.modules.responsiveLayout) {\n\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\tthis.generateCollapsedRowContent(row);\n\t}\n};\n\n//update column visibility\nResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {\n\tvar index;\n\tif (column.modules.responsive) {\n\t\tcolumn.modules.responsive.visible = visible;\n\t\tthis.initialize();\n\t}\n};\n\nResponsiveLayout.prototype.hideColumn = function (column) {\n\tvar colCount = this.hiddenColumns.length;\n\n\tcolumn.hide(false, true);\n\n\tif (this.mode === \"collapse\") {\n\t\tthis.hiddenColumns.unshift(column);\n\t\tthis.generateCollapsedContent();\n\n\t\tif (this.collapseHandleColumn && !colCount) {\n\t\t\tthis.collapseHandleColumn.show();\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.showColumn = function (column) {\n\tvar index;\n\n\tcolumn.show(false, true);\n\t//set column width to prevent calculation loops on uninitialized columns\n\tcolumn.setWidth(column.getWidth());\n\n\tif (this.mode === \"collapse\") {\n\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\tif (index > -1) {\n\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t}\n\n\t\tthis.generateCollapsedContent();\n\n\t\tif (this.collapseHandleColumn && !this.hiddenColumns.length) {\n\t\t\tthis.collapseHandleColumn.hide();\n\t\t}\n\t}\n};\n\n//redraw columns to fit space\nResponsiveLayout.prototype.update = function () {\n\tvar self = this,\n\t working = true;\n\n\twhile (working) {\n\n\t\tvar width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\n\n\t\tvar diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\n\n\t\tif (diff < 0) {\n\t\t\t//table is too wide\n\t\t\tvar column = self.columns[self.index];\n\n\t\t\tif (column) {\n\t\t\t\tself.hideColumn(column);\n\t\t\t\tself.index++;\n\t\t\t} else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t} else {\n\n\t\t\t//table has spare space\n\t\t\tvar _column = self.columns[self.index - 1];\n\n\t\t\tif (_column) {\n\t\t\t\tif (diff > 0) {\n\t\t\t\t\tif (diff >= _column.getWidth()) {\n\t\t\t\t\t\tself.showColumn(_column);\n\t\t\t\t\t\tself.index--;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tworking = false;\n\t\t\t}\n\t\t}\n\n\t\tif (!self.table.rowManager.activeRowsCount) {\n\t\t\tself.table.rowManager.renderEmptyScroll();\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.generateCollapsedContent = function () {\n\tvar self = this,\n\t rows = this.table.rowManager.getDisplayRows();\n\n\trows.forEach(function (row) {\n\t\tself.generateCollapsedRowContent(row);\n\t});\n};\n\nResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {\n\tvar el, contents;\n\n\tif (row.modules.responsiveLayout) {\n\t\tel = row.modules.responsiveLayout.element;\n\n\t\twhile (el.firstChild) {\n\t\t\tel.removeChild(el.firstChild);\n\t\t}contents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\tif (contents) {\n\t\t\tel.appendChild(contents);\n\t\t}\n\t}\n};\n\nResponsiveLayout.prototype.generateCollapsedRowData = function (row) {\n\tvar self = this,\n\t data = row.getData(),\n\t output = [],\n\t mockCellComponent;\n\n\tthis.hiddenColumns.forEach(function (column) {\n\t\tvar value = column.getFieldValue(data);\n\n\t\tif (column.definition.title && column.field) {\n\t\t\tif (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {\n\n\t\t\t\tmockCellComponent = {\n\t\t\t\t\tvalue: false,\n\t\t\t\t\tdata: {},\n\t\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t},\n\t\t\t\t\tgetData: function getData() {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t},\n\t\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\toutput.push({\n\t\t\t\t\tfield: column.field,\n\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\toutput.push({\n\t\t\t\t\tfield: column.field,\n\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\tvalue: value\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n\n\treturn output;\n};\n\nResponsiveLayout.prototype.formatCollapsedData = function (data) {\n\tvar list = document.createElement(\"table\");\n\n\tdata.forEach(function (item) {\n\t\tvar row = document.createElement(\"tr\");\n\t\tvar titleData = document.createElement(\"td\");\n\t\tvar valueData = document.createElement(\"td\");\n\t\tvar node_content;\n\n\t\tvar titleHighlight = document.createElement(\"strong\");\n\t\ttitleData.appendChild(titleHighlight);\n\t\tthis.table.modules.localize.bind(\"columns|\" + item.field, function (text) {\n\t\t\ttitleHighlight.innerText = text || item.title;\n\t\t});\n\n\t\tif (item.value instanceof Node) {\n\t\t\tnode_content = document.createElement(\"div\");\n\t\t\tnode_content.appendChild(item.value);\n\t\t\tvalueData.appendChild(node_content);\n\t\t} else {\n\t\t\tvalueData.innerHTML = item.value;\n\t\t}\n\n\t\trow.appendChild(titleData);\n\t\trow.appendChild(valueData);\n\t\tlist.appendChild(row);\n\t}, this);\n\n\treturn Object.keys(data).length ? list : \"\";\n};\n\nTabulator.prototype.registerModule(\"responsiveLayout\", ResponsiveLayout);\n\nvar SelectRow = function SelectRow(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.selecting = false; //flag selecting in progress\n\tthis.lastClickedRow = false; //last clicked row\n\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\tthis.selectedRows = []; //hold selected rows\n\tthis.headerCheckboxElement = null; // hold header select element\n};\n\nSelectRow.prototype.clearSelectionData = function (silent) {\n\tthis.selecting = false;\n\tthis.lastClickedRow = false;\n\tthis.selectPrev = [];\n\tthis.selectedRows = [];\n\n\tif (!silent) {\n\t\tthis._rowSelectionChanged();\n\t}\n};\n\nSelectRow.prototype.initializeRow = function (row) {\n\tvar self = this,\n\t element = row.getElement();\n\n\t// trigger end of row selection\n\tvar endSelect = function endSelect() {\n\n\t\tsetTimeout(function () {\n\t\t\tself.selecting = false;\n\t\t}, 50);\n\n\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t};\n\n\trow.modules.select = { selected: false };\n\n\t//set row selection class\n\tif (self.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\telement.classList.add(\"tabulator-selectable\");\n\t\telement.classList.remove(\"tabulator-unselectable\");\n\n\t\tif (self.table.options.selectable && self.table.options.selectable != \"highlight\") {\n\t\t\tif (self.table.options.selectableRangeMode === \"click\") {\n\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\n\n\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\n\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\n\n\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\n\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\n\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\n\t\t\t\t\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\t\ttoggledRows.forEach(function (toggledRow) {\n\t\t\t\t\t\t\t\tif (toggledRow !== self.lastClickedRow) {\n\n\t\t\t\t\t\t\t\t\tif (self.table.options.selectable !== true && !self.isRowSelected(row)) {\n\t\t\t\t\t\t\t\t\t\tif (self.selectedRows.length < self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\n\n\t\t\t\t\t\t\tif (self.table.options.selectable !== true) {\n\t\t\t\t\t\t\t\tif (toggledRows.length > self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tself.selectRows(toggledRows);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t} else if (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.deselectRows(undefined, true);\n\t\t\t\t\t\tself.selectRows(row);\n\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\tif (!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!self.selecting) {\n\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tself.table._clearSelection();\n\n\t\t\t\t\t\tself.selecting = true;\n\n\t\t\t\t\t\tself.selectPrev = [];\n\n\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\n\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\tif (self.selectPrev[1] == row) {\n\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telement.addEventListener(\"mouseout\", function (e) {\n\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} else {\n\t\telement.classList.add(\"tabulator-unselectable\");\n\t\telement.classList.remove(\"tabulator-selectable\");\n\t}\n};\n\n//toggle row selection\nSelectRow.prototype.toggleRow = function (row) {\n\tif (this.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\tif (row.modules.select && row.modules.select.selected) {\n\t\t\tthis._deselectRow(row);\n\t\t} else {\n\t\t\tthis._selectRow(row);\n\t\t}\n\t}\n};\n\n//select a number of rows\nSelectRow.prototype.selectRows = function (rows) {\n\tvar _this84 = this;\n\n\tvar rowMatch;\n\n\tswitch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {\n\t\tcase \"undefined\":\n\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t});\n\n\t\t\tthis._rowSelectionChanged();\n\t\t\tbreak;\n\n\t\tcase \"string\":\n\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\n\t\t\tif (rowMatch) {\n\t\t\t\tthis._selectRow(rowMatch, true, true);\n\t\t\t} else {\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach(function (row) {\n\t\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._rowSelectionChanged();\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tif (Array.isArray(rows)) {\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\t_this84._selectRow(row, true, true);\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged();\n\t\t\t} else {\n\t\t\t\tthis._selectRow(rows, false, true);\n\t\t\t}\n\t\t\tbreak;\n\t}\n};\n\n//select an individual row\nSelectRow.prototype._selectRow = function (rowInfo, silent, force) {\n\tvar index;\n\n\t//handle max row count\n\tif (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {\n\t\tif (this.selectedRows.length >= this.table.options.selectable) {\n\t\t\tif (this.table.options.selectableRollingSelection) {\n\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar row = this.table.rowManager.findRow(rowInfo);\n\n\tif (row) {\n\t\tif (this.selectedRows.indexOf(row) == -1) {\n\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\t\t\tif (!row.modules.select) {\n\t\t\t\trow.modules.select = {};\n\t\t\t}\n\n\t\t\trow.modules.select.selected = true;\n\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t}\n\n\t\t\tthis.selectedRows.push(row);\n\n\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tthis.table.options.rowSelected.call(this.table, row.getComponent());\n\t\t\t}\n\n\t\t\tthis._rowSelectionChanged(silent);\n\t\t}\n\t} else {\n\t\tif (!silent) {\n\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t}\n\t}\n};\n\nSelectRow.prototype.isRowSelected = function (row) {\n\treturn this.selectedRows.indexOf(row) !== -1;\n};\n\n//deselect a number of rows\nSelectRow.prototype.deselectRows = function (rows, silent) {\n\tvar self = this,\n\t rowCount;\n\n\tif (typeof rows == \"undefined\") {\n\n\t\trowCount = self.selectedRows.length;\n\n\t\tfor (var _i18 = 0; _i18 < rowCount; _i18++) {\n\t\t\tself._deselectRow(self.selectedRows[0], true);\n\t\t}\n\n\t\tself._rowSelectionChanged(silent);\n\t} else {\n\t\tif (Array.isArray(rows)) {\n\t\t\trows.forEach(function (row) {\n\t\t\t\tself._deselectRow(row, true);\n\t\t\t});\n\n\t\t\tself._rowSelectionChanged(silent);\n\t\t} else {\n\t\t\tself._deselectRow(rows, silent);\n\t\t}\n\t}\n};\n\n//deselect an individual row\nSelectRow.prototype._deselectRow = function (rowInfo, silent) {\n\tvar self = this,\n\t row = self.table.rowManager.findRow(rowInfo),\n\t index;\n\n\tif (row) {\n\t\tindex = self.selectedRows.findIndex(function (selectedRow) {\n\t\t\treturn selectedRow == row;\n\t\t});\n\n\t\tif (index > -1) {\n\n\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\n\t\t\tif (!row.modules.select) {\n\t\t\t\trow.modules.select = {};\n\t\t\t}\n\n\t\t\trow.modules.select.selected = false;\n\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t}\n\t\t\tself.selectedRows.splice(index, 1);\n\n\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tself.table.options.rowDeselected.call(this.table, row.getComponent());\n\t\t\t}\n\n\t\t\tself._rowSelectionChanged(silent);\n\t\t}\n\t} else {\n\t\tif (!silent) {\n\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t}\n\t}\n};\n\nSelectRow.prototype.getSelectedData = function () {\n\tvar data = [];\n\n\tthis.selectedRows.forEach(function (row) {\n\t\tdata.push(row.getData());\n\t});\n\n\treturn data;\n};\n\nSelectRow.prototype.getSelectedRows = function () {\n\n\tvar rows = [];\n\n\tthis.selectedRows.forEach(function (row) {\n\t\trows.push(row.getComponent());\n\t});\n\n\treturn rows;\n};\n\nSelectRow.prototype._rowSelectionChanged = function (silent) {\n\tif (this.headerCheckboxElement) {\n\t\tif (this.selectedRows.length === 0) {\n\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t} else if (this.table.rowManager.rows.length === this.selectedRows.length) {\n\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t} else {\n\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t}\n\t}\n\n\tif (!silent) {\n\t\tthis.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());\n\t}\n};\n\nSelectRow.prototype.registerRowSelectCheckbox = function (row, element) {\n\tif (!row._row.modules.select) {\n\t\trow._row.modules.select = {};\n\t}\n\n\trow._row.modules.select.checkboxEl = element;\n};\n\nSelectRow.prototype.registerHeaderSelectCheckbox = function (element) {\n\tthis.headerCheckboxElement = element;\n};\n\nSelectRow.prototype.childRowSelection = function (row, select) {\n\tvar children = this.table.modules.dataTree.getChildren(row, true);\n\n\tif (select) {\n\t\tfor (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i19 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\t\tvar _ref2;\n\n\t\t\tif (_isArray2) {\n\t\t\t\tif (_i19 >= _iterator2.length) break;\n\t\t\t\t_ref2 = _iterator2[_i19++];\n\t\t\t} else {\n\t\t\t\t_i19 = _iterator2.next();\n\t\t\t\tif (_i19.done) break;\n\t\t\t\t_ref2 = _i19.value;\n\t\t\t}\n\n\t\t\tvar child = _ref2;\n\n\t\t\tthis._selectRow(child, true);\n\t\t}\n\t} else {\n\t\tfor (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i20 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n\t\t\tvar _ref3;\n\n\t\t\tif (_isArray3) {\n\t\t\t\tif (_i20 >= _iterator3.length) break;\n\t\t\t\t_ref3 = _iterator3[_i20++];\n\t\t\t} else {\n\t\t\t\t_i20 = _iterator3.next();\n\t\t\t\tif (_i20.done) break;\n\t\t\t\t_ref3 = _i20.value;\n\t\t\t}\n\n\t\t\tvar _child = _ref3;\n\n\t\t\tthis._deselectRow(_child, true);\n\t\t}\n\t}\n};\n\nTabulator.prototype.registerModule(\"selectRow\", SelectRow);\n\nvar Sort = function Sort(table) {\n\tthis.table = table; //hold Tabulator object\n\tthis.sortList = []; //holder current sort\n\tthis.changed = false; //has the sort changed since last render\n};\n\n//initialize column header for sorting\nSort.prototype.initializeColumn = function (column, content) {\n\tvar self = this,\n\t sorter = false,\n\t colEl,\n\t arrowEl;\n\n\tswitch (_typeof(column.definition.sorter)) {\n\t\tcase \"string\":\n\t\t\tif (self.sorters[column.definition.sorter]) {\n\t\t\t\tsorter = self.sorters[column.definition.sorter];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\tsorter = column.definition.sorter;\n\t\t\tbreak;\n\t}\n\n\tcolumn.modules.sort = {\n\t\tsorter: sorter, dir: \"none\",\n\t\tparams: column.definition.sorterParams || {},\n\t\tstartingDir: column.definition.headerSortStartingDir || \"asc\",\n\t\ttristate: typeof column.definition.headerSortTristate !== \"undefined\" ? column.definition.headerSortTristate : this.table.options.headerSortTristate\n\t};\n\n\tif (typeof column.definition.headerSort === \"undefined\" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {\n\n\t\tcolEl = column.getElement();\n\n\t\tcolEl.classList.add(\"tabulator-sortable\");\n\n\t\tarrowEl = document.createElement(\"div\");\n\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\n\n\t\tif (_typeof(this.table.options.headerSortElement) == \"object\") {\n\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\n\t\t} else {\n\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\n\t\t}\n\n\t\t//create sorter arrow\n\t\tcontent.appendChild(arrowEl);\n\n\t\tcolumn.modules.sort.element = arrowEl;\n\n\t\t//sort on click\n\t\tcolEl.addEventListener(\"click\", function (e) {\n\t\t\tvar dir = \"\",\n\t\t\t sorters = [],\n\t\t\t match = false;\n\n\t\t\tif (column.modules.sort) {\n\t\t\t\tif (column.modules.sort.tristate) {\n\t\t\t\t\tif (column.modules.sort.dir == \"none\") {\n\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (column.modules.sort.dir == column.modules.sort.startingDir) {\n\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch (column.modules.sort.dir) {\n\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\tsorters = self.getSort();\n\n\t\t\t\t\tmatch = sorters.findIndex(function (sorter) {\n\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t});\n\n\t\t\t\t\tif (match > -1) {\n\t\t\t\t\t\tsorters[match].dir = dir;\n\n\t\t\t\t\t\tif (match != sorters.length - 1) {\n\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\tsorters.push({ column: column, dir: dir });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//add to existing sort\n\t\t\t\t\tself.setSort(sorters);\n\t\t\t\t} else {\n\t\t\t\t\tif (dir == \"none\") {\n\t\t\t\t\t\tself.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\tself.setSort(column, dir);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.table.rowManager.sorterRefresh(!self.sortList.length);\n\t\t\t}\n\t\t});\n\t}\n};\n\n//check if the sorters have changed since last use\nSort.prototype.hasChanged = function () {\n\tvar changed = this.changed;\n\tthis.changed = false;\n\treturn changed;\n};\n\n//return current sorters\nSort.prototype.getSort = function () {\n\tvar self = this,\n\t sorters = [];\n\n\tself.sortList.forEach(function (item) {\n\t\tif (item.column) {\n\t\t\tsorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });\n\t\t}\n\t});\n\n\treturn sorters;\n};\n\n//change sort list and trigger sort\nSort.prototype.setSort = function (sortList, dir) {\n\tvar self = this,\n\t newSortList = [];\n\n\tif (!Array.isArray(sortList)) {\n\t\tsortList = [{ column: sortList, dir: dir }];\n\t}\n\n\tsortList.forEach(function (item) {\n\t\tvar column;\n\n\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\n\t\tif (column) {\n\t\t\titem.column = column;\n\t\t\tnewSortList.push(item);\n\t\t\tself.changed = true;\n\t\t} else {\n\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t}\n\t});\n\n\tself.sortList = newSortList;\n\n\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.sort) {\n\t\tthis.table.modules.persistence.save(\"sort\");\n\t}\n};\n\n//clear sorters\nSort.prototype.clear = function () {\n\tthis.setSort([]);\n};\n\n//find appropriate sorter for column\nSort.prototype.findSorter = function (column) {\n\tvar row = this.table.rowManager.activeRows[0],\n\t sorter = \"string\",\n\t field,\n\t value;\n\n\tif (row) {\n\t\trow = row.getData();\n\t\tfield = column.getField();\n\n\t\tif (field) {\n\n\t\t\tvalue = column.getFieldValue(row);\n\n\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn this.sorters[sorter];\n};\n\n//work through sort list sorting data\nSort.prototype.sort = function (data) {\n\tvar self = this,\n\t sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t sortListActual = [],\n\t rowComponents = [],\n\t lastSort;\n\n\tif (self.table.options.dataSorting) {\n\t\tself.table.options.dataSorting.call(self.table, self.getSort());\n\t}\n\n\tself.clearColumnHeaders();\n\n\tif (!self.table.options.ajaxSorting) {\n\n\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\tsortList.forEach(function (item, i) {\n\t\t\tvar sortObj = item.column.modules.sort;\n\n\t\t\tif (item.column && sortObj) {\n\n\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\tif (!sortObj.sorter) {\n\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t}\n\n\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\n\t\t\t\tsortListActual.push(item);\n\t\t\t}\n\n\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t});\n\n\t\t//sort data\n\t\tif (sortListActual.length) {\n\t\t\tself._sortItems(data, sortListActual);\n\t\t}\n\t} else {\n\t\tsortList.forEach(function (item, i) {\n\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t});\n\t}\n\n\tif (self.table.options.dataSorted) {\n\t\tdata.forEach(function (row) {\n\t\t\trowComponents.push(row.getComponent());\n\t\t});\n\n\t\tself.table.options.dataSorted.call(self.table, self.getSort(), rowComponents);\n\t}\n};\n\n//clear sort arrows on columns\nSort.prototype.clearColumnHeaders = function () {\n\tthis.table.columnManager.getRealColumns().forEach(function (column) {\n\t\tif (column.modules.sort) {\n\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t}\n\t});\n};\n\n//set the column header sort direction\nSort.prototype.setColumnHeader = function (column, dir) {\n\tcolumn.modules.sort.dir = dir;\n\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\n};\n\n//sort each item in sort list\nSort.prototype._sortItems = function (data, sortList) {\n\tvar _this85 = this;\n\n\tvar sorterCount = sortList.length - 1;\n\n\tdata.sort(function (a, b) {\n\t\tvar result;\n\n\t\tfor (var i = sorterCount; i >= 0; i--) {\n\t\t\tvar sortItem = sortList[i];\n\n\t\t\tresult = _this85._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\n\t\t\tif (result !== 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t});\n};\n\n//process individual rows for a sort function on active data\nSort.prototype._sortRow = function (a, b, column, dir, params) {\n\tvar el1Comp, el2Comp, colComp;\n\n\t//switch elements depending on search direction\n\tvar el1 = dir == \"asc\" ? a : b;\n\tvar el2 = dir == \"asc\" ? b : a;\n\n\ta = column.getFieldValue(el1.getData());\n\tb = column.getFieldValue(el2.getData());\n\n\ta = typeof a !== \"undefined\" ? a : \"\";\n\tb = typeof b !== \"undefined\" ? b : \"\";\n\n\tel1Comp = el1.getComponent();\n\tel2Comp = el2.getComponent();\n\n\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n};\n\n//default data sorters\nSort.prototype.sorters = {\n\n\t//sort numbers\n\tnumber: function number(a, b, aRow, bRow, column, dir, params) {\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar decimal = params.decimalSeparator;\n\t\tvar thousand = params.thousandSeparator;\n\t\tvar emptyAlign = 0;\n\n\t\ta = String(a);\n\t\tb = String(b);\n\n\t\tif (thousand) {\n\t\t\ta = a.split(thousand).join(\"\");\n\t\t\tb = b.split(thousand).join(\"\");\n\t\t}\n\n\t\tif (decimal) {\n\t\t\ta = a.split(decimal).join(\".\");\n\t\t\tb = b.split(decimal).join(\".\");\n\t\t}\n\n\t\ta = parseFloat(a);\n\t\tb = parseFloat(b);\n\n\t\t//handle non numeric values\n\t\tif (isNaN(a)) {\n\t\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t\t} else if (isNaN(b)) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\t\t\t//compare valid values\n\t\t\treturn a - b;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort strings\n\tstring: function string(a, b, aRow, bRow, column, dir, params) {\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\t\tvar locale;\n\n\t\t//handle empty values\n\t\tif (!a) {\n\t\t\temptyAlign = !b ? 0 : -1;\n\t\t} else if (!b) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\t\t\t//compare valid values\n\t\t\tswitch (_typeof(params.locale)) {\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif (params.locale) {\n\t\t\t\t\t\tlocale = this.table.modules.localize.getLocale();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlocale = params.locale;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort date\n\tdate: function date(a, b, aRow, bRow, column, dir, params) {\n\t\tif (!params.format) {\n\t\t\tparams.format = \"DD/MM/YYYY\";\n\t\t}\n\n\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t},\n\n\t//sort HH:mm formatted times\n\ttime: function time(a, b, aRow, bRow, column, dir, params) {\n\t\tif (!params.format) {\n\t\t\tparams.format = \"HH:mm\";\n\t\t}\n\n\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t},\n\n\t//sort datetime\n\tdatetime: function datetime(a, b, aRow, bRow, column, dir, params) {\n\t\tvar format = params.format || \"DD/MM/YYYY HH:mm:ss\",\n\t\t alignEmptyValues = params.alignEmptyValues,\n\t\t emptyAlign = 0;\n\n\t\tif (typeof moment != \"undefined\") {\n\t\t\ta = moment(a, format);\n\t\t\tb = moment(b, format);\n\n\t\t\tif (!a.isValid()) {\n\t\t\t\temptyAlign = !b.isValid() ? 0 : -1;\n\t\t\t} else if (!b.isValid()) {\n\t\t\t\temptyAlign = 1;\n\t\t\t} else {\n\t\t\t\t//compare valid values\n\t\t\t\treturn a - b;\n\t\t\t}\n\n\t\t\t//fix empty values in position\n\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\temptyAlign *= -1;\n\t\t\t}\n\n\t\t\treturn emptyAlign;\n\t\t} else {\n\t\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\n\t\t}\n\t},\n\n\t//sort booleans\n\tboolean: function boolean(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\t\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\t\treturn el1 - el2;\n\t},\n\n\t//sort if element contains any data\n\tarray: function array(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = 0;\n\t\tvar el2 = 0;\n\t\tvar type = params.type || \"length\";\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\n\t\tfunction calc(value) {\n\n\t\t\tswitch (type) {\n\t\t\t\tcase \"length\":\n\t\t\t\t\treturn value.length;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"sum\":\n\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"max\":\n\t\t\t\t\treturn Math.max.apply(null, value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"min\":\n\t\t\t\t\treturn Math.min.apply(null, value);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"avg\":\n\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t}) / value.length;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//handle non array values\n\t\tif (!Array.isArray(a)) {\n\t\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\n\t\t} else if (!Array.isArray(b)) {\n\t\t\talignEmptyValues = 1;\n\t\t} else {\n\n\t\t\t//compare valid values\n\t\t\tel1 = a ? calc(a) : 0;\n\t\t\tel2 = b ? calc(b) : 0;\n\n\t\t\treturn el1 - el2;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t},\n\n\t//sort if element contains any data\n\texists: function exists(a, b, aRow, bRow, column, dir, params) {\n\t\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\t\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\t\treturn el1 - el2;\n\t},\n\n\t//sort alpha numeric strings\n\talphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {\n\t\tvar a,\n\t\t b,\n\t\t a1,\n\t\t b1,\n\t\t i = 0,\n\t\t L,\n\t\t rx = /(\\d+)|(\\D+)/g,\n\t\t rd = /\\d/;\n\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\tvar emptyAlign = 0;\n\n\t\t//handle empty values\n\t\tif (!as && as !== 0) {\n\t\t\temptyAlign = !bs && bs !== 0 ? 0 : -1;\n\t\t} else if (!bs && bs !== 0) {\n\t\t\temptyAlign = 1;\n\t\t} else {\n\n\t\t\tif (isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\ta = String(as).toLowerCase();\n\t\t\tb = String(bs).toLowerCase();\n\t\t\tif (a === b) return 0;\n\t\t\tif (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\ta = a.match(rx);\n\t\t\tb = b.match(rx);\n\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\twhile (i < L) {\n\t\t\t\ta1 = a[i];\n\t\t\t\tb1 = b[i++];\n\t\t\t\tif (a1 !== b1) {\n\t\t\t\t\tif (isFinite(a1) && isFinite(b1)) {\n\t\t\t\t\t\tif (a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\tif (b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t} else return a1 > b1 ? 1 : -1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a.length > b.length;\n\t\t}\n\n\t\t//fix empty values in position\n\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\temptyAlign *= -1;\n\t\t}\n\n\t\treturn emptyAlign;\n\t}\n};\n\nTabulator.prototype.registerModule(\"sort\", Sort);\n\nvar Validate = function Validate(table) {\n\tthis.table = table;\n\tthis.invalidCells = [];\n};\n\n//validate\nValidate.prototype.initializeColumn = function (column) {\n\tvar self = this,\n\t config = [],\n\t validator;\n\n\tif (column.definition.validator) {\n\n\t\tif (Array.isArray(column.definition.validator)) {\n\t\t\tcolumn.definition.validator.forEach(function (item) {\n\t\t\t\tvalidator = self._extractValidator(item);\n\n\t\t\t\tif (validator) {\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\n\t\t\tif (validator) {\n\t\t\t\tconfig.push(validator);\n\t\t\t}\n\t\t}\n\n\t\tcolumn.modules.validate = config.length ? config : false;\n\t}\n};\n\nValidate.prototype._extractValidator = function (value) {\n\tvar type, params, pos;\n\n\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\tcase \"string\":\n\t\t\tpos = value.indexOf(':');\n\n\t\t\tif (pos > -1) {\n\t\t\t\ttype = value.substring(0, pos);\n\t\t\t\tparams = value.substring(pos + 1);\n\t\t\t} else {\n\t\t\t\ttype = value;\n\t\t\t}\n\n\t\t\treturn this._buildValidator(type, params);\n\t\t\tbreak;\n\n\t\tcase \"function\":\n\t\t\treturn this._buildValidator(value);\n\t\t\tbreak;\n\n\t\tcase \"object\":\n\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t\tbreak;\n\t}\n};\n\nValidate.prototype._buildValidator = function (type, params) {\n\n\tvar func = typeof type == \"function\" ? type : this.validators[type];\n\n\tif (!func) {\n\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\treturn false;\n\t} else {\n\t\treturn {\n\t\t\ttype: typeof type == \"function\" ? \"function\" : type,\n\t\t\tfunc: func,\n\t\t\tparams: params\n\t\t};\n\t}\n};\n\nValidate.prototype.validate = function (validators, cell, value) {\n\tvar self = this,\n\t valid = [],\n\t invalidIndex = this.invalidCells.indexOf(cell);\n\n\tif (validators) {\n\t\tvalidators.forEach(function (item) {\n\t\t\tif (!item.func.call(self, cell.getComponent(), value, item.params)) {\n\t\t\t\tvalid.push({\n\t\t\t\t\ttype: item.type,\n\t\t\t\t\tparameters: item.params\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tvalid = valid.length ? valid : true;\n\n\tif (!cell.modules.validate) {\n\t\tcell.modules.validate = {};\n\t}\n\n\tif (valid === true) {\n\t\tcell.modules.validate.invalid = false;\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\n\t\tif (invalidIndex > -1) {\n\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t}\n\t} else {\n\t\tcell.modules.validate.invalid = true;\n\n\t\tif (this.table.options.validationMode !== \"manual\") {\n\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\n\t\t}\n\n\t\tif (invalidIndex == -1) {\n\t\t\tthis.invalidCells.push(cell);\n\t\t}\n\t}\n\n\treturn valid;\n};\n\nValidate.prototype.getInvalidCells = function () {\n\tvar output = [];\n\n\tthis.invalidCells.forEach(function (cell) {\n\t\toutput.push(cell.getComponent());\n\t});\n\n\treturn output;\n};\n\nValidate.prototype.clearValidation = function (cell) {\n\tvar invalidIndex;\n\n\tif (cell.modules.validate && cell.modules.validate.invalid) {\n\n\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\n\t\tcell.modules.validate.invalid = false;\n\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\n\n\t\tif (invalidIndex > -1) {\n\t\t\tthis.invalidCells.splice(invalidIndex, 1);\n\t\t}\n\t}\n};\n\nValidate.prototype.validators = {\n\n\t//is integer\n\tinteger: function integer(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvalue = Number(value);\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n\t},\n\n\t//is float\n\tfloat: function float(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvalue = Number(value);\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\n\t},\n\n\t//must be a number\n\tnumeric: function numeric(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn !isNaN(value);\n\t},\n\n\t//must be a string\n\tstring: function string(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn isNaN(value);\n\t},\n\n\t//maximum value\n\tmax: function max(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) <= parameters;\n\t},\n\n\t//minimum value\n\tmin: function min(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn parseFloat(value) >= parameters;\n\t},\n\n\t//starts with value\n\tstarts: function starts(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\n\t},\n\n\t//ends with value\n\tends: function ends(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\n\t},\n\n\t//minimum string length\n\tminLength: function minLength(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length >= parameters;\n\t},\n\n\t//maximum string length\n\tmaxLength: function maxLength(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\treturn String(value).length <= parameters;\n\t},\n\n\t//in provided value list\n\tin: function _in(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (typeof parameters == \"string\") {\n\t\t\tparameters = parameters.split(\"|\");\n\t\t}\n\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\n\t},\n\n\t//must match provided regex\n\tregex: function regex(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvar reg = new RegExp(parameters);\n\n\t\treturn reg.test(value);\n\t},\n\n\t//value must be unique in this column\n\tunique: function unique(cell, value, parameters) {\n\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\treturn true;\n\t\t}\n\t\tvar unique = true;\n\n\t\tvar cellData = cell.getData();\n\t\tvar column = cell.getColumn()._getSelf();\n\n\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\tvar data = row.getData();\n\n\t\t\tif (data !== cellData) {\n\t\t\t\tif (value == column.getFieldValue(data)) {\n\t\t\t\t\tunique = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn unique;\n\t},\n\n\t//must have a value\n\trequired: function required(cell, value, parameters) {\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t}\n};\n\nTabulator.prototype.registerModule(\"validate\", Validate);\n\nexport default Tabulator;","/**\n * Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst {replace} = '';\n\n// escape\nconst es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\nconst ca = /[&<>'\"]/g;\n\nconst esca = {\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"'\n};\nconst pe = m => esca[m];\n\n/**\n * Safely escape HTML entities such as `&`, `<`, `>`, `\"`, and `'`.\n * @param {string} es the input to safely escape\n * @returns {string} the escaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const escape = es => replace.call(es, ca, pe);\n\n\n// unescape\nconst unes = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"'\n};\nconst cape = m => unes[m];\n\n/**\n * Safely unescape previously escaped entities such as `&`, `<`, `>`, `\"`,\n * and `'`.\n * @param {string} un a previously escaped string\n * @returns {string} the unescaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const unescape = un => replace.call(un, es, cape);\n","import { Column, ColumnSorter, ColumnAggregatorFunction } from './table.types';\nimport Tabulator from 'tabulator-tables';\nimport { escape } from 'html-escaper';\nimport { ElementPool } from './element-pool';\nimport { pickBy, negate } from 'lodash-es';\n\nexport class ColumnDefinitionFactory {\n constructor(private pool: ElementPool) {\n this.create = this.create.bind(this);\n }\n\n /**\n * Create Tabulator column definitions from a limel-table column configuration\n *\n * @param column - config describing the column\n * @returns Tabulator column\n */\n public create(column: Column<object>): Tabulator.ColumnDefinition {\n const definition: Tabulator.ColumnDefinition = {\n title: column.title,\n field: column.field,\n hozAlign: column.horizontalAlign,\n headerSort: column.headerSort,\n headerSortStartingDir: 'desc',\n };\n\n if (column.headerComponent) {\n definition.titleFormatter = formatHeader(column);\n }\n\n if (column.component?.name || column.formatter) {\n definition.formatter = createFormatter(column, this.pool);\n definition.formatterParams = column as object;\n }\n\n if (column.aggregator) {\n definition.bottomCalc = getColumnAggregator(column);\n }\n\n return definition;\n }\n}\n\n/**\n * Formats the header of the column\n *\n * @param column - the configuration for the column\n * @returns custom component that renders a column header\n */\nexport const formatHeader = (column: Column) => (): string | HTMLElement => {\n const headerElement = document.createElement('div');\n headerElement.setAttribute('class', 'lime-col-title__custom-component');\n\n const titleElement = document.createElement('span');\n titleElement.setAttribute('class', 'title-component-text');\n titleElement.innerText = column.title;\n\n const customElement = document.createElement(column.headerComponent.name);\n customElement.setAttribute('class', 'title-component-slot');\n\n let props: object = column.headerComponent.props || {};\n if (column.headerComponent.propsFactory) {\n props = {\n ...props,\n // we pass null to propsFactory function because no data in column header\n ...column.headerComponent.propsFactory(null),\n };\n }\n\n setElementProperties(customElement, props);\n\n headerElement.appendChild(titleElement);\n headerElement.appendChild(customElement);\n\n return headerElement;\n};\n\n/**\n * Create a formatter to be used to format values in a column\n *\n * @param column - config describing the column\n * @param pool - pool to get custom components from\n * @returns Tabulator formatter\n */\nexport function createFormatter(\n column: Column,\n pool: ElementPool,\n): Tabulator.Formatter {\n if (!column.component?.name) {\n return formatCell;\n }\n\n if (!columnElementExists(column)) {\n // eslint-disable-next-line no-console\n console.warn(\n `Failed to render custom component for column \"${column.field.toString()}\". Custom element <${\n column.component.name\n }/> does not exist. Using the default formatter.`,\n );\n\n return formatCell;\n }\n\n return (cell: Tabulator.CellComponent) => {\n const value = formatCell(cell, column);\n\n return createCustomComponent(cell, column, value, pool);\n };\n}\n\nfunction columnElementExists(column: Column<any>) {\n const name = column.component.name;\n if (typeof name === 'string') {\n const isNativeElement = !name.includes('-');\n const customElementExists = customElements.get(column.component.name);\n\n return isNativeElement || customElementExists;\n } else {\n return false;\n }\n}\n\n/**\n * Format the value of a cell in the table\n *\n * @param cell - the cell being rendered in the table\n * @param column - configuration for the current column\n * @returns the formatted value\n */\nexport function formatCell(\n cell: Tabulator.CellComponent,\n column: Column,\n): string {\n const data = cell.getData();\n let value = cell.getValue();\n\n if (column.formatter) {\n value = column.formatter(value, data);\n }\n\n if (typeof value === 'string' && !column.component) {\n value = escape(value);\n }\n\n return value;\n}\n\n/**\n * Create a custom component that renders a cell value\n *\n * @param cell - Tabulator cell\n * @param column - lime-elements column configuration\n * @param value - the value of the cell being rendered\n * @param pool - pool to get custom components from\n * @returns custom component that renders a value in the table\n */\nexport function createCustomComponent(\n cell: Tabulator.CellComponent,\n column: Column,\n value: string,\n pool: ElementPool,\n): HTMLElement {\n const field = cell.getField();\n const data = cell.getData();\n\n const element = pool.get(column.component.name);\n let props: object = column.component.props || {};\n if (column.component.propsFactory) {\n props = {\n ...props,\n ...column.component.propsFactory(data),\n };\n }\n\n props = {\n ...props,\n field: field,\n value: value,\n data: data,\n };\n\n element.style.display = 'inline-block';\n setElementProperties(element, props);\n\n createResizeObserver(element, cell.getColumn());\n\n return element;\n}\n\n/**\n * Set all properties for a custom element, including event listeners\n *\n * @param element - the custom element\n * @param props - object of properties and event listeners\n */\nexport function setElementProperties(element: HTMLElement, props: object) {\n const properties = pickBy(props, negate(isEventListener));\n Object.assign(element, properties);\n\n const listeners = pickBy(props, isEventListener);\n Object.entries(listeners).forEach(([key, value]) => {\n const event = getEventName(key);\n element.addEventListener(event, value as any);\n });\n}\n\n/**\n * Check if a property is an event listener.\n *\n * An event listener has to be a function and its property name have to start\n * with \"on\" followed by the name of the event in camel case, e.g. \"onEventName\"\n *\n * @param value - the value to check\n * @param key - name of the property\n * @returns true if the property of the object is an event listener\n */\nfunction isEventListener(value: any, key: string): boolean {\n if (typeof value !== 'function') {\n return false;\n }\n\n return /^on[A-Z]/.test(key);\n}\n\n/**\n * Get the name of an event from the name of an event listener\n *\n * E.g. \"onMyEvent\" will return \"myEvent\"\n *\n * @param eventListener - name of the event listener\n * @returns the name of the event\n */\nfunction getEventName(eventListener: string): string {\n // eslint-disable-next-line no-magic-numbers\n return eventListener.charAt(2).toLowerCase() + eventListener.slice(3);\n}\n\nfunction createResizeObserver(\n element: HTMLElement,\n column: Tabulator.ColumnComponent,\n) {\n if (!('ResizeObserver' in window)) {\n return;\n }\n\n const RESIZE_TIMEOUT = 1000;\n const COLUMN_PADDING = 16;\n\n const observer = new ResizeObserver(() => {\n const width = element.getBoundingClientRect().width;\n const newWidth = width + COLUMN_PADDING;\n\n if (newWidth < column.getWidth()) {\n return;\n }\n\n column.setWidth(newWidth);\n });\n observer.observe(element);\n\n // We give the component some time to resize itself before we\n // stop listening for resize events\n setTimeout(() => {\n observer.unobserve(element);\n }, RESIZE_TIMEOUT);\n}\n\n// Tabulator seems to also have this `field` property, that does not appear on\n// the interface for some reason\ninterface TabulatorSorter extends Tabulator.Sorter {\n field: string;\n}\n\n/**\n * Create a column sorter from a tabulator sorter\n *\n * @param columns - all available columns in the table\n * @returns function that creates a sorter from a tabulator sorter\n */\nexport const createColumnSorter =\n (columns: Column[]) =>\n (sorter: TabulatorSorter): ColumnSorter => {\n const column = columns.find((col) => col.field === sorter.field);\n const direction = sorter.dir.toUpperCase() as 'ASC' | 'DESC';\n\n return {\n column: column,\n direction: direction,\n };\n };\n\nexport function getColumnAggregator(column: Column): Tabulator.ColumnCalc {\n const aggregator = column.aggregator;\n if (isAggregatorFunction(aggregator)) {\n return (values: any[], data: object[]) => {\n return aggregator(column, values, data);\n };\n }\n\n return aggregator;\n}\n\nfunction isAggregatorFunction(value: any): value is ColumnAggregatorFunction {\n return typeof value === 'function';\n}\n","export class ElementPool {\n private pool: Record<string, HTMLElement[]>;\n private usedElements: WeakMap<Element, boolean>;\n private document: Document;\n\n constructor(document: Document) {\n this.document = document;\n this.releaseAll();\n this.clear();\n }\n\n /**\n * Get an element from the pool\n *\n * @param name - tag name of the element\n * @returns the element\n */\n public get(name: string): HTMLElement {\n let element = this.pool[name]?.find(this.isFree);\n if (!element) {\n element = this.createElement(name);\n }\n\n this.usedElements.set(element, true);\n\n return element;\n }\n\n private isFree = (element: HTMLElement) => {\n return !this.usedElements.has(element);\n };\n\n /**\n * Release an element from the pool so that it can be reused\n *\n * @param element - the element to release from the pool\n */\n public release(element: HTMLElement): void {\n this.usedElements.delete(element);\n }\n\n /**\n * Release all elements from the pool so that they can be reused\n */\n public releaseAll() {\n this.usedElements = new WeakMap();\n }\n\n /**\n * Remove all elements from the pool and makes them available for garbage\n * collection\n */\n public clear() {\n this.pool = {};\n }\n\n private createElement(name: string) {\n const element = this.document.createElement(name);\n if (!(name in this.pool)) {\n this.pool[name] = [];\n }\n\n this.pool[name].push(element);\n\n return element;\n }\n}\n","/**\n * Contains changes made to a selection\n */\nexport interface SelectionChangeSet {\n /**\n * Tells whether the items were selected or deselected\n */\n selected: boolean;\n /**\n * Gets the affected items\n */\n items: any[];\n /**\n * Gets the indexes of the affected items\n */\n indexes: number[];\n}\n\n/**\n * Contains a set of selected data objects with methods for adding and removing\n * items to the selection by referring to them by their index/position.\n * Maintains a memory of the last toggled item which can be used to select or\n * deselect a range of items between the last toggled item and a given item.\n */\nexport class Selection {\n private selectedItems: Set<any>;\n private lastToggledIndex: number;\n\n /**\n * Creates an instance of the Selection class.\n * The provided function `getDataByIndex` is used to provide data for the\n * selected items when selection is toggled by using the item index,\n * which can be the row position in a table.\n *\n * @param getDataByIndex - A function that returns the data at the given index\n */\n constructor(private getDataByIndex: (index: number) => any) {\n this.clear();\n }\n\n /**\n * @returns The size of the selection\n */\n get size(): number {\n return this.selectedItems.size;\n }\n\n /**\n * @returns The selected items\n */\n get items(): any[] {\n return Array.from(this.selectedItems);\n }\n\n /**\n * @param items - The selected items\n */\n set items(items: any[]) {\n this.selectedItems = new Set(items);\n this.lastToggledIndex = -1;\n }\n\n /**\n * Checks whether the given item exist in the selection\n *\n * @param data - The data to look up\n * @returns `true` if the given data exist in the selection, otherwise `false`\n */\n public has(data: any) {\n return this.selectedItems.has(data);\n }\n\n /**\n * Toggles the item at the given index in the selection\n *\n * @param index - The index of the item to toggle\n * @returns The changes made to the selection\n */\n public toggleSelection(index: number): SelectionChangeSet {\n return this.toggleRange(index, index);\n }\n\n /**\n * Toggles the items from the last toggled index to the given index in the selection.\n * The toggled items will be toggled as the item at the given index no matter\n * their current state in the selection.\n * Initially, when no last toggled index exist, this function behaves like\n * `toggleSelection`.\n *\n * @param index - The index of the item to toggle\n * @returns The changes made to the selection\n */\n public toggleSelectionFromLastIndex(index: number): SelectionChangeSet {\n if (this.lastToggledIndex < 0) {\n return this.toggleSelection(index);\n }\n\n return this.toggleRange(this.lastToggledIndex, index);\n }\n\n /**\n * Clears the current selection and resets last toggled index\n */\n public clear() {\n this.selectedItems = new Set();\n this.lastToggledIndex = -1;\n }\n\n private toggleRange = (\n fromIndex: number,\n toIndex: number,\n ): SelectionChangeSet => {\n const select = !this.selectedItems.has(this.getDataByIndex(toIndex));\n\n const lowerBound = Math.min(fromIndex, toIndex);\n const upperBound = Math.max(fromIndex, toIndex);\n const updatedIndexes = [];\n const updatedItems = [];\n for (let index = lowerBound; index <= upperBound; index++) {\n const data = this.getDataByIndex(index);\n\n if (!data) {\n continue;\n }\n\n const isSelected = this.selectedItems.has(data);\n\n if (isSelected === select) {\n continue;\n }\n\n if (select) {\n this.selectedItems.add(data);\n } else {\n this.selectedItems.delete(data);\n }\n\n updatedIndexes.push(index);\n updatedItems.push(data);\n }\n\n this.lastToggledIndex = toIndex;\n\n return {\n selected: select,\n items: updatedItems,\n indexes: updatedIndexes,\n };\n };\n}\n","import { EventEmitter } from '@stencil/core';\nimport Tabulator from 'tabulator-tables';\nimport { setElementProperties } from './columns';\nimport { ElementPool } from './element-pool';\nimport { Selection, SelectionChangeSet } from './selection';\nimport { RowData } from './table.types';\n\nconst LIMEL_CHECKBOX = 'limel-checkbox';\n\nconst getRowId = (data: RowData) => data.id ?? data;\n\n/**\n * Provides row selection to Tabulator with shift-click support for range selections\n */\nexport class TableSelection {\n private selection: Selection;\n\n /**\n * Creates an instance of the TableSelection class\n *\n * @param getTable - Function that returns the Tabulator instance\n * @param pool - The element pool used to cache the checkbox components\n * @param selectEvent - The event emitter to use when checkboxes are toggled\n */\n constructor(\n private getTable: () => Tabulator,\n private pool: ElementPool,\n private selectEvent: EventEmitter<RowData[]>,\n ) {\n this.selection = new Selection((index) =>\n getRowId(this.getRowByIndex(index).getData()),\n );\n }\n\n /**\n * @returns Returns `true` when the selection is non-empty, otherwise `false`\n */\n get hasSelection(): boolean {\n return this.selection.size > 0;\n }\n\n /**\n * Clears the selection\n */\n public clear(): void {\n this.selection.clear();\n }\n\n /**\n * Sets the selected items\n *\n * @param data - The selected items\n */\n public setSelection(data: RowData[] = []): void {\n const newItems = data.map(getRowId);\n if (\n this.selection.size === data.length &&\n this.selection.items.every(\n (oldItem, index) => oldItem === newItems[index],\n )\n ) {\n return;\n }\n\n this.selection.items = newItems;\n const rows = this.getActiveRows();\n rows.forEach((row) =>\n this.updateRowSelector(\n row,\n this.selection.has(getRowId(row.getData())),\n ),\n );\n }\n\n /**\n * Prepends a checkbox column used for row selection to the given column definitions\n *\n * @param columnDefinitions - The column definition for the table\n * @returns The column definitions with the checkbox column prepended to it\n */\n public getColumnDefinitions(\n columnDefinitions: Tabulator.ColumnDefinition[],\n ): Tabulator.ColumnDefinition[] {\n return [this.getRowSelectorColumnDefinition(), ...columnDefinitions];\n }\n\n private getRowSelectorColumnDefinition(): Tabulator.ColumnDefinition {\n return {\n title: '',\n formatter: this.getRowSelectorFormatter(),\n cellClick: this.rowSelectorCellClick,\n headerClick: this.headerClick,\n headerSort: false,\n cssClass: 'limel-table--row-selector',\n resizable: false,\n htmlOutput: false,\n clipboard: false,\n };\n }\n\n private headerClick(ev: Event): void {\n ev.stopPropagation();\n }\n\n private getRowSelectorFormatter() {\n return (cell: Tabulator.CellComponent) => {\n const element = this.pool.get(LIMEL_CHECKBOX);\n setElementProperties(element, {\n checked: this.selection.has(getRowId(cell.getData())),\n });\n element.style.display = 'inline-block';\n\n return element;\n };\n }\n\n /**\n * Tabulator cell click handler that updates the selection for the clicked\n * row and toggles the selection from the last clicked row if the shift key\n * is pressed down.\n *\n * @param ev - The pointer event\n * @param cell - The clicked cell component\n */\n protected rowSelectorCellClick = (\n ev: PointerEvent,\n cell: Tabulator.CellComponent,\n ): void => {\n ev.stopPropagation();\n ev.preventDefault();\n\n const clickedRow = cell.getRow();\n const rowPosition = clickedRow.getPosition(true);\n\n if (ev.shiftKey) {\n this.updateRowSelectors(\n this.selection.toggleSelectionFromLastIndex(rowPosition),\n );\n } else {\n this.updateRowSelectors(\n this.selection.toggleSelection(rowPosition),\n );\n }\n\n this.selectEvent.emit(this.selection.items.map(this.getRowData));\n };\n\n private getRowData = (item: RowData | RowData['id']) => {\n if (typeof item === 'object') {\n return item;\n }\n\n return this.getTable().getRow(item).getData();\n };\n\n private updateRowSelectors = (changeSet: SelectionChangeSet): void => {\n changeSet.indexes\n .map(this.getRowByIndex)\n .forEach((row) => this.updateRowSelector(row, changeSet.selected));\n };\n\n private updateRowSelector = (\n row: Tabulator.RowComponent,\n checked: boolean,\n ): void => {\n const cell = row.getCells()[0];\n if (cell) {\n const checkBox = cell.getElement().querySelector(LIMEL_CHECKBOX);\n checkBox.checked = checked;\n }\n };\n\n private getActiveRows: () => Tabulator.RowComponent[] = () => {\n const table = this.getTable();\n if (!table) {\n return [];\n }\n\n return table.getRows('active');\n };\n\n private getRowByIndex = (index: number) => {\n return this.getTable().getRowFromPosition(index, true);\n };\n}\n","/**\n * Layouts:\n * - default: resizes the table's columns, in a way that each column becomes as wide as the data it holds\n * - stretchLastColumn: works like default, but the last column is stretched to fill any remaining space\n * - stretchColumns: when there is extra space, the columns are stretched to fill it, otherwise, this works just like default\n * - lowDensity: converts the table into an airy list of items\n * @public\n */\nexport type Layout =\n | 'default'\n | 'stretchLastColumn'\n | 'stretchColumns'\n | 'lowDensity';\n\n/**\n * Maps a layout to a Tabulator layout\n * @param layout - the layout to map\n * @returns the Tabulator layout\n * @internal\n */\nexport function mapLayout(layout: Layout) {\n const layouts = {\n stretchLastColumn: 'fitDataStretch',\n stretchColumns: 'fitColumns',\n lowDensity: 'fitData',\n };\n\n return layouts[layout] || 'fitDataFill';\n}\n","@use '../../style/mixins';\n@use '../../style/functions';\n@import '../../../node_modules/tabulator-tables/src/scss/tabulator.scss';\n\n/*\n* @prop --table-max-column-width: defines a maximum width for columns using standard size units, to prevent the table from growing too wide. Set to `auto` if you do not need this limitation. Defaults to `40rem`.\n*/\n\n$width-of-sorter-arrow: 0.5rem;\n$cell-padding: 0.5rem;\n$table--has-interactive-rows--selectable-row--hover: 2;\n$table--limel-table--row-selector: 1;\n\n:host(limel-table) {\n isolation: isolate;\n display: block;\n --table-header-background-color: var(--contrast-500);\n --table-header-background-color--hover: var(--contrast-400);\n --table-header-background-color-when-being-dragged: var(--contrast-100);\n\n --table-row-background-color--odd: var(--contrast-200);\n --table-row-background-color--even: var(--contrast-100);\n --table-row-background-color--hover: var(\n --lime-elevated-surface-background-color\n );\n --table-row-background-color--active: var(--contrast-300);\n\n --table-arrow-color: var(--contrast-800);\n --table-arrow-color--active: var(--mdc-theme-primary);\n\n --table-text-color: var(--mdc-theme-text-primary-on-background);\n}\n\n@import './partial-styles/_table-main-layout';\n\n#tabulator-container {\n position: relative;\n}\n\n#tabulator-container,\n#tabulator-table {\n background-color: transparent;\n border: none;\n}\n\n.tabulator {\n .tabulator-header {\n color: var(--table-text-color);\n }\n .tabulator-tableHolder {\n .tabulator-table {\n color: var(--table-text-color);\n background-color: transparent;\n }\n }\n\n .tabulator-header {\n border-bottom: 0;\n background-color: rgb(var(--table-header-background-color));\n\n .tabulator-headers {\n width: fit-content;\n }\n\n .tabulator-col {\n transition: background-color 0.2s ease;\n background-color: rgb(var(--table-header-background-color));\n border-right-color: rgb(var(--contrast-200));\n\n &.tabulator-sortable {\n &:hover {\n background-color: rgb(\n var(--table-header-background-color--hover)\n );\n }\n }\n\n .tabulator-col-content {\n padding-right: $width-of-sorter-arrow;\n }\n }\n\n .tabulator-col-title-holder {\n display: flex;\n gap: 0.25rem;\n }\n\n .tabulator-col-sorter {\n order: 1;\n }\n .tabulator-col-title {\n order: 2;\n font-weight: 500;\n padding-right: 0 !important;\n line-height: functions.pxToRem(20);\n }\n }\n}\n\n.tabulator-row {\n transition: background-color 0.2s ease;\n min-height: 2.25rem;\n\n &:hover {\n transition: background-color 0.1s ease;\n }\n\n &.tabulator-row-odd,\n &.tabulator-row-odd:hover {\n background-color: rgb(var(--table-row-background-color--odd));\n }\n\n &.tabulator-row-even,\n &.tabulator-row-even:hover {\n background-color: rgb(var(--table-row-background-color--even));\n }\n\n .tabulator-cell {\n border-right: transparent;\n padding: $cell-padding;\n padding-left: $cell-padding + $width-of-sorter-arrow;\n\n display: inline-flex;\n align-items: center;\n min-height: inherit;\n\n &[style*='text-align: right;'] {\n justify-content: flex-end;\n }\n &[style*='text-align: center;'] {\n justify-content: center;\n }\n }\n\n .tabulator-col-resize-handle {\n display: none;\n }\n}\n\n.tabulator-col,\n.tabulator-cell {\n max-width: var(--table-max-column-width, 40rem);\n font-size: functions.pxToRem(13);\n}\n\n#tabulator-loader,\n#tabulator-empty-text {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n#tabulator-loader {\n background-color: rgba(var(--contrast-100), 0.6);\n cursor: wait;\n}\n\n#tabulator-empty-text {\n color: rgb(var(--contrast-800));\n font-weight: bold;\n font-size: functions.pxToRem(20);\n pointer-events: none;\n}\n\n@import './partial-styles/tabulator-arrow';\n@import './partial-styles/tabulator-paginator';\n@import './partial-styles/tabulator-loader';\n@import './partial-styles/tabulator-custom-styles';\n@import './partial-styles/header-component';\n@import './partial-styles/movable-columns';\n@import './partial-styles/_tabulator-footer';\n@import './partial-styles/_row-selection';\n","import {\n Component,\n h,\n Prop,\n Element,\n Watch,\n EventEmitter,\n Event,\n Host,\n} from '@stencil/core';\nimport TabulatorTable from 'tabulator-tables';\nimport {\n Column,\n TableParams,\n ColumnSorter,\n ColumnAggregate,\n RowData,\n} from './table.types';\nimport { ColumnDefinitionFactory, createColumnSorter } from './columns';\nimport { isEqual, has } from 'lodash-es';\nimport { ElementPool } from './element-pool';\nimport { TableSelection } from './table-selection';\nimport { mapLayout, Layout } from './layout';\n\nconst FIRST_PAGE = 1;\n\n/**\n * @exampleComponent limel-example-table\n * @exampleComponent limel-example-table-custom-components\n * @exampleComponent limel-example-table-header-menu\n * @exampleComponent limel-example-table-movable-columns\n * @exampleComponent limel-example-table-sorting-disabled\n * @exampleComponent limel-example-table-local\n * @exampleComponent limel-example-table-remote\n * @exampleComponent limel-example-table-activate-row\n * @exampleComponent limel-example-table-selectable-rows\n * @exampleComponent limel-example-table-default-sorted\n * @exampleComponent limel-example-table-layout-default\n * @exampleComponent limel-example-table-layout-stretch-last-column\n * @exampleComponent limel-example-table-layout-stretch-columns\n * @exampleComponent limel-example-table-layout-low-density\n * @exampleComponent limel-example-table-interactive-rows\n */\n@Component({\n tag: 'limel-table',\n styleUrl: 'table.scss',\n shadow: true,\n})\nexport class Table {\n /**\n * Data to be displayed in the table\n */\n @Prop()\n public data: object[] = [];\n\n /**\n * Columns used to display the data\n */\n @Prop()\n public columns: Column[] = [];\n\n /**\n * Set to either `local` or `remote` to change how the table handles the\n * loaded data. When in `local` mode, all sorting and pagination will be\n * done locally with the data given. When in `remote` mode, the consumer\n * is responsible to give the table new data when a `load` event occurs\n */\n @Prop()\n public mode: 'local' | 'remote' = 'local';\n\n /**\n * Defines the layout of the table, based on how width of the columns are calculated.\n *\n * - `default`: makes columns as wide as their contents.\n * - `stretchLastColumn`: makes columns as wide as their contents, stretch the last column to fill up the remaining table width.\n * - `stretchColumns`: stretches all columns to fill the available width when possible.\n * - `lowDensity`: makes columns as wide as their contents, and creates a low density and airy layout.\n */\n @Prop()\n public layout: Layout;\n\n /**\n * Number of rows per page\n */\n @Prop()\n public pageSize: number;\n\n /**\n * The number of total rows available for the data\n */\n @Prop()\n public totalRows: number;\n\n /**\n * The initial sorted columns\n */\n @Prop()\n public sorting: ColumnSorter[] = [];\n\n /**\n * Active row in the table\n */\n @Prop({ mutable: true })\n public activeRow: RowData;\n\n /**\n * Set to `true` to enable reordering of the columns by dragging them\n */\n @Prop()\n public movableColumns: boolean;\n\n /**\n * Set to `true` to trigger loading animation\n */\n @Prop()\n public loading: boolean = false;\n\n /**\n * The page to show\n */\n @Prop()\n public page: number = FIRST_PAGE;\n\n /**\n * Emitted when `mode` is `local` the data is sorted\n */\n @Event()\n public sort: EventEmitter<ColumnSorter[]>;\n\n /**\n * Emitted when a new page has been set\n */\n @Event()\n public changePage: EventEmitter<number>;\n\n /**\n * A message to display when the table has no data\n */\n @Prop()\n public emptyMessage: string;\n\n /**\n * Column aggregates to be displayed in the table\n */\n @Prop()\n public aggregates: ColumnAggregate[];\n\n /**\n * Enables row selection\n */\n @Prop()\n public selectable: boolean;\n\n /**\n * Selected data. Requires `selectable` to be true.\n */\n @Prop()\n public selection: object[];\n\n /**\n * Emitted when `mode` is `remote` and the table is loading new data. The\n * consumer is responsible for giving the table new data\n */\n @Event()\n public load: EventEmitter<TableParams>;\n\n /**\n * Emitted when a row is activated\n */\n @Event()\n public activate: EventEmitter<object>;\n\n /**\n * Emitted when the columns have been changed\n */\n @Event()\n public changeColumns: EventEmitter<Column[]>;\n\n /**\n * Emitted when the row selection has been changed\n */\n @Event()\n public select: EventEmitter<object[]>;\n\n /**\n * Emitted when the select all rows state is toggled\n */\n @Event()\n public selectAll: EventEmitter<boolean>;\n\n @Element()\n private host: HTMLLimelTableElement;\n\n private currentLoad: { page: number; sorters: ColumnSorter[] };\n\n private tabulator: Tabulator;\n\n private pool: ElementPool;\n private columnFactory: ColumnDefinitionFactory;\n private firstRequest: boolean;\n private currentSorting: ColumnSorter[];\n private tableSelection: TableSelection;\n\n constructor() {\n this.handleDataSorting = this.handleDataSorting.bind(this);\n this.handlePageLoaded = this.handlePageLoaded.bind(this);\n this.handleAjaxRequesting = this.handleAjaxRequesting.bind(this);\n this.requestData = this.requestData.bind(this);\n this.onClickRow = this.onClickRow.bind(this);\n this.formatRow = this.formatRow.bind(this);\n this.formatRows = this.formatRows.bind(this);\n this.updateMaxPage = this.updateMaxPage.bind(this);\n this.initTabulatorComponent = this.initTabulatorComponent.bind(this);\n this.setSelection = this.setSelection.bind(this);\n this.addColumnAggregator = this.addColumnAggregator.bind(this);\n this.pool = new ElementPool(document);\n this.columnFactory = new ColumnDefinitionFactory(this.pool);\n }\n\n public componentWillLoad() {\n this.firstRequest = this.mode === 'remote';\n this.initTableSelection();\n }\n\n public componentDidLoad() {\n this.init();\n }\n\n public disconnectedCallback() {\n this.pool.clear();\n }\n\n @Watch('totalRows')\n protected totalRowsChanged() {\n this.updateMaxPage();\n }\n\n @Watch('pageSize')\n protected pageSizeChanged() {\n this.updateMaxPage();\n }\n\n @Watch('page')\n protected pageChanged() {\n if (!this.tabulator) {\n return;\n }\n\n if (this.tabulator.getPage() === this.page) {\n return;\n }\n\n this.tabulator.setPage(this.page);\n }\n\n @Watch('activeRow')\n protected activeRowChanged() {\n if (!this.tabulator) {\n return;\n }\n\n this.formatRows();\n }\n\n @Watch('data')\n protected updateData(newData: RowData[] = [], oldData: RowData[] = []) {\n const shouldReplace = this.shouldReplaceData(newData, oldData);\n\n setTimeout(() => {\n if (!this.tabulator) {\n return;\n }\n\n if (shouldReplace) {\n this.pool.releaseAll();\n this.tabulator.replaceData(newData);\n this.setSelection();\n\n return;\n }\n\n this.tabulator.updateOrAddData(newData);\n });\n }\n\n @Watch('columns')\n protected updateColumns(newColumns: Column[], oldColumns: Column[]) {\n if (!this.tabulator) {\n return;\n }\n\n if (this.areSameColumns(newColumns, oldColumns)) {\n return;\n }\n\n const columnsInTable = this.tabulator\n .getColumns()\n .filter((c) => c.getField());\n\n const oldColumnsInTable = columnsInTable.map((c) =>\n oldColumns.find((old) => old.field === c.getField()),\n );\n\n if (this.areSameColumns(newColumns, oldColumnsInTable)) {\n return;\n }\n\n // Updating columns requires a reinitialization otherwise sorting will not work\n // afterwards\n this.init();\n }\n\n @Watch('aggregates')\n protected updateAggregates(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[],\n ) {\n if (!this.tabulator) {\n return;\n }\n\n if (isEqual(newAggregates, oldAggregates)) {\n return;\n }\n\n if (!this.haveSameAggregateFields(newAggregates, oldAggregates)) {\n this.init();\n\n return;\n }\n\n this.tabulator.recalc();\n this.tabulator.rowManager.redraw();\n }\n\n @Watch('selection')\n protected updateSelection(newSelection: any[]) {\n if (!this.tableSelection) {\n return;\n }\n\n this.tableSelection.setSelection(newSelection);\n }\n\n @Watch('selectable')\n protected updateSelectable() {\n if (this.tableSelection && !this.selectable) {\n this.tableSelection = null;\n }\n\n this.initTableSelection();\n this.init();\n }\n\n @Watch('sorting')\n protected updateSorting(\n newValue: ColumnSorter[],\n oldValue: ColumnSorter[],\n ) {\n const newSorting = this.getColumnSorter(newValue);\n const oldSorting = this.getColumnSorter(oldValue);\n if (isEqual(newSorting, oldSorting)) {\n return;\n }\n\n this.tabulator.setSort(newSorting);\n }\n\n private shouldReplaceData(newData: RowData[], oldData: RowData[]) {\n const newIds = newData.map((item) => item.id ?? item) as Array<\n string | number\n >;\n const oldIds = oldData.map((item) => item.id ?? item) as Array<\n string | number\n >;\n\n return (\n !this.areEqualIds(newIds, oldIds) ||\n !this.isSameOrder(newIds, oldIds)\n );\n }\n\n private areEqualIds(\n newIds: Array<string | number>,\n oldIds: Array<string | number>,\n ): boolean {\n const newIdSet = new Set(newIds);\n const oldIdSet = new Set(oldIds);\n\n return (\n newIdSet.size === oldIdSet.size &&\n newIds.every((id) => oldIdSet.has(id))\n );\n }\n\n private isSameOrder(\n newIds: Array<string | number>,\n oldIds: Array<string | number>,\n ): boolean {\n return newIds.every((id, index) => id === oldIds[index]);\n }\n\n private areSameColumns(newColumns: Column[], oldColumns: Column[]) {\n return (\n newColumns.length === oldColumns.length &&\n newColumns.every((column) => oldColumns.includes(column))\n );\n }\n\n private haveSameAggregateFields(\n newAggregates: ColumnAggregate[],\n oldAggregates: ColumnAggregate[],\n ) {\n const oldAggregateFields = oldAggregates?.map((a) => a.field) || [];\n\n return (\n newAggregates?.length === oldAggregates?.length &&\n !!newAggregates?.every((a) => oldAggregateFields.includes(a.field))\n );\n }\n\n private init() {\n if (this.tabulator) {\n this.pool.releaseAll();\n this.tabulator.destroy();\n }\n\n const table: HTMLElement =\n this.host.shadowRoot.querySelector('#tabulator-table');\n this.initTabulatorComponent(table);\n }\n\n /*\n * Tabulator requires that the html element it's rendered inside\n * has a size before it's created, otherwise it doesn't consider\n * it self renderedy completely. (the callback \"renderComplete\"\n * is never run).\n *\n * @param table {HTMLElement}\n *\n */\n private initTabulatorComponent(table: HTMLElement) {\n // Some browsers do not implement the ResizeObserver API...\n // If that's the case lets just create the table no\n // matter if its rendered or not.\n if (!('ResizeObserver' in window)) {\n this.tabulator = new TabulatorTable(table, this.getOptions());\n this.setSelection();\n\n return;\n }\n\n const observer = new ResizeObserver(() => {\n requestAnimationFrame(() => {\n this.tabulator = new TabulatorTable(table, this.getOptions());\n this.setSelection();\n observer.unobserve(table);\n observer.disconnect();\n });\n });\n observer.observe(table);\n }\n\n private initTableSelection() {\n if (this.selectable) {\n this.tableSelection = new TableSelection(\n () => this.tabulator,\n this.pool,\n this.select,\n );\n this.tableSelection.setSelection(this.selection);\n }\n }\n\n private setSelection() {\n if (!(this.tabulator && this.tableSelection)) {\n return;\n }\n\n this.tableSelection.setSelection(this.selection);\n }\n\n private updateMaxPage() {\n this.tabulator?.setMaxPage(this.calculatePageCount());\n }\n\n private getOptions(): Tabulator.Options {\n const ajaxOptions = this.getAjaxOptions();\n const paginationOptions = this.getPaginationOptions();\n const columnOptions = this.getColumnOptions();\n\n return {\n data: this.data,\n layout: mapLayout(this.layout),\n columns: this.getColumnDefinitions(),\n dataSorting: this.handleDataSorting,\n pageLoaded: this.handlePageLoaded,\n ...ajaxOptions,\n ...paginationOptions,\n rowClick: this.onClickRow,\n rowFormatter: this.formatRow,\n initialSort: this.getInitialSorting(),\n nestedFieldSeparator: false,\n ...columnOptions,\n };\n }\n\n private getInitialSorting(): Tabulator.Sorter[] {\n if (this.currentSorting && this.currentSorting.length) {\n return this.getColumnSorter(this.currentSorting);\n }\n\n return this.getColumnSorter(this.sorting);\n }\n\n private getColumnSorter(sorting: ColumnSorter[]): Tabulator.Sorter[] {\n return sorting.map((sorter: ColumnSorter) => {\n return {\n column: String(sorter.column.field),\n dir: sorter.direction.toLocaleLowerCase() as Tabulator.SortDirection,\n };\n });\n }\n\n private getColumnDefinitions(): Tabulator.ColumnDefinition[] {\n const columnDefinitions = this.columns\n .map(this.addColumnAggregator)\n .map(this.columnFactory.create);\n\n if (this.tableSelection) {\n return this.tableSelection.getColumnDefinitions(columnDefinitions);\n }\n\n return columnDefinitions;\n }\n\n private addColumnAggregator(column: Column<any>): Column<any> {\n if (!this.aggregates?.length || column.aggregator) {\n return column;\n }\n\n const aggregate = this.aggregates.find((a) => a.field === column.field);\n if (aggregate) {\n column.aggregator = (\n col?: Column,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _values?: any[],\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _data?: any[],\n ) => {\n if (!col) {\n return undefined;\n }\n\n const value = this.aggregates.find(\n (a) => a.field === col.field,\n )?.value;\n\n if (col.formatter) {\n return col.formatter(value);\n }\n\n return value;\n };\n }\n\n return column;\n }\n\n private getAjaxOptions(): Tabulator.OptionsData {\n if (!this.isRemoteMode()) {\n return {};\n }\n\n // Tabulator needs a URL to be set, even though this one will never be\n // used since we have our own custom `ajaxRequestFunc`\n const remoteUrl = 'https://localhost';\n\n return {\n ajaxSorting: true,\n ajaxURL: remoteUrl,\n ajaxRequestFunc: this.requestData,\n ajaxRequesting: this.handleAjaxRequesting,\n };\n }\n\n /*\n * The ajaxRequesting callback is triggered when ever an ajax request is made.\n *\n * Tabulator is requesting data with an AJAX request even though it has been\n * given data when it was created.\n *\n * It seems unnecessary for us to emit the `load` event as well when this\n * happens, since we can just initialize the table with the data that has been\n * given to us. Therefore, we abort the request if:\n *\n * * its the first time this method is called and,\n * * data has been sent in to the component as a prop\n *\n */\n private handleAjaxRequesting() {\n const abortRequest = this.firstRequest && !!this.data?.length;\n this.firstRequest = false;\n\n if (abortRequest) {\n setTimeout(() => {\n this.updateMaxPage();\n this.tabulator.replaceData(this.data);\n });\n\n return false;\n }\n\n return true;\n }\n\n private getPaginationOptions(): Tabulator.OptionsPagination {\n if (!this.pageSize) {\n return {};\n }\n\n return {\n pagination: this.isRemoteMode() ? 'remote' : 'local',\n paginationSize: this.pageSize,\n paginationInitialPage: this.page,\n };\n }\n\n private requestData(_, __, params: any): Promise<object> {\n const sorters = params.sorters;\n const currentPage = params.page;\n\n if (this.page !== currentPage) {\n this.changePage.emit(currentPage);\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n\n const load = {\n page: currentPage,\n sorters: columnSorters,\n };\n\n // In order to make limel-table behave more like a controlled component,\n // we always return the existing data from this function, therefore\n // relying on the consumer component to handle the loading\n // state via the loading prop, if it actually decides to load new data.\n const resolveExistingData = Promise.resolve({\n last_page: this.calculatePageCount(), // eslint-disable-line camelcase\n data: this.data,\n });\n\n if (isEqual(this.currentLoad, load)) {\n return resolveExistingData;\n }\n\n this.currentSorting = columnSorters;\n this.currentLoad = load;\n this.load.emit(load);\n\n return resolveExistingData;\n }\n\n private isRemoteMode(): boolean {\n return this.mode === 'remote';\n }\n\n private handleDataSorting(sorters: Tabulator.Sorter[]): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n const columnSorters = sorters.map(createColumnSorter(this.columns));\n if (columnSorters.length === 0) {\n return;\n }\n\n this.sort.emit(columnSorters);\n }\n\n private handlePageLoaded(page: number): void {\n if (this.isRemoteMode()) {\n return;\n }\n\n this.changePage.emit(page);\n }\n\n private onClickRow(_ev, row: Tabulator.RowComponent): void {\n if (typeof row.getPosition === 'undefined') {\n // Not a data row, probably a CalcComponent\n return;\n }\n\n if (this.isActiveRow(row)) {\n this.activeRow = null;\n } else {\n this.activeRow = row.getData();\n }\n\n this.activate.emit(this.activeRow);\n }\n\n private getActiveRows: () => Tabulator.RowComponent[] = () => {\n if (!this.tabulator) {\n return [];\n }\n\n return this.tabulator.getRows('active');\n };\n\n private getActiveRowsData: () => object[] = () => {\n // Note: Tabulator.getData() creates copies of each data object\n // and will break this.selection.has checks, hence why this function\n // intentionally retrieves the data using the row components\n return this.getActiveRows().map((row) => row.getData());\n };\n\n private selectAllOnChange = (ev: CustomEvent<boolean>) => {\n const selectAll = ev.detail;\n\n ev.stopPropagation();\n ev.preventDefault();\n\n const newSelection = selectAll ? this.getActiveRowsData() : [];\n this.select.emit(newSelection);\n this.tableSelection.setSelection(newSelection);\n this.selectAll.emit(selectAll);\n };\n\n private formatRows() {\n this.tabulator.getRows().forEach(this.formatRow);\n }\n\n private formatRow(row: Tabulator.RowComponent) {\n if (this.isActiveRow(row)) {\n row.getElement().classList.add('active');\n } else {\n row.getElement().classList.remove('active');\n }\n\n const interactiveFeedbackElement = row\n .getElement()\n .getElementsByClassName('interactive-feedback');\n if (interactiveFeedbackElement.length === 0) {\n const element = row.getElement().ownerDocument.createElement('div');\n element.classList.add('interactive-feedback');\n row.getElement().prepend(element);\n }\n }\n\n private isActiveRow(row: Tabulator.RowComponent) {\n if (!this.activeRow) {\n return false;\n }\n\n const activeRowId = this.activeRow.id ?? null;\n\n if (activeRowId !== null) {\n return activeRowId === row.getData().id;\n }\n\n return this.activeRow === row.getData();\n }\n\n private calculatePageCount(): number {\n let total = this.totalRows;\n if (!total) {\n total = this.data.length;\n }\n\n return Math.ceil(total / this.pageSize);\n }\n\n private hasAggregation(columns: Column[]): boolean {\n return columns.some((column) => has(column, 'aggregator'));\n }\n\n private getColumnOptions = (): Tabulator.OptionsColumns => {\n if (!this.movableColumns) {\n return {};\n }\n\n return {\n movableColumns: true,\n columnMoved: this.handleMoveColumn,\n };\n };\n\n private handleMoveColumn = (_, components: Tabulator.ColumnComponent[]) => {\n const columns = components.map(this.findColumn).filter((c) => c);\n this.changeColumns.emit(columns);\n };\n\n private findColumn = (component: Tabulator.ColumnComponent): Column => {\n return this.columns.find((column) => {\n return (\n column.field === component.getField() &&\n column.title === component.getDefinition().title\n );\n });\n };\n\n render() {\n return (\n <Host\n class={{\n 'has-low-density': this.layout === 'lowDensity',\n }}\n >\n <div\n id=\"tabulator-container\"\n class={{\n 'has-pagination': this.totalRows > this.pageSize,\n 'has-aggregation': this.hasAggregation(this.columns),\n 'has-movable-columns': this.movableColumns,\n 'has-rowselector': this.selectable,\n 'has-selection': this.tableSelection?.hasSelection,\n }}\n >\n {/* Toggle style instead of removing the loader\n because removing the element will cause a rerender, breaking the\n tabulator table */}\n <div\n id=\"tabulator-loader\"\n style={{ display: this.loading ? 'flex' : 'none' }}\n >\n <limel-spinner size=\"large\" />\n </div>\n {this.renderEmptyMessage()}\n {this.renderSelectAll()}\n <div id=\"tabulator-table\" />\n </div>\n </Host>\n );\n }\n\n private renderSelectAll() {\n if (!this.selectable) {\n return;\n }\n\n const showSelectAll = !this.loading && this.tableSelection;\n\n return (\n <div\n class=\"select-all\"\n style={{ display: showSelectAll ? 'inline-block' : 'none' }}\n >\n <limel-checkbox\n onChange={this.selectAllOnChange}\n disabled={!this.data.length}\n checked={this.tableSelection?.hasSelection}\n indeterminate={\n this.tableSelection?.hasSelection &&\n this.selection?.length < this.data.length\n }\n />\n </div>\n );\n }\n\n private renderEmptyMessage() {\n const showEmptyMessage =\n !this.loading && !this.data.length && this.emptyMessage;\n\n return (\n <div\n id=\"tabulator-empty-text\"\n style={{ display: showEmptyMessage ? 'flex' : 'none' }}\n >\n <span>{this.emptyMessage}</span>\n </div>\n );\n }\n}\n"],"mappings":"8cAMA,IAAIA,SAAiBC,SAAW,mBAAqBA,OAAOC,WAAa,SAAW,SAAUC,GAAO,cAAcA,CAAI,EAAK,SAAUA,GAAO,OAAOA,UAAcF,SAAW,YAAcE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOI,UAAY,gBAAkBF,CAAI,EAE1Q,IAAKG,MAAMD,UAAUE,UAAW,CAE/BC,OAAOC,eAAeH,MAAMD,UAAW,YAAa,CAEnDK,MAAO,SAASA,EAAMC,GAIrB,GAAIC,MAAQ,KAAM,CAEjB,MAAM,IAAIC,UAAU,gCACxB,CAEG,IAAIC,EAAIN,OAAOI,MAIf,IAAIG,EAAMD,EAAEE,SAAW,EAIvB,UAAWL,IAAc,WAAY,CAEpC,MAAM,IAAIE,UAAU,+BACxB,CAIG,IAAII,EAAUC,UAAU,GAIxB,IAAIC,EAAI,EAIR,MAAOA,EAAIJ,EAAK,CAUf,IAAIK,EAASN,EAAEK,GAEf,GAAIR,EAAUU,KAAKJ,EAASG,EAAQD,EAAGL,GAAI,CAE1C,OAAOK,CACZ,CAIIA,GACJ,CAIG,OAAQ,CACX,GAGA,CAIA,IAAKb,MAAMD,UAAUiB,KAAM,CAE1Bd,OAAOC,eAAeH,MAAMD,UAAW,OAAQ,CAE9CK,MAAO,SAASA,EAAMC,GAIrB,GAAIC,MAAQ,KAAM,CAEjB,MAAM,IAAIC,UAAU,gCACxB,CAEG,IAAIC,EAAIN,OAAOI,MAIf,IAAIG,EAAMD,EAAEE,SAAW,EAIvB,UAAWL,IAAc,WAAY,CAEpC,MAAM,IAAIE,UAAU,+BACxB,CAIG,IAAII,EAAUC,UAAU,GAIxB,IAAIC,EAAI,EAIR,MAAOA,EAAIJ,EAAK,CAUf,IAAIK,EAASN,EAAEK,GAEf,GAAIR,EAAUU,KAAKJ,EAASG,EAAQD,EAAGL,GAAI,CAE1C,OAAOM,CACZ,CAIID,GACJ,CAIG,OAAOI,SACV,GAGA,CAIA,IAAKC,OAAOnB,UAAUoB,SAAU,CAE/BD,OAAOnB,UAAUoB,SAAW,SAAUC,EAAQC,GAI7C,GAAID,aAAkBE,OAAQ,CAE7B,MAAMf,UAAU,sCACnB,CAEE,GAAIc,IAAUJ,UAAW,CACxBI,EAAQ,CACX,CAEE,OAAOf,KAAKiB,QAAQH,EAAQC,MAAY,CAC1C,CACA,CAIA,IAAKrB,MAAMD,UAAUoB,SAAU,CAE9BjB,OAAOC,eAAeH,MAAMD,UAAW,WAAY,CAElDK,MAAO,SAASA,EAAMoB,EAAeC,GAEpC,GAAInB,MAAQ,KAAM,CAEjB,MAAM,IAAIC,UAAU,gCACxB,CAIG,IAAIC,EAAIN,OAAOI,MAIf,IAAIG,EAAMD,EAAEE,SAAW,EAIvB,GAAID,IAAQ,EAAG,CAEd,OAAO,KACX,CAMG,IAAIiB,EAAID,EAAY,EAYpB,IAAIZ,EAAIc,KAAKC,IAAIF,GAAK,EAAIA,EAAIjB,EAAMkB,KAAKE,IAAIH,GAAI,GAEjD,SAASI,EAAcC,EAAGC,GAEzB,OAAOD,IAAMC,UAAYD,IAAM,iBAAmBC,IAAM,UAAYC,MAAMF,IAAME,MAAMD,EAC1F,CAIG,MAAOnB,EAAIJ,EAAK,CAMf,GAAIqB,EAActB,EAAEK,GAAIW,GAAgB,CAEvC,OAAO,IACZ,CAIIX,GACJ,CAIG,OAAO,KACV,GAGA,CAIA,UAAWX,OAAOgC,SAAW,WAAY,CAIxChC,OAAOC,eAAeD,OAAQ,SAAU,CAEvCE,MAAO,SAAS8B,EAAOC,EAAQC,GAK9B,GAAID,IAAW,MAAQA,IAAWlB,UAAW,CAE5C,MAAM,IAAIV,UAAU,6CACxB,CAEG,IAAI8B,EAAKnC,OAAOiC,GAEhB,IAAK,IAAIG,EAAQ,EAAGA,EAAQ1B,UAAUF,OAAQ4B,IAAS,CAEtD,IAAIC,EAAa3B,UAAU0B,GAE3B,GAAIC,IAAe,MAAQA,IAAetB,UAAW,CAEpD,IAAK,IAAIuB,KAAWD,EAAY,CAI/B,GAAIrC,OAAOH,UAAU0C,eAAe1B,KAAKwB,EAAYC,GAAU,CAE9DH,EAAGG,GAAWD,EAAWC,EAChC,CACA,CACA,CACA,CAEG,OAAOH,CACV,EAEEK,SAAU,KAEVC,aAAc,MAGhB,CAEA,IAAIC,EAAgB,SAASA,EAAcC,GAE1CvC,KAAKuC,MAAQA,EAEbvC,KAAKwC,oBAAsB,MAE3BxC,KAAKyC,eAAiBzC,KAAK0C,uBAE3B1C,KAAK2C,QAAU3C,KAAK4C,sBAEpB5C,KAAK6C,WAAa,KAElB7C,KAAK8C,QAAU,GAEf9C,KAAK+C,eAAiB,GAEtB/C,KAAKgD,eAAiB,GAEtBhD,KAAKiD,WAAa,EAElBjD,KAAK2C,QAAQO,aAAalD,KAAKyC,eAAgBzC,KAAK2C,QAAQQ,WAC7D,EAKAb,EAAc7C,UAAUiD,qBAAuB,WAE9C,IAAIU,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,qBAEjB,OAAOJ,CACR,EAEAd,EAAc7C,UAAUmD,oBAAsB,WAE7C,IAAIQ,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,oBAEjB,IAAKxD,KAAKuC,MAAMkB,QAAQC,cAAe,CAEtCN,EAAGG,UAAUC,IAAI,0BACnB,CAEC,OAAOJ,CACR,EAEAd,EAAc7C,UAAUkE,WAAa,WAerC,EAIArB,EAAc7C,UAAUmE,cAAgB,SAAUC,GAEjD7D,KAAK6C,WAAagB,CACnB,EAIAvB,EAAc7C,UAAUqE,WAAa,WAEpC,OAAO9D,KAAK2C,OACb,EAIAL,EAAc7C,UAAUsE,kBAAoB,WAE3C,OAAO/D,KAAKyC,cACb,EAaAH,EAAc7C,UAAUuE,iBAAmB,SAAUC,GAEpD,IAAIC,EAAY,EACZC,EAAcnE,KAAK2C,QAAQwB,YAAcnE,KAAKuC,MAAMI,QAAQyB,YAIhEpE,KAAK2C,QAAQM,WAAagB,EAI1B,GAAIA,EAAOE,EAAa,CAEvBD,EAAYD,EAAOE,EAEnBnE,KAAK2C,QAAQ0B,MAAMC,YAAcJ,EAAY,IAC/C,KAAQ,CAENlE,KAAK2C,QAAQ0B,MAAMC,WAAa,CAClC,CAOCtE,KAAKiD,WAAagB,EAElB,GAAIjE,KAAKuC,MAAMgC,UAAU,iBAAkB,CAE1CvE,KAAKuC,MAAMiC,QAAQC,cAAcT,kBACnC,CACA,EAKA1B,EAAc7C,UAAUiF,2BAA6B,SAAUC,GAE9D,IAAIC,EAAO,GACPC,EAAc7E,KAAKuC,MAAMkB,QAAQqB,uBACjCC,EACAC,EAEJ,GAAIL,GAAQA,EAAKvE,OAAQ,CAExB2E,EAAMJ,EAAK,GAEX,IAAK,IAAIM,KAAOF,EAAK,CAEpB,IAAIG,EAAM,CAETC,MAAOF,EAEPG,MAAOH,GAIR,IAAInF,EAAQiF,EAAIE,GAEhB,cAAenF,IAAU,YAAc,YAAcV,EAAQU,IAE5D,IAAK,YAEJkF,EAAS,SAET,MAED,IAAK,UAEJA,EAAS,UAET,MAED,IAAK,SAEJ,GAAItF,MAAM2F,QAAQvF,GAAQ,CAEzBkF,EAAS,OACf,KAAY,CAENA,EAAS,QACf,CAEK,MAED,QAEC,IAAKrD,MAAM7B,IAAUA,IAAU,GAAI,CAElCkF,EAAS,QACf,KAAY,CAEN,GAAIlF,EAAMwF,MAAM,wCAAyC,CAExDN,EAAS,UAChB,KAAa,CAENA,EAAS,QAChB,CACA,CAEK,MAIFE,EAAIF,OAASA,EAEbJ,EAAKW,KAAKL,EACb,CAEE,GAAIL,EAAa,CAEhB,cAAeA,IAAgB,YAAc,YAAczF,EAAQyF,IAElE,IAAK,WAEJ7E,KAAKuC,MAAMkB,QAAQX,QAAU+B,EAAYpE,KAAKT,KAAKuC,MAAOqC,GAE1D,MAED,IAAK,SAEJ,GAAIlF,MAAM2F,QAAQR,GAAc,CAE/BD,EAAKY,SAAQ,SAAUN,GAEtB,IAAII,EAAQT,EAAYnE,MAAK,SAAU+E,GAEtC,OAAOA,EAAIN,QAAUD,EAAIC,KACjC,IAEO,GAAIG,EAAO,CAEV1F,OAAOgC,OAAOsD,EAAKI,EAC3B,CACA,GACA,KAAY,CAENV,EAAKY,SAAQ,SAAUN,GAEtB,GAAIL,EAAYK,EAAIC,OAAQ,CAE3BvF,OAAOgC,OAAOsD,EAAKL,EAAYK,EAAIC,OAC3C,CACA,GACA,CAEKnF,KAAKuC,MAAMkB,QAAQX,QAAU8B,EAE7B,MAGL,KAAS,CAEN5E,KAAKuC,MAAMkB,QAAQX,QAAU8B,CAChC,CAEE5E,KAAK0F,WAAW1F,KAAKuC,MAAMkB,QAAQX,QACrC,CACA,EAEAR,EAAc7C,UAAUiG,WAAa,SAAUd,EAAMG,GAEpD,IAAIY,EAAO3F,KAEX,MAAO2F,EAAKlD,eAAeU,WAAY,CACtCwC,EAAKlD,eAAemD,YAAYD,EAAKlD,eAAeU,WACtD,CAAEwC,EAAK7C,QAAU,GAEhB6C,EAAK5C,eAAiB,GAEtB4C,EAAK3C,eAAiB,GAItB,GAAI2C,EAAKpD,MAAMgC,UAAU,iBAAkB,CAE1CoB,EAAKpD,MAAMiC,QAAQC,cAAcoB,OACnC,CAECjB,EAAKY,SAAQ,SAAUC,EAAKK,GAE3BH,EAAKI,WAAWN,EAClB,IAECE,EAAKK,kBAEL,GAAIL,EAAKpD,MAAMkB,QAAQwC,kBAAoBN,EAAKpD,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FoB,EAAKpD,MAAMiC,QAAQyB,iBAAiBtC,YACtC,CAEC,GAAI3D,KAAKuC,MAAMkB,QAAQyC,cAAe,CAErClG,KAAKuC,MAAM4D,QAAQC,aAAa,MAAO,KACzC,CAECT,EAAKU,OAAO,KACb,EAEA/D,EAAc7C,UAAUsG,WAAa,SAAUO,EAAYC,EAAQC,GAElE,IAAIC,EAAS,IAAIC,EAAOJ,EAAYtG,MAChC2G,EAAQF,EAAO3C,aACf9B,EAAQwE,EAAexG,KAAK4G,gBAAgBJ,GAAgBA,EAEhE,GAAIA,GAAgBxE,GAAS,EAAG,CAE/B,IAAI6E,EAAc7G,KAAK8C,QAAQ7B,QAAQuF,EAAaM,gBAEpD,IAAIC,EAASP,EAAa1C,aAE1B,GAAIyC,EAAQ,CAEXvG,KAAK8C,QAAQkE,OAAOH,EAAa,EAAGJ,GAEpCM,EAAOE,WAAW/D,aAAayD,EAAOI,EACzC,KAAS,CAEN/G,KAAK8C,QAAQkE,OAAOH,EAAc,EAAG,EAAGJ,GAExCM,EAAOE,WAAW/D,aAAayD,EAAOI,EAAOG,YAChD,CACA,KAAQ,CAEN,GAAIX,EAAQ,CAEXvG,KAAK8C,QAAQqE,QAAQV,GAErBzG,KAAKyC,eAAeS,aAAauD,EAAO3C,aAAc9D,KAAKyC,eAAeU,WAC7E,KAAS,CAENnD,KAAK8C,QAAQyC,KAAKkB,GAElBzG,KAAKyC,eAAe2E,YAAYX,EAAO3C,aAC1C,CAEE2C,EAAOY,gBACT,CAEC,OAAOZ,CACR,EAEAnE,EAAc7C,UAAU6H,oBAAsB,SAAUpC,GAEvD,GAAIA,EAAIoB,WAAWnB,MAAO,CAEzBnF,KAAKgD,eAAekC,EAAIoB,WAAWnB,OAASD,CAC9C,CACA,EAEA5C,EAAc7C,UAAU8H,uBAAyB,SAAUrC,GAE1DlF,KAAK+C,eAAewC,KAAKL,EAC1B,EAEA5C,EAAc7C,UAAUuG,gBAAkB,WAEzChG,KAAK+C,eAAiB,GAEtB/C,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAE9BA,EAAOe,oBACT,GACA,EAIAlF,EAAc7C,UAAUgI,sBAAwB,WAE/C,IAAI9B,EAAO3F,KACP0H,EAAY,EAEhB/B,EAAK7C,QAAQ0C,SAAQ,SAAUiB,GAE9B,IAAIkB,EAEJlB,EAAOmB,qBAEPD,EAASlB,EAAOoB,YAEhB,GAAIF,EAASD,EAAW,CAEvBA,EAAYC,CACf,CACA,IAEChC,EAAK7C,QAAQ0C,SAAQ,SAAUiB,GAE9BA,EAAOqB,cAAcnC,EAAKpD,MAAMkB,QAAQsE,sBAAuBL,EACjE,IAEC/B,EAAK9C,WAAWmF,iBACjB,EAKA1F,EAAc7C,UAAUwI,WAAa,SAAUC,GAE9C,IAAIvC,EAAO3F,KAEX,WAAYkI,IAAY,YAAc,YAAc9I,EAAQ8I,KAAa,SAAU,CAElF,GAAIA,aAAmBxB,EAAQ,CAI9B,OAAOwB,CACV,MAAS,GAAIA,aAAmBC,EAAiB,CAI9C,OAAOD,EAAQE,YAAc,KAChC,MAAS,UAAWC,cAAgB,aAAeH,aAAmBG,YAAa,CAIhF,IAAI/C,EAAQK,EAAK7C,QAAQpC,MAAK,SAAU+F,GAEvC,OAAOA,EAAO9D,UAAYuF,CAC9B,IAEG,OAAO5C,GAAS,KACnB,CACA,KAAQ,CAIN,OAAOtF,KAAKgD,eAAekF,IAAY,KACzC,CAKC,OAAO,KACR,EAEA5F,EAAc7C,UAAU6I,iBAAmB,SAAUnD,GAEpD,OAAOnF,KAAKgD,eAAemC,EAC5B,EAEA7C,EAAc7C,UAAU8I,sBAAwB,SAAUC,GACzD,IAAIC,EAAQzI,KAEZ,IAAI0I,EAAU,GAEd9I,OAAO+I,KAAK3I,KAAKgD,gBAAgBwC,SAAQ,SAAUL,GAElD,IAAIyD,EAAYzD,EAAM0D,MAAM,KAAK,GAEjC,GAAID,IAAcJ,EAAM,CAEvBE,EAAQnD,KAAKkD,EAAMzF,eAAemC,GACrC,CACA,IAEC,OAAOuD,CACR,EAEApG,EAAc7C,UAAUqJ,iBAAmB,SAAU9G,GAEpD,OAAOhC,KAAK+C,eAAef,EAC5B,EAEAM,EAAc7C,UAAUsJ,uBAAyB,SAAU/G,GAE1D,IAAIA,EAAQhC,KAAK+C,eAAepD,WAAU,SAAUuF,GAEnD,OAAOA,EAAI8D,OACb,IAEC,OAAOhH,GAAS,EAAIhC,KAAK+C,eAAef,GAAS,KAClD,EAEAM,EAAc7C,UAAUwJ,WAAa,WAEpC,OAAOjJ,KAAK8C,OACb,EAEAR,EAAc7C,UAAUmH,gBAAkB,SAAUH,GAEnD,OAAOzG,KAAK+C,eAAepD,WAAU,SAAUuF,GAE9C,OAAOuB,IAAWvB,CACpB,GACA,EAIA5C,EAAc7C,UAAUyJ,eAAiB,WAExC,OAAOlJ,KAAK+C,cACb,EAIAT,EAAc7C,UAAU0J,SAAW,SAAUC,GAE5C,IAAIzD,EAAO3F,KAEX2F,EAAK5C,eAAeyC,SAAQ,SAAUiB,EAAQX,GAE7CsD,EAAS3C,EAAQX,EACnB,GACA,EAIAxD,EAAc7C,UAAU4J,eAAiB,SAAUC,GAElD,IAAI3D,EAAO3F,KACPuJ,EAAS,GAEb5D,EAAK5C,eAAeyC,SAAQ,SAAUiB,GAErC,IAAK6C,GAAUA,GAAU7C,EAAOuC,QAAS,CAExCO,EAAOhE,KAAKkB,EAAO+C,gBACtB,CACA,IAEC,OAAOD,CACR,EAIAjH,EAAc7C,UAAUgK,kBAAoB,WAE3C,IAAI9D,EAAO3F,KACPuJ,EAAS,GAEb5D,EAAK7C,QAAQ0C,SAAQ,SAAUiB,GAE9B8C,EAAOhE,KAAKkB,EAAO+C,cAAc,MACnC,IAEC,OAAOD,CACR,EAEAjH,EAAc7C,UAAUiK,cAAgB,SAAUC,GAEjD,IAAIhE,EAAO3F,KACPuJ,EAAS,GACTzG,EAAU6G,EAAahE,EAAK7C,QAAU6C,EAAK5C,eAE/CD,EAAQ0C,SAAQ,SAAUiB,GAEzB8C,EAAOhE,KAAKkB,EAAOmD,eACrB,IAEC,OAAOL,CACR,EAEAjH,EAAc7C,UAAUoK,SAAW,WAElC,IAAIC,EAAQ,EAEZ9J,KAAK+C,eAAeyC,SAAQ,SAAUiB,GAErC,GAAIA,EAAOuC,QAAS,CAEnBc,GAASrD,EAAOoD,UACnB,CACA,IAEC,OAAOC,CACR,EAEAxH,EAAc7C,UAAUsK,WAAa,SAAUC,EAAMjI,EAAIkI,GAExDjK,KAAKkK,iBAAiBF,EAAMjI,EAAIkI,GAEhC,GAAIjK,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiBtC,YACtC,CAEC,GAAI3D,KAAKuC,MAAMgC,UAAU,eAAgB,CAExCvE,KAAKuC,MAAMiC,QAAQ2F,YAAYC,OAAOpK,KAAKuC,MAAMM,WAAWwH,WAC9D,CAECtI,EAAGY,QAAQsE,WAAW/D,aAAa8G,EAAKrH,QAASZ,EAAGY,SAEpD,GAAIsH,EAAO,CAEVlI,EAAGY,QAAQsE,WAAW/D,aAAanB,EAAGY,QAASqH,EAAKrH,QACtD,CAEC3C,KAAKyH,wBAELzH,KAAKuC,MAAMM,WAAWuD,cACvB,EAEA9D,EAAc7C,UAAUyK,iBAAmB,SAAUF,EAAMjI,EAAIkI,GAE9D,GAAID,EAAKM,OAAOC,QAAS,CAExBvK,KAAKwK,mBAAmBR,EAAKM,OAAOxH,QAASkH,EAAMjI,EAAIkI,EACzD,KAAQ,CAENjK,KAAKwK,mBAAmBxK,KAAK8C,QAASkH,EAAMjI,EAAIkI,EAClD,CAECjK,KAAKwK,mBAAmBxK,KAAK+C,eAAgBiH,EAAMjI,EAAIkI,EAAO,MAE9D,GAAIjK,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiBtC,YACtC,CAEC,GAAI3D,KAAKuC,MAAMkB,QAAQyC,cAAe,CAErClG,KAAKuC,MAAM4D,QAAQC,aAAa,KAClC,CAEC,GAAIpG,KAAKuC,MAAMkB,QAAQgH,YAAa,CAEnCzK,KAAKuC,MAAMkB,QAAQgH,YAAYhK,KAAKT,KAAKuC,MAAOyH,EAAKJ,eAAgB5J,KAAKuC,MAAMmI,cAAchB,gBAChG,CAEC,GAAI1J,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAO9H,QAAS,CAEjI9C,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,UACtC,CACA,EAEAvI,EAAc7C,UAAU+K,mBAAqB,SAAU1H,EAASkH,EAAMjI,EAAIkI,EAAOa,GAChF,IAAIC,EAAS/K,KAEb,IAAImB,EAAY2B,EAAQ7B,QAAQ+I,GAC5BgB,EACAC,EAAO,GAEX,GAAI9J,GAAa,EAAG,CAEnB2B,EAAQkE,OAAO7F,EAAW,GAE1B6J,EAAUlI,EAAQ7B,QAAQc,GAE1B,GAAIiJ,GAAW,EAAG,CAEjB,GAAIf,EAAO,CAEVe,EAAUA,EAAU,CACxB,CACA,KAAS,CAENA,EAAU7J,CACb,CAEE2B,EAAQkE,OAAOgE,EAAS,EAAGhB,GAE3B,GAAIc,EAAY,CAEf,GAAI9K,KAAKuC,MAAMkB,QAAQyH,UAAYlL,KAAKuC,MAAMgC,UAAU,WAAY,MAAO,CAE1EvE,KAAKuC,MAAMM,WAAWoI,KAAKzF,SAAQ,SAAUT,GAE5CkG,EAAOA,EAAKE,OAAOJ,EAAOxI,MAAMiC,QAAQ0G,SAASE,gBAAgBrG,EAAK,MAAO,MAClF,GACA,CAEGkG,EAAOA,EAAKE,OAAOnL,KAAKuC,MAAMM,WAAWoI,MAEzCA,EAAKzF,SAAQ,SAAUT,GAEtB,GAAIA,EAAIsG,MAAMjL,OAAQ,CAErB,IAAIkL,EAAOvG,EAAIsG,MAAMrE,OAAO7F,EAAW,GAAG,GAE1C4D,EAAIsG,MAAMrE,OAAOgE,EAAS,EAAGM,EAClC,CACA,GACA,CACA,CACA,EAEAhJ,EAAc7C,UAAU8L,eAAiB,SAAU9E,EAAQ+E,EAAUC,GACpE,IAAIC,EAAS1L,KAEb,IAAIiE,EAAO,EACP0H,EAAS,EACTC,EAAS,EACTjF,EAAQF,EAAO3C,aAEnB,OAAO,IAAI+H,SAAQ,SAAUC,EAASC,GAErC,UAAWP,IAAa,YAAa,CAEpCA,EAAWE,EAAOnJ,MAAMkB,QAAQuI,sBACnC,CAEE,UAAWP,IAAc,YAAa,CAErCA,EAAYC,EAAOnJ,MAAMkB,QAAQwI,uBACpC,CAEE,GAAIxF,EAAOuC,QAAS,CAInB,OAAQwC,GAEP,IAAK,SAEL,IAAK,SAEJI,GAAUF,EAAO/I,QAAQyB,YAAc,EAEvC,MAED,IAAK,QAEJwH,EAASjF,EAAMvC,YAAcsH,EAAOjJ,eAAe2B,YAEnD,MAMF,IAAKqH,EAAW,CAEfE,EAAShF,EAAMuF,WAEf,GAAIP,EAAS,GAAKA,EAAShF,EAAMwF,YAAcT,EAAO/I,QAAQyB,YAAa,CAE1E,OAAO,KACZ,CACA,CAIGH,EAAO0C,EAAMuF,WAAaN,EAE1B3H,EAAO5C,KAAKC,IAAID,KAAK+K,IAAInI,EAAMyH,EAAOnJ,MAAMM,WAAWF,QAAQwB,YAAcuH,EAAOnJ,MAAMM,WAAWF,QAAQyB,aAAc,GAE3HsH,EAAOnJ,MAAMM,WAAWmB,iBAAiBC,GAEzCyH,EAAO1H,iBAAiBC,GAExB6H,GACH,KAAS,CAENO,QAAQC,KAAK,qCAEbP,EAAO,oCACV,CACA,GACA,EAKAzJ,EAAc7C,UAAU8M,cAAgB,SAAUxH,GAEjD,IAAIY,EAAO3F,KAEX,IAAIqL,EAAQ,GAEZ1F,EAAK5C,eAAeyC,SAAQ,SAAUiB,GAErC4E,EAAM9F,KAAKkB,EAAO+F,aAAazH,GACjC,IAEC,OAAOsG,CACR,EAKA/I,EAAc7C,UAAUgN,iBAAmB,WAE1C,IAAI9G,EAAO3F,KACP0M,EAAa/G,EAAKpD,MAAMI,QAAQyB,YAGpCuI,EAAa,EAIb,GAAIhH,EAAK9C,WAAWF,QAAQiK,aAAejH,EAAK9C,WAAWF,QAAQkK,aAAc,CAEhFH,GAAc/G,EAAK9C,WAAWF,QAAQwJ,YAAcxG,EAAK9C,WAAWF,QAAQyB,WAC9E,CAECpE,KAAK+C,eAAeyC,SAAQ,SAAUiB,GAErC,IAAIqD,EAAOgD,EAAUC,EAErB,GAAItG,EAAOuC,QAAS,CAEnBc,EAAQrD,EAAOH,WAAWwD,OAAS,EAEnCgD,SAAkBrG,EAAOqG,UAAY,YAAcnH,EAAKpD,MAAMkB,QAAQuJ,eAAiBC,SAASxG,EAAOqG,UAEvG,UAAWhD,GAAS,SAAU,CAE7B,GAAIA,EAAM7I,QAAQ,MAAQ,EAAG,CAE5B8L,EAAWL,EAAa,IAAMO,SAASnD,EAC5C,KAAW,CAENiD,EAAWE,SAASnD,EACzB,CACA,KAAU,CAENiD,EAAWjD,CACf,CAEG6C,GAAcI,EAAWD,EAAWC,EAAWD,CAClD,CACA,IAEC,OAAOH,CACR,EAEArK,EAAc7C,UAAUyN,UAAY,SAAU5G,EAAYC,EAAQC,GACjE,IAAI2G,EAASnN,KAEb,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GAErC,IAAItF,EAAS0G,EAAOpH,WAAWO,EAAYC,EAAQC,GAEnD2G,EAAOnH,kBAEP,GAAImH,EAAO5K,MAAMkB,QAAQwC,kBAAoBkH,EAAO5K,MAAMgC,UAAU,mBAAoB,MAAO,CAE9F4I,EAAO5K,MAAMiC,QAAQyB,iBAAiBtC,YACzC,CAEE,GAAIwJ,EAAO5K,MAAMgC,UAAU,eAAgB,CAE1C4I,EAAO5K,MAAMiC,QAAQ2F,YAAYC,OAAO+C,EAAO5K,MAAMM,WAAWwH,WACnE,CAEE8C,EAAO9G,OAAO,MAEd,GAAI8G,EAAO5K,MAAMiC,QAAQ4I,OAAOC,WAAa,aAAc,CAE1D5G,EAAO6G,mBACV,CAEEH,EAAO1F,wBAEP0F,EAAO5K,MAAMM,WAAWuD,eAExB,GAAI+G,EAAO5K,MAAMkB,QAAQyC,cAAe,CAEvCiH,EAAO5K,MAAM4D,QAAQC,cACxB,CAEE0F,EAAQrF,EACV,GACA,EAIAnE,EAAc7C,UAAU8N,iBAAmB,SAAU9G,GAEpD,IAAItB,EAAQsB,EAAO+G,WACfxL,EAIJ,GAAImD,EAAO,QAEHnF,KAAKgD,eAAemC,EAC7B,CAICnD,EAAQhC,KAAK+C,eAAe9B,QAAQwF,GAEpC,GAAIzE,GAAS,EAAG,CAEfhC,KAAK+C,eAAeiE,OAAOhF,EAAO,EACpC,CAICA,EAAQhC,KAAK8C,QAAQ7B,QAAQwF,GAE7B,GAAIzE,GAAS,EAAG,CAEfhC,KAAK8C,QAAQkE,OAAOhF,EAAO,EAC7B,CAEC,GAAIhC,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiBtC,YACtC,CAEC3D,KAAKyH,wBAELzH,KAAKqG,QACN,EAIA/D,EAAc7C,UAAU4G,OAAS,SAAUoH,GAE1C,GAAIA,EAAO,CAEV,GAAIC,EAAUjO,UAAUkO,QAAQC,UAAU5N,KAAK2C,SAAU,CAExD3C,KAAKyH,uBACR,CAEEzH,KAAKuC,MAAMM,WAAWgL,cAEtB7N,KAAKuC,MAAMM,WAAWuD,cACxB,CAEC,GAAI,CAAC,aAAc,kBAAkBnF,QAAQjB,KAAKuC,MAAMiC,QAAQ4I,OAAOC,YAAc,EAAG,CAEvFrN,KAAKuC,MAAMiC,QAAQ4I,OAAOA,QAC5B,KAAQ,CAEN,GAAIK,EAAO,CAEVzN,KAAKuC,MAAMiC,QAAQ4I,OAAOA,QAC7B,KAAS,CAEN,GAAIpN,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiB6H,QACxC,CACA,CACA,CAEC,GAAI9N,KAAKuC,MAAMgC,UAAU,iBAAkB,CAE1CvE,KAAKuC,MAAMiC,QAAQC,cAAc2I,QACnC,CAEC,GAAIpN,KAAKuC,MAAMgC,UAAU,eAAgB,CAExCvE,KAAKuC,MAAMiC,QAAQ2F,YAAYC,OAAOpK,KAAKuC,MAAMM,WAAWwH,WAC9D,CAEC,GAAIoD,EAAO,CAEV,GAAIzN,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAO9H,QAAS,CAEjI9C,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,UACvC,CAEE,GAAI7K,KAAKuC,MAAMgC,UAAU,eAAgB,CAExCvE,KAAKuC,MAAMiC,QAAQ2F,YAAY9D,QAClC,CACA,CAECrG,KAAKuC,MAAMwL,cAAc1H,QAC1B,EAGA,IAAI8B,EAAkB,SAASA,EAAgB1B,GAC9CzG,KAAKgO,QAAUvH,EACfzG,KAAKiO,KAAO,iBACb,EAEA9F,EAAgB1I,UAAUqE,WAAa,WACtC,OAAO9D,KAAKgO,QAAQlK,YACrB,EAEAqE,EAAgB1I,UAAU+J,cAAgB,WACzC,OAAOxJ,KAAKgO,QAAQxE,eACrB,EAEArB,EAAgB1I,UAAU+N,SAAW,WACpC,OAAOxN,KAAKgO,QAAQR,UACrB,EAEArF,EAAgB1I,UAAUyO,SAAW,WACpC,IAAI7C,EAAQ,GAEZrL,KAAKgO,QAAQ3C,MAAM7F,SAAQ,SAAU8F,GACpCD,EAAM9F,KAAK+F,EAAK1B,eAClB,IAEC,OAAOyB,CACR,EAEAlD,EAAgB1I,UAAU0O,cAAgB,WACzC9B,QAAQC,KAAK,mFACb,OAAOtM,KAAKgO,QAAQhF,OACrB,EAEAb,EAAgB1I,UAAU2O,UAAY,WACrC,OAAOpO,KAAKgO,QAAQhF,OACrB,EAEAb,EAAgB1I,UAAU4O,KAAO,WAChC,GAAIrO,KAAKgO,QAAQzD,QAAS,CACzBvK,KAAKgO,QAAQlL,QAAQ0C,SAAQ,SAAUiB,GACtCA,EAAO4H,MACV,GACA,KAAQ,CACNrO,KAAKgO,QAAQK,MACf,CACA,EAEAlG,EAAgB1I,UAAU6O,KAAO,WAChC,GAAItO,KAAKgO,QAAQzD,QAAS,CACzBvK,KAAKgO,QAAQlL,QAAQ0C,SAAQ,SAAUiB,GACtCA,EAAO6H,MACV,GACA,KAAQ,CACNtO,KAAKgO,QAAQM,MACf,CACA,EAEAnG,EAAgB1I,UAAU8O,OAAS,WAClC,GAAIvO,KAAKgO,QAAQhF,QAAS,CACzBhJ,KAAKsO,MACP,KAAQ,CACNtO,KAAKqO,MACP,CACA,EAEAlG,EAAgB1I,UAAU+O,OAAS,WAClC,OAAOxO,KAAKgO,QAAQQ,QACrB,EAEArG,EAAgB1I,UAAUgP,cAAgB,WACzC,IAAIlF,EAAS,GAEb,GAAIvJ,KAAKgO,QAAQlL,QAAQ1C,OAAQ,CAChCJ,KAAKgO,QAAQlL,QAAQ0C,SAAQ,SAAUiB,GACtC8C,EAAOhE,KAAKkB,EAAOmD,eACtB,GACA,CAEC,OAAOL,CACR,EAEApB,EAAgB1I,UAAUiP,gBAAkB,WAC3C,OAAO1O,KAAKgO,QAAQ1D,kBAAkB5D,EAAS1G,KAAKgO,QAAQ1D,OAAOV,eAAiB,KACrF,EAEAzB,EAAgB1I,UAAU2I,SAAW,WACpC,OAAOpI,KAAKgO,OACb,EAEA7F,EAAgB1I,UAAUkP,SAAW,WACpC,OAAO3O,KAAKgO,QAAQzL,MAAMmI,cAAca,eAAevL,KAAKgO,QAC7D,EAEA7F,EAAgB1I,UAAUmP,SAAW,WACpC,OAAO5O,KAAKgO,QAAQzL,KACrB,EAEA4F,EAAgB1I,UAAUoP,kBAAoB,WAC7C,GAAI7O,KAAKgO,QAAQzL,MAAMgC,UAAU,SAAU,MAAO,CACjDvE,KAAKgO,QAAQzL,MAAMiC,QAAQsK,OAAOC,qBAAqB/O,KAAKgO,QAC9D,CACA,EAEA7F,EAAgB1I,UAAUuP,mBAAqB,WAC9C,GAAIhP,KAAKgO,QAAQzL,MAAMgC,UAAU,SAAU,MAAO,CACjDvE,KAAKgO,QAAQzL,MAAMiC,QAAQsK,OAAOE,mBAAmBhP,KAAKgO,QAC5D,CACA,EAEA7F,EAAgB1I,UAAUwP,qBAAuB,WAChD,GAAIjP,KAAKgO,QAAQzL,MAAMgC,UAAU,SAAU,MAAO,CACjD,OAAOvE,KAAKgO,QAAQzL,MAAMiC,QAAQsK,OAAOG,qBAAqBjP,KAAKgO,QACrE,CACA,EAEA7F,EAAgB1I,UAAUyP,qBAAuB,SAAUpP,GAC1D,GAAIE,KAAKgO,QAAQzL,MAAMgC,UAAU,SAAU,MAAO,CACjDvE,KAAKgO,QAAQzL,MAAMiC,QAAQsK,OAAOI,qBAAqBlP,KAAKgO,QAASlO,EACvE,CACA,EAEAqI,EAAgB1I,UAAU0P,KAAO,SAAUpN,EAAIkI,GAC9C,IAAImF,EAAWpP,KAAKgO,QAAQzL,MAAMmI,cAAczC,WAAWlG,GAE3D,GAAIqN,EAAU,CACbpP,KAAKgO,QAAQzL,MAAMmI,cAAcX,WAAW/J,KAAKgO,QAASoB,EAAUnF,EACtE,KAAQ,CACNoC,QAAQC,KAAK,yCAA0C8C,EACzD,CACA,EAEAjH,EAAgB1I,UAAU4P,cAAgB,WACzC,IAAIC,EAAUtP,KAAKgO,QAAQuB,aAE3B,OAAOD,EAAUA,EAAQ1F,eAAiB,KAC3C,EAEAzB,EAAgB1I,UAAU+P,cAAgB,WACzC,IAAIC,EAAUzP,KAAKgO,QAAQ0B,aAE3B,OAAOD,EAAUA,EAAQ7F,eAAiB,KAC3C,EAEAzB,EAAgB1I,UAAUkQ,iBAAmB,SAAUC,GACtD,OAAO5P,KAAKgO,QAAQ2B,iBAAiBC,EACtC,EAEAzH,EAAgB1I,UAAUoK,SAAW,WACpC,OAAO7J,KAAKgO,QAAQnE,UACrB,EAEA1B,EAAgB1I,UAAUoQ,SAAW,SAAU/F,GAC9C,IAAIgG,EAEJ,GAAIhG,IAAU,KAAM,CACnBgG,EAAS9P,KAAKgO,QAAQV,kBAAkB,KAC1C,KAAQ,CACNwC,EAAS9P,KAAKgO,QAAQ6B,SAAS/F,EACjC,CAEC,GAAI9J,KAAKgO,QAAQzL,MAAMkB,QAAQyC,cAAe,CAC7ClG,KAAKgO,QAAQzL,MAAM4D,QAAQC,aAAa,KAC1C,CAEC,OAAO0J,CACR,EAEA3H,EAAgB1I,UAAUsQ,SAAW,WACpC,OAAO/P,KAAKgO,QAAQ+B,UACrB,EAEA,IAAIrJ,EAAS,SAASA,EAAOjB,EAAK6E,GACjC,IAAI3E,EAAO3F,KAEXA,KAAKuC,MAAQ+H,EAAO/H,MACpBvC,KAAKsG,WAAab,EAClBzF,KAAKsK,OAASA,EACdtK,KAAKiO,KAAO,SACZjO,KAAK8C,QAAU,GACf9C,KAAKqL,MAAQ,GACbrL,KAAK2C,QAAU3C,KAAKsD,gBACpBtD,KAAKgQ,eAAiB,MACtBhQ,KAAKiQ,mBAAqB,MAC1BjQ,KAAKkQ,aAAe,MACpBlQ,KAAKmQ,aAAenQ,KAAKoQ,qBACzBpQ,KAAKuK,QAAU,MACfvK,KAAKqQ,QAAU,MACfrQ,KAAKsQ,SAAW,GAChBtQ,KAAKuQ,UAAY,GAGjBvQ,KAAKmF,MAAQ,GACbnF,KAAKwQ,eAAiB,GACtBxQ,KAAKyQ,cAAgB,GACrBzQ,KAAK0Q,cAAgB,GAErB1Q,KAAK2Q,uBAAyB,MAE9B3Q,KAAK4Q,SAAS5Q,KAAKsG,WAAWnB,OAE9B,GAAInF,KAAKuC,MAAMkB,QAAQoN,sBAAuB,CAC7C7Q,KAAK8Q,iBACP,CAEC9Q,KAAKwE,QAAU,GAEfxE,KAAK+Q,WAAa,CACjBC,UAAW,MACXC,aAAc,MACdC,YAAa,MACbC,QAAS,MACTC,WAAY,MACZC,YAAa,MACbC,eAAgB,MAChBC,eAAgB,MAChBC,cAAe,MACfC,aAAc,MACdC,cAAe,OAGhB1R,KAAK8J,MAAQ,KACb9J,KAAK2R,YAAc,GACnB3R,KAAK4R,SAAW,KAChB5R,KAAK6R,eAAiB,GACtB7R,KAAK8M,SAAW,KAChB9M,KAAK8R,eAAiB,GACtB9R,KAAK+R,WAAa,MAElB/R,KAAKgJ,QAAU,KAEfhJ,KAAKgS,UAAY,KAEjBhS,KAAKiS,8BAGL,GAAIxM,EAAI3C,QAAS,CAEhB9C,KAAKuK,QAAU,KAEf9E,EAAI3C,QAAQ0C,SAAQ,SAAUC,EAAKK,GAClC,IAAIoM,EAAS,IAAIxL,EAAOjB,EAAKE,GAC7BA,EAAKwM,aAAaD,EACrB,IAEEvM,EAAKyM,uBACP,KAAQ,CACN9H,EAAOhD,oBAAoBtH,KAC7B,CAEC,GAAIyF,EAAI4M,WAAarS,KAAKuC,MAAMkB,QAAQ6O,cAAgB,OAAStS,KAAKuC,MAAMgC,UAAU,WAAY,CACjGvE,KAAKuC,MAAMiC,QAAQ+N,QAAQC,UAAU,KACvC,CAECxS,KAAKyS,eAELzS,KAAK0S,mBACN,EAEAhM,EAAOjH,UAAU6D,cAAgB,WAChC,IAAIF,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGuP,aAAa,OAAQ,gBACxBvP,EAAGuP,aAAa,YAAa,QAE7B,OAAOvP,CACR,EAEAsD,EAAOjH,UAAU2Q,mBAAqB,WACrC,IAAIhN,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,4BAEjB,OAAOJ,CACR,EAEAsD,EAAOjH,UAAUqR,gBAAkB,WAClC,IAAI8B,EAAS5S,KAEbJ,OAAO+I,KAAK3I,KAAKsG,YAAYd,SAAQ,SAAUP,GAC9C,GAAI2N,EAAOC,kBAAkB5R,QAAQgE,MAAU,EAAG,CACjDoH,QAAQC,KAAK,yCAA2CsG,EAAOzN,OAASyN,EAAOtM,WAAWlB,OAAS,YAAaH,EACnH,CACA,GACA,EAEAyB,EAAOjH,UAAUmR,SAAW,SAAUzL,GACrCnF,KAAKmF,MAAQA,EACbnF,KAAKwQ,eAAiBrL,EAAQnF,KAAKuC,MAAMkB,QAAQqP,qBAAuB3N,EAAM0D,MAAM7I,KAAKuC,MAAMkB,QAAQqP,sBAAwB,CAAC3N,GAAS,GACzInF,KAAKyQ,cAAgBzQ,KAAKwQ,eAAepQ,OAAS,EAAIJ,KAAK+S,eAAiB/S,KAAKgT,aACjFhT,KAAK0Q,cAAgB1Q,KAAKwQ,eAAepQ,OAAS,EAAIJ,KAAKiT,eAAiBjT,KAAKkT,YAClF,EAGAxM,EAAOjH,UAAU8H,uBAAyB,SAAUd,GACnDzG,KAAKsK,OAAO/C,uBAAuBd,EACpC,EAGAC,EAAOjH,UAAU6H,oBAAsB,SAAUb,GAChDzG,KAAKsK,OAAOhD,oBAAoBb,EACjC,EAGAC,EAAOjH,UAAU+H,mBAAqB,WACrC,GAAIxH,KAAKuK,QAAS,CACjBvK,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAC9BA,EAAOe,oBACV,GACA,KAAQ,CACNxH,KAAKuH,uBAAuBvH,KAC9B,CACA,EAEA0G,EAAOjH,UAAUwS,4BAA8B,WAC9C,UAAWjS,KAAKsG,WAAW6M,aAAe,YAAa,CACtDnT,KAAKsG,WAAW8M,YAAcpT,KAAKsG,WAAW6M,WAC9C9G,QAAQC,KAAK,qFACf,CAEC,UAAWtM,KAAKsG,WAAW+M,QAAU,YAAa,CACjDrT,KAAKsG,WAAWgK,SAAWtQ,KAAKsG,WAAW+M,MAC3ChH,QAAQC,KAAK,8EACf,CAEC,UAAWtM,KAAKsG,WAAWgN,gBAAkB,YAAa,CACzDtT,KAAKsG,WAAWiN,cAAgBvT,KAAKsG,WAAWgN,cAChDjH,QAAQC,KAAK,oFACf,CACA,EAEA5F,EAAOjH,UAAU+T,WAAa,WAC7B,IAAI7N,EAAO3F,KACPyF,EAAME,EAAKW,WAGf,IAAI+J,EAAU5K,EAAIgO,eAAiBhO,EAAI4K,UAAY,MAAQ5K,EAAIgO,cAAgB9N,EAAKpD,MAAMkB,QAAQiQ,eAElG,GAAIrD,EAAS,CACZ,GAAIA,IAAY,KAAM,CACrB,GAAI5K,EAAIN,MAAO,CACdQ,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,WAAanO,EAAIN,OAAO,SAAUrF,GAClE6F,EAAKhD,QAAQgQ,aAAa,QAAS7S,GAAS2F,EAAIL,MACrD,GACA,KAAU,CACNO,EAAKhD,QAAQgQ,aAAa,QAASlN,EAAIL,MAC3C,CACA,KAAS,CACN,UAAWiL,GAAW,WAAY,CACjCA,EAAUA,EAAQ1K,EAAKiE,gBAEvB,GAAIyG,IAAY,MAAO,CACtBA,EAAU,EACf,CACA,CAEG1K,EAAKhD,QAAQgQ,aAAa,QAAStC,EACtC,CACA,KAAQ,CACN1K,EAAKhD,QAAQgQ,aAAa,QAAS,GACrC,CACA,EAGAjM,EAAOjH,UAAUgT,aAAe,WAC/B,IAAI9M,EAAO3F,KACPyF,EAAME,EAAKW,WAEf,MAAOX,EAAKhD,QAAQQ,WAAY,CAC/BwC,EAAKhD,QAAQiD,YAAYD,EAAKhD,QAAQQ,WACxC,CAAE,GAAIsC,EAAIoO,eAAgB,CACxBlO,EAAKhD,QAAQY,UAAUC,IAAI,0BAE3B,GAAIiC,EAAIoO,iBAAmB,OAAQ,CAClClO,EAAKhD,QAAQY,UAAUC,IAAI,8BAC9B,CACA,CAECmC,EAAKqK,eAAiBrK,EAAKmO,cAE3BnO,EAAKqK,eAAiBrK,EAAKoO,4BAE3BpO,EAAKhD,QAAQyE,YAAYzB,EAAKqK,gBAE9B,GAAIrK,EAAK4E,QAAS,CACjB5E,EAAKqO,mBACP,KAAQ,CACNrO,EAAKsO,oBACP,CAECtO,EAAK6N,aAGL,GAAI7N,EAAKpD,MAAMkB,QAAQyQ,kBAAoBvO,EAAKpD,MAAMgC,UAAU,iBAAkB,CACjFoB,EAAKpD,MAAMiC,QAAQ2P,cAAcC,iBAAiB,SAAUzO,EAAMA,EAAKhD,QACzE,CAGC,GAAI8C,EAAI4O,cAAgB1O,EAAKpD,MAAMgC,UAAU,WAAaoB,EAAKpD,MAAMgC,UAAU,QAAS,CACvF,UAAWkB,EAAI6O,0BAA4B,aAAe7O,EAAIN,MAAO,CACpEQ,EAAKpD,MAAMiC,QAAQmP,SAASY,iCAAiC9O,EAAIN,MAAOM,EAAI6O,wBAC/E,CAEE3O,EAAKpD,MAAMiC,QAAQsK,OAAOsF,iBAAiBzO,EAC7C,CAGC,GAAIA,EAAKpD,MAAMgC,UAAU,iBAAkB,CAC1CoB,EAAKpD,MAAMiC,QAAQC,cAAc2P,iBAAiBzO,EACpD,CAGC,GAAIA,EAAKpD,MAAMkB,QAAQ+Q,iBAAmB7O,EAAK4E,SAAW5E,EAAKpD,MAAMgC,UAAU,cAAe,CAC7FoB,EAAKpD,MAAMiC,QAAQuF,WAAWqK,iBAAiBzO,EACjD,CAGC,IAAKF,EAAIgP,SAAWhP,EAAIiP,aAAe/O,EAAKpD,MAAMgC,UAAU,eAAgB,CAC3EoB,EAAKpD,MAAMiC,QAAQ2F,YAAYiK,iBAAiBzO,EAClD,CAGC,GAAIA,EAAKpD,MAAMgC,UAAU,gBAAkBoB,EAAKpD,MAAMiC,QAAQmG,YAAYC,OAAO9H,QAAS,CACzF6C,EAAKpD,MAAMiC,QAAQmG,YAAYyJ,iBAAiBzO,EAClD,CAGCA,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDjP,EAAK6N,YACP,GACA,EAEA9M,EAAOjH,UAAUqU,YAAc,WAE9B,IAAInO,EAAO3F,KACPyF,EAAME,EAAKW,WACXuO,EACAC,EACAC,EAGJ,UAAWtP,EAAIuP,aAAe,WAAY,CACzCrP,EAAKhD,QAAQgS,iBAAiB,SAAS,SAAUC,GAChDnP,EAAIuP,YAAYJ,EAAGjP,EAAKiE,eAC3B,GACA,CAEC,UAAWnE,EAAIwP,gBAAkB,WAAY,CAC5CtP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnDnP,EAAIwP,eAAeL,EAAGjP,EAAKiE,eAC9B,GACA,CAEC,UAAWnE,EAAIyP,eAAiB,WAAY,CAC3CvP,EAAKhD,QAAQgS,iBAAiB,eAAe,SAAUC,GACtDnP,EAAIyP,cAAcN,EAAGjP,EAAKiE,eAC7B,GACA,CAGC,UAAWnE,EAAI0P,WAAa,WAAY,CACvCJ,EAAM,MAENpP,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdzP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnD,GAAIG,EAAK,CACRtP,EAAI0P,UAAUP,EAAGjP,EAAKiE,eAC1B,CAEGmL,EAAM,KACT,GACA,CAEC,UAAWtP,EAAI4P,cAAgB,WAAY,CAC1CR,EAAS,KAETlP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GAEnD,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAETpP,EAAI4P,aAAaT,EAAGjP,EAAKiE,eAC7B,KAAU,CAENiL,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,UAAWpP,EAAI+P,eAAiB,WAAY,CAC3CV,EAAU,KAEVnP,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACNtP,EAAI+P,cAAcZ,EAAGjP,EAAKiE,eAC9B,GAAM,IACN,GAAK,CAAEwL,QAAS,OAEdzP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnDU,aAAaR,GACbA,EAAU,IACb,GACA,CAGC,UAAWrP,EAAIuL,WAAa,WAAY,CACvCrL,EAAKoL,WAAWC,UAAYvL,EAAIuL,SAClC,CAEC,UAAWvL,EAAIwL,cAAgB,WAAY,CAC1CtL,EAAKoL,WAAWE,aAAexL,EAAIwL,YACrC,CAEC,UAAWxL,EAAIyL,aAAe,WAAY,CACzCvL,EAAKoL,WAAWG,YAAczL,EAAIyL,WACpC,CAGC,UAAWzL,EAAI6L,gBAAkB,WAAY,CAC5C3L,EAAKoL,WAAWO,eAAiB7L,EAAI6L,cACvC,CAEC,UAAW7L,EAAI8L,gBAAkB,WAAY,CAC5C5L,EAAKoL,WAAWQ,eAAiB9L,EAAI8L,cACvC,CAEC,UAAW9L,EAAI+L,eAAiB,WAAY,CAC3C7L,EAAKoL,WAAWS,cAAgB/L,EAAI+L,aACtC,CAEC,UAAW/L,EAAIgM,cAAgB,WAAY,CAC1C9L,EAAKoL,WAAWU,aAAehM,EAAIgM,YACrC,CAEC,UAAWhM,EAAIiM,eAAiB,WAAY,CAC3C/L,EAAKoL,WAAWW,cAAgBjM,EAAIiM,aACtC,CAGC,UAAWjM,EAAI0L,SAAW,WAAY,CACrCxL,EAAKoL,WAAWI,QAAU1L,EAAI0L,OAChC,CAEC,UAAW1L,EAAI2L,YAAc,WAAY,CACxCzL,EAAKoL,WAAWK,WAAa3L,EAAI2L,UACnC,CAEC,UAAW3L,EAAI4L,aAAe,WAAY,CACzC1L,EAAKoL,WAAWM,YAAc5L,EAAI4L,WACpC,CAGC,UAAW5L,EAAIgQ,YAAc,WAAY,CACxC9P,EAAKoL,WAAW0E,WAAahQ,EAAIgQ,UACnC,CAEC,UAAWhQ,EAAIiQ,aAAe,WAAY,CACzC/P,EAAKoL,WAAW2E,YAAcjQ,EAAIiQ,WACpC,CAEC,UAAWjQ,EAAIkQ,mBAAqB,WAAY,CAC/ChQ,EAAKoL,WAAW4E,kBAAoBlQ,EAAIkQ,iBAC1C,CACA,EAGAjP,EAAOjH,UAAUwU,mBAAqB,WACrC,IAAI2B,EAAS5V,KAEV,IAACyF,EAAMzF,KAAKsG,WACX/D,EAAQvC,KAAKuC,MAIjB,GAAIA,EAAMgC,UAAU,QAAS,CAC5BhC,EAAMiC,QAAQqR,KAAKzB,iBAAiBpU,KAAMA,KAAKiQ,mBACjD,CAGC,IAAKxK,EAAIqQ,mBAAqBrQ,EAAIsQ,iBAAmBtQ,EAAIuQ,aAAezT,EAAMgC,UAAU,QAAS,CAChGhC,EAAMiC,QAAQyR,KAAKC,uBAAuBlW,KAC5C,CAGC,GAAIuC,EAAMgC,UAAU,UAAW,CAC9BhC,EAAMiC,QAAQ2R,OAAO/B,iBAAiBpU,KACxC,CAGC,UAAWyF,EAAI2Q,QAAU,aAAe7T,EAAMgC,UAAU,QAAS,CAChEhC,EAAMiC,QAAQ6R,KAAKjC,iBAAiBpU,KACtC,CAGC,UAAWyF,EAAI6Q,WAAa,aAAe/T,EAAMgC,UAAU,YAAa,CACvEhC,EAAMiC,QAAQuL,SAASqE,iBAAiBpU,KAC1C,CAGC,GAAIuC,EAAMgC,UAAU,WAAY,CAC/BhC,EAAMiC,QAAQ+R,QAAQnC,iBAAiBpU,KACzC,CAGC,GAAIuC,EAAMgC,UAAU,YAAa,CAChChC,EAAMiC,QAAQgS,SAASpC,iBAAiBpU,KAC1C,CAGC,GAAIZ,EAAQmD,EAAMkB,QAAQwC,mBAAqB1D,EAAMgC,UAAU,oBAAqB,CACnFhC,EAAMiC,QAAQyB,iBAAiBmO,iBAAiBpU,KAClD,CAGC,UAAWyF,EAAIuD,SAAW,YAAa,CACtC,GAAIvD,EAAIuD,QAAS,CAChBhJ,KAAKqO,KAAK,KACb,KAAS,CACNrO,KAAKsO,KAAK,KACb,CACA,CAGC,GAAI7I,EAAIgR,SAAU,CACjB,IAAIC,EAAcjR,EAAIgR,SAAS5N,MAAM,KACrC6N,EAAYlR,SAAQ,SAAUmR,GAC7Bf,EAAOjT,QAAQY,UAAUC,IAAImT,EAChC,GACA,CAEC,GAAIlR,EAAIN,MAAO,CACdnF,KAAK2C,QAAQgQ,aAAa,kBAAmBlN,EAAIN,MACnD,CAGCnF,KAAK4W,mBAAmBnR,EAAIqH,UAAY,YAAc9M,KAAKuC,MAAMkB,QAAQuJ,eAAiBC,SAASxH,EAAIqH,WAEvG,GAAIrH,EAAImM,UAAY5R,KAAKuC,MAAMkB,QAAQoT,eAAgB,CACtD,GAAIpR,EAAImM,WAAa,MAAO,CAC3B5R,KAAK8W,mBAAmBrR,EAAImM,UAAY,YAAc5R,KAAKuC,MAAMkB,QAAQoT,eAAiB5J,SAASxH,EAAImM,UAC1G,CACA,CAEC5R,KAAKsN,oBAGLtN,KAAKqQ,QAAUrQ,KAAKsG,WAAW+J,SAAWrQ,KAAKsG,WAAW+J,UAAY,MAAQrQ,KAAKsG,WAAW+J,QAAUrQ,KAAKuC,MAAMkB,QAAQsT,SAG3H/W,KAAKsQ,gBAAkBtQ,KAAKsG,WAAWgK,UAAY,YAActQ,KAAKuC,MAAMkB,QAAQuT,aAAehX,KAAKsG,WAAWgK,SACnHtQ,KAAKuQ,iBAAmBvQ,KAAKsG,WAAWiK,WAAa,YAAcvQ,KAAKuC,MAAMkB,QAAQwT,cAAgBjX,KAAKsG,WAAWiK,UAEtHvQ,KAAKkQ,aAAa7L,MAAM6S,UAAYlX,KAAKsG,WAAW6Q,gBAAkBnX,KAAKuC,MAAMkB,QAAQ0T,cAC1F,EAEAzQ,EAAOjH,UAAUsU,0BAA4B,WAI5C,IAAI/D,EAAiB3M,SAASC,cAAc,OAC5C0M,EAAezM,UAAUC,IAAI,yBAE7BxD,KAAKiQ,mBAAqB5M,SAASC,cAAc,OACjDtD,KAAKiQ,mBAAmB1M,UAAUC,IAAI,8BAEtCwM,EAAe5I,YAAYpH,KAAKiQ,oBAEhCjQ,KAAKkQ,aAAelQ,KAAKoX,0BAEzBpX,KAAKiQ,mBAAmB7I,YAAYpH,KAAKkQ,cAEzC,OAAOF,CACR,EAGAtJ,EAAOjH,UAAU2X,wBAA0B,WACvC,IAACzR,EAAO3F,KACPyF,EAAME,EAAKW,WACX/D,EAAQoD,EAAKpD,MAGjB,IAAI0N,EAAqB5M,SAASC,cAAc,OAChD2M,EAAmB1M,UAAUC,IAAI,uBAEjC,GAAIiC,EAAI4R,cAAe,CACtB,IAAInH,EAAe7M,SAASC,cAAc,SAC1C4M,EAAa3M,UAAUC,IAAI,0BAE3B0M,EAAayE,iBAAiB,SAAS,SAAUC,GAChDA,EAAE0C,kBACFpH,EAAaqH,OAChB,IAEErH,EAAayE,iBAAiB,UAAU,WACvClP,EAAIL,MAAQ8K,EAAapQ,MACzByC,EAAMkB,QAAQ+T,mBAAmB/W,KAAKkF,EAAKpD,MAAOoD,EAAKiE,eAC1D,IAEEqG,EAAmB7I,YAAY8I,GAE/B,GAAIzK,EAAIN,MAAO,CACd5C,EAAMiC,QAAQmP,SAASC,KAAK,WAAanO,EAAIN,OAAO,SAAUsS,GAC7DvH,EAAapQ,MAAQ2X,GAAQhS,EAAIL,OAAS,QAC9C,GACA,KAAS,CACN8K,EAAapQ,MAAQ2F,EAAIL,OAAS,QACrC,CACA,KAAQ,CACN,GAAIK,EAAIN,MAAO,CACd5C,EAAMiC,QAAQmP,SAASC,KAAK,WAAanO,EAAIN,OAAO,SAAUsS,GAC7D9R,EAAK+R,yBAAyBzH,EAAoBwH,GAAQhS,EAAIL,OAAS,SAC3E,GACA,KAAS,CACNO,EAAK+R,yBAAyBzH,EAAoBxK,EAAIL,OAAS,SAClE,CACA,CAEC,OAAO6K,CACR,EAEAvJ,EAAOjH,UAAUiY,yBAA2B,SAAUtU,EAAIgC,GACzD,IAAIuS,EAAS3X,KAEb,IAAI4X,EAAWC,EAAUC,EAAQC,EAAUC,EAE3C,GAAIhY,KAAKsG,WAAW2R,gBAAkBjY,KAAKuC,MAAMgC,UAAU,UAAW,CAErEqT,EAAY5X,KAAKuC,MAAMiC,QAAQ2R,OAAO+B,aAAalY,KAAKsG,WAAW2R,gBAEnED,EAAa,SAASA,EAAW5O,GAChCuO,EAAOhH,uBAAyBvH,CACnC,EAEE2O,EAAW,CACVI,SAAU,SAASA,IAClB,OAAO/S,CACX,EACGtB,WAAY,SAASA,IACpB,OAAOV,CACX,GAGE0U,EAAS9X,KAAKsG,WAAW8R,sBAAwB,GAEjDN,SAAgBA,IAAW,WAAaA,IAAWA,EAEnDD,EAAWD,EAAUnX,KAAKT,KAAKuC,MAAMiC,QAAQ2R,OAAQ4B,EAAUD,EAAQE,GAEvE,cAAeH,IAAa,YAAc,YAAczY,EAAQyY,IAC/D,IAAK,SACJ,GAAIA,aAAoBQ,KAAM,CAC7BjV,EAAGgE,YAAYyQ,EACpB,KAAW,CACNzU,EAAGkV,UAAY,GACfjM,QAAQC,KAAK,uJAAwJuL,EAC1K,CACI,MACD,IAAK,YACL,IAAK,OACJzU,EAAGkV,UAAY,GACf,MACD,QACClV,EAAGkV,UAAYT,EAEnB,KAAQ,CACNzU,EAAGkV,UAAYlT,CACjB,CACA,EAGAsB,EAAOjH,UAAUuU,kBAAoB,WACpC,IAAIuE,EAASvY,KAEbA,KAAK2C,QAAQY,UAAUC,IAAI,uBAC3BxD,KAAK2C,QAAQgQ,aAAa,OAAQ,eAClC3S,KAAK2C,QAAQgQ,aAAa,aAAc3S,KAAKsG,WAAWlB,OAGxD,GAAIpF,KAAKsG,WAAWmQ,SAAU,CAC7B,IAAIC,EAAc1W,KAAKsG,WAAWmQ,SAAS5N,MAAM,KACjD6N,EAAYlR,SAAQ,SAAUmR,GAC7B4B,EAAO5V,QAAQY,UAAUC,IAAImT,EAChC,GACA,CAGC,IAAK3W,KAAKsG,WAAWwP,mBAAqB9V,KAAKsG,WAAW0P,aAAehW,KAAKuC,MAAMgC,UAAU,QAAS,CACtGvE,KAAKuC,MAAMiC,QAAQyR,KAAKC,uBAAuBlW,KACjD,CAECA,KAAKkQ,aAAa7L,MAAM6S,UAAYlX,KAAKsG,WAAW6Q,gBAAkBnX,KAAKuC,MAAMkB,QAAQ0T,eAEzFnX,KAAK2C,QAAQyE,YAAYpH,KAAKmQ,aAC/B,EAGAzJ,EAAOjH,UAAUuT,aAAe,SAAUrO,GACzC,OAAOA,EAAK3E,KAAKmF,MAClB,EAGAuB,EAAOjH,UAAUsT,eAAiB,SAAUpO,GAC3C,IAAI6T,EAAU7T,EACV8T,EAAYzY,KAAKwQ,eACjBpQ,EAASqY,EAAUrY,OACnBmJ,EAEJ,IAAK,IAAImP,EAAK,EAAGA,EAAKtY,EAAQsY,IAAM,CAEnCF,EAAUA,EAAQC,EAAUC,IAE5BnP,EAASiP,EAET,IAAKA,EAAS,CACb,KACH,CACA,CAEC,OAAOjP,CACR,EAGA7C,EAAOjH,UAAUyT,aAAe,SAAUvO,EAAM7E,GAC/C,GAAIE,KAAKmF,MAAO,CACfR,EAAK3E,KAAKmF,OAASrF,CACrB,CACA,EAGA4G,EAAOjH,UAAUwT,eAAiB,SAAUtO,EAAM7E,GACjD,IAAI0Y,EAAU7T,EACV8T,EAAYzY,KAAKwQ,eACjBpQ,EAASqY,EAAUrY,OAEvB,IAAK,IAAIuY,EAAM,EAAGA,EAAMvY,EAAQuY,IAAO,CAEtC,GAAIA,GAAOvY,EAAS,EAAG,CACtBoY,EAAQC,EAAUE,IAAQ7Y,CAC7B,KAAS,CACN,IAAK0Y,EAAQC,EAAUE,IAAO,CAC7B,UAAW7Y,IAAU,YAAa,CACjC0Y,EAAQC,EAAUE,IAAQ,EAC/B,KAAW,CACN,KACL,CACA,CAEGH,EAAUA,EAAQC,EAAUE,GAC/B,CACA,CACA,EAGAjS,EAAOjH,UAAU0S,aAAe,SAAU1L,GACzC,IAAId,EAAO3F,KAEX,GAAI2F,EAAKwK,aAAc,CACtBxK,EAAK7C,QAAQyC,KAAKkB,GAClBd,EAAKwK,aAAa/I,YAAYX,EAAO3C,aACvC,KAAQ,CACNuI,QAAQC,KAAK,mFACf,CACA,EAGA5F,EAAOjH,UAAUqI,cAAgB,SAAU8Q,EAAWjR,GAGrD,IAAIkR,EAAe7Y,KAAKsK,OAAOC,QAAUvK,KAAKsK,OAAOwO,kBAAkBjM,aAAelF,GAAU3H,KAAKsK,OAAOvG,oBAAoB8I,aAGhI7M,KAAK2C,QAAQ0B,MAAMsD,OAASkR,EAAe,KAE3C,GAAI7Y,KAAKuK,QAAS,CACjBvK,KAAKmQ,aAAa9L,MAAMqD,UAAYmR,EAAe7Y,KAAKgQ,eAAe+I,aAAe,IACxF,CAGC,IAAK/Y,KAAKuK,SAAWqO,IAAc,MAAO,CACzC,GAAIA,IAAc,SAAU,CAC3B5Y,KAAK2C,QAAQ0B,MAAM2U,WAAahZ,KAAK2C,QAAQkK,aAAe7M,KAAKgQ,eAAe+I,aAAe,IAClG,KAAS,CACN/Y,KAAK2C,QAAQ0B,MAAM2U,YAAchZ,KAAK2C,QAAQkK,aAAe7M,KAAKgQ,eAAe+I,cAAgB,EAAI,IACxG,CACA,CAEC/Y,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAC9BA,EAAOqB,cAAc8Q,EACvB,GACA,EAGAlS,EAAOjH,UAAUmI,mBAAqB,WACrC5H,KAAK2C,QAAQ0B,MAAM2U,WAAa,GAChChZ,KAAK2C,QAAQ0B,MAAMsD,OAAS,GAC5B3H,KAAK2C,QAAQ0B,MAAMqD,UAAY,GAC/B1H,KAAKmQ,aAAa9L,MAAMqD,UAAY,GAEpC1H,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAC9BA,EAAOmB,oBACT,GACA,EAEAlB,EAAOjH,UAAUiT,kBAAoB,WAEpC,GAAI1S,KAAKsG,WAAWsR,WAAa,SAAU,CAC1C5X,KAAKuC,MAAMM,WAAWoW,aAAejZ,IACvC,CACA,EAKA0G,EAAOjH,UAAUqE,WAAa,WAC7B,OAAO9D,KAAK2C,OACb,EAGA+D,EAAOjH,UAAUqZ,gBAAkB,WAClC,OAAO9Y,KAAKmQ,YACb,EAGAzJ,EAAOjH,UAAU+N,SAAW,WAC3B,OAAOxN,KAAKmF,KACb,EAGAuB,EAAOjH,UAAUyZ,eAAiB,WACjC,IAAKlZ,KAAKuK,QAAS,CAClB,OAAOvK,IACT,KAAQ,CACN,GAAIA,KAAK8C,QAAQ1C,OAAQ,CACxB,OAAOJ,KAAK8C,QAAQ,GAAGoW,gBAC1B,KAAS,CACN,OAAO,KACV,CACA,CACA,EAGAxS,EAAOjH,UAAU0Z,cAAgB,WAChC,IAAKnZ,KAAKuK,QAAS,CAClB,OAAOvK,IACT,KAAQ,CACN,GAAIA,KAAK8C,QAAQ1C,OAAQ,CACxB,OAAOJ,KAAK8C,QAAQ9C,KAAK8C,QAAQ1C,OAAS,GAAG+Y,eAChD,KAAS,CACN,OAAO,KACV,CACA,CACA,EAGAzS,EAAOjH,UAAUwJ,WAAa,WAC7B,OAAOjJ,KAAK8C,OACb,EAGA4D,EAAOjH,UAAUyO,SAAW,WAC3B,OAAOlO,KAAKqL,KACb,EAGA3E,EAAOjH,UAAUqH,aAAe,WAC/B,GAAI9G,KAAKsK,OAAOC,QAAS,CACxB,OAAOvK,KAAKsK,OAAOxD,cACrB,KAAQ,CACN,OAAO9G,IACT,CACA,EAGA0G,EAAOjH,UAAU+J,cAAgB,SAAU4P,GAC1C,IAAIC,EAAU,GAEd,GAAIrZ,KAAKuK,SAAW6O,EAAgB,CACnCpZ,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAC9B4S,EAAQ9T,KAAKkB,EAAO+C,cAAc,MACrC,IAEExJ,KAAKsG,WAAWxD,QAAUuW,CAC5B,CAEC,OAAOrZ,KAAKsG,UACb,EAIAI,EAAOjH,UAAU2S,sBAAwB,WACxC,IAAIpJ,EAAU,MAEdhJ,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAC9B,GAAIA,EAAOuC,QAAS,CACnBA,EAAU,IACb,CACA,IAEC,GAAIA,EAAS,CACZhJ,KAAKqO,OACLrO,KAAKsK,OAAO/H,MAAMkB,QAAQ6V,wBAAwB7Y,KAAKT,KAAKuC,MAAOvC,KAAK4J,eAAgB,MAC1F,KAAQ,CACN5J,KAAKsO,MACP,CACA,EAGA5H,EAAOjH,UAAU4O,KAAO,SAAUkL,EAAQC,GACzC,IAAKxZ,KAAKgJ,QAAS,CAClBhJ,KAAKgJ,QAAU,KAEfhJ,KAAK2C,QAAQ0B,MAAMoV,QAAU,GAE7B,GAAIzZ,KAAKsK,OAAOC,QAAS,CACxBvK,KAAKsK,OAAO8H,uBACf,CAEEpS,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAK+C,MACR,IAEE,IAAKrO,KAAKuK,SAAWvK,KAAK8J,QAAU,KAAM,CACzC9J,KAAKsN,mBACR,CAEEtN,KAAKuC,MAAMmI,cAAcjD,wBAEzB,GAAIzH,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAO9H,QAAS,CACjI9C,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,UACvC,CAEE,IAAK2O,GAAoBxZ,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAC/GvE,KAAKuC,MAAMiC,QAAQyB,iBAAiByT,uBAAuB1Z,KAAMA,KAAKgJ,QACzE,CAEE,IAAKuQ,EAAQ,CACZvZ,KAAKuC,MAAMkB,QAAQ6V,wBAAwB7Y,KAAKT,KAAKuC,MAAOvC,KAAK4J,eAAgB,KACpF,CAEE,GAAI5J,KAAKsK,OAAOC,QAAS,CACxBvK,KAAKsK,OAAOqP,kBACf,CAEE,IAAK3Z,KAAKuZ,QAAUvZ,KAAKuC,MAAMkB,QAAQyC,cAAe,CACrDlG,KAAKuC,MAAM4D,QAAQC,cACtB,CACA,CACA,EAGAM,EAAOjH,UAAU6O,KAAO,SAAUiL,EAAQC,GACzC,GAAIxZ,KAAKgJ,QAAS,CACjBhJ,KAAKgJ,QAAU,MAEfhJ,KAAK2C,QAAQ0B,MAAMoV,QAAU,OAE7BzZ,KAAKuC,MAAMmI,cAAcjD,wBAEzB,GAAIzH,KAAKsK,OAAOC,QAAS,CACxBvK,KAAKsK,OAAO8H,uBACf,CAEEpS,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKgD,MACR,IAEE,GAAItO,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAO9H,QAAS,CACjI9C,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,UACvC,CAEE,IAAK2O,GAAoBxZ,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAC/GvE,KAAKuC,MAAMiC,QAAQyB,iBAAiByT,uBAAuB1Z,KAAMA,KAAKgJ,QACzE,CAEE,IAAKuQ,EAAQ,CACZvZ,KAAKuC,MAAMkB,QAAQ6V,wBAAwB7Y,KAAKT,KAAKuC,MAAOvC,KAAK4J,eAAgB,MACpF,CAEE,GAAI5J,KAAKsK,OAAOC,QAAS,CACxBvK,KAAKsK,OAAOqP,kBACf,CAEE,IAAK3Z,KAAKuZ,QAAUvZ,KAAKuC,MAAMkB,QAAQyC,cAAe,CACrDlG,KAAKuC,MAAM4D,QAAQC,cACtB,CACA,CACA,EAEAM,EAAOjH,UAAUka,iBAAmB,WACnC,IAAIC,EAAa,EAEjB,GAAI5Z,KAAKgQ,gBAAkBhQ,KAAK8C,QAAQ1C,OAAQ,CAC/CJ,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAC9B,GAAIA,EAAOuC,QAAS,CACnB4Q,GAAcnT,EAAOoD,UACzB,CACA,IAEE7J,KAAKgQ,eAAe3L,MAAMuN,SAAWgI,EAAa,EAAI,KAEtD,GAAI5Z,KAAKsK,OAAOC,QAAS,CACxBvK,KAAKsK,OAAOqP,kBACf,CACA,CACA,EAEAjT,EAAOjH,UAAUmG,YAAc,SAAUiU,GACxC,IAAI7X,EAAQhC,KAAK8C,QAAQ7B,QAAQ4Y,GAEjC,GAAI7X,GAAS,EAAG,CACfhC,KAAK8C,QAAQkE,OAAOhF,EAAO,EAC7B,CAEC,IAAKhC,KAAK8C,QAAQ1C,OAAQ,CACzBJ,KAAKwO,QACP,CACA,EAEA9H,EAAOjH,UAAUoQ,SAAW,SAAU/F,GACrC9J,KAAK+R,WAAa,KAClB/R,KAAK8Z,eAAehQ,EACrB,EAEApD,EAAOjH,UAAUqa,eAAiB,SAAUhQ,GAC3C,GAAInI,MAAMmI,GAAQ,CACjBA,EAAQzI,KAAK0Y,MAAM/Z,KAAKuC,MAAMI,QAAQyB,YAAc,IAAM6I,SAASnD,GACrE,CAECA,EAAQzI,KAAKC,IAAItB,KAAK8M,SAAUhD,GAEhC,GAAI9J,KAAK4R,SAAU,CAClB9H,EAAQzI,KAAK+K,IAAIpM,KAAK4R,SAAU9H,EAClC,CAEC9J,KAAK8J,MAAQA,EACb9J,KAAK2R,YAAc7H,EAAQA,EAAQ,KAAO,GAE1C9J,KAAK2C,QAAQ0B,MAAMyF,MAAQ9J,KAAK2R,YAEhC,IAAK3R,KAAKuK,QAAS,CAClBvK,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKuE,UACR,GACA,CAEC,GAAI7P,KAAKsK,OAAOC,QAAS,CACxBvK,KAAKsK,OAAOqP,kBACd,CAGC,GAAI3Z,KAAKuC,MAAMgC,UAAU,iBAAkB,CAC1CvE,KAAKuC,MAAMiC,QAAQC,cAAc2I,QACnC,CACA,EAEA1G,EAAOjH,UAAUua,iBAAmB,WACnC,IAAI/O,EAAO,GAEXjL,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5B,GAAIA,EAAKvG,IAAIkV,kBAAmB,CAC/B,GAAI3O,EAAKvG,IAAIjB,aAAaoW,eAAiB,KAAM,CAChDjP,EAAK1F,KAAK+F,EAAKvG,KACfuG,EAAKvG,IAAIoV,iBACb,KAAU,CACN7O,EAAKvG,IAAIkV,kBAAoB,KACjC,CACA,CACA,IAEChP,EAAKzF,SAAQ,SAAUT,GACtBA,EAAIqV,YACN,IAECnP,EAAKzF,SAAQ,SAAUT,GACtBA,EAAIsV,eACN,GACA,EAEA3T,EAAOjH,UAAUoK,SAAW,WAC3B,IAAIC,EAAQ,EAEZ,GAAI9J,KAAKuK,QAAS,CACjBvK,KAAK8C,QAAQ0C,SAAQ,SAAUiB,GAC9B,GAAIA,EAAOuC,QAAS,CACnBc,GAASrD,EAAOoD,UACpB,CACA,GACA,KAAQ,CACNC,EAAQ9J,KAAK8J,KACf,CAEC,OAAOA,CACR,EAEApD,EAAOjH,UAAUoI,UAAY,WAC5B,OAAO7H,KAAK2C,QAAQoW,YACrB,EAEArS,EAAOjH,UAAUmX,YAAc,SAAU9J,GACxC9M,KAAK8M,SAAWA,EAChB9M,KAAK8R,eAAiBhF,EAAWA,EAAW,KAAO,GAEnD9M,KAAK2C,QAAQ0B,MAAMyI,SAAW9M,KAAK8R,eAEnC9R,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKsL,aACP,GACA,EAEAlQ,EAAOjH,UAAUqX,YAAc,SAAUlF,GACxC5R,KAAK4R,SAAWA,EAChB5R,KAAK6R,eAAiBD,EAAWA,EAAW,KAAO,GAEnD5R,KAAK2C,QAAQ0B,MAAMuN,SAAW5R,KAAK6R,eAEnC7R,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKwL,aACP,GACA,EAEApQ,EAAOjH,UAAU+O,OAAS,WACzB,IAAI8L,EAASta,KAEb,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GAGrC,GAAIuO,EAAO/P,QAAS,CACnB+P,EAAOxX,QAAQ0C,SAAQ,SAAUiB,GAChCA,EAAO+H,QACX,GACA,CAGE,GAAI8L,EAAO/X,MAAMgC,UAAU,QAAS,CACnC,GAAI+V,EAAO/X,MAAMiC,QAAQ6R,KAAKkE,YAAY9T,SAAW6T,EAAQ,CAC5DA,EAAO/X,MAAMiC,QAAQ6R,KAAKmE,YAC9B,CACA,CAEE,IAAIC,EAAYH,EAAOjP,MAAMjL,OAE7B,IAAK,IAAIsa,EAAM,EAAGA,EAAMD,EAAWC,IAAO,CACzCJ,EAAOjP,MAAM,GAAGmD,QACnB,CAEE,GAAI8L,EAAO3X,QAAQsE,WAAY,CAC9BqT,EAAO3X,QAAQsE,WAAWrB,YAAY0U,EAAO3X,QAChD,CAEE2X,EAAO3X,QAAU,MACjB2X,EAAOtK,eAAiB,MACxBsK,EAAOpK,aAAe,MACtBoK,EAAOnK,aAAe,MAEtB,GAAImK,EAAOhQ,OAAOC,QAAS,CAC1B+P,EAAOhQ,OAAO1E,YAAY0U,EAC7B,CAEEA,EAAO/X,MAAMmI,cAAc6C,iBAAiB+M,GAE5C,GAAIA,EAAO/X,MAAMkB,QAAQyC,cAAe,CACvCoU,EAAO/X,MAAM4D,QAAQC,aAAa,KACrC,CAEE0F,GACF,GACA,EAEApF,EAAOjH,UAAU4H,eAAiB,WACjC,GAAIrH,KAAK2Q,uBAAwB,CAChC3Q,KAAK2Q,wBACP,CACA,EAEAjK,EAAOjH,UAAUsQ,SAAW,WAC3B,IAAI4K,EAAU,GAEd3a,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAKA,EAAKyE,WAAY,CACrB4K,EAAQpV,KAAK+F,EAAK1B,eACrB,CACA,IAEC,OAAO+Q,EAAQva,OAASua,EAAU,IACnC,EAKAjU,EAAOjH,UAAU+M,aAAe,SAAUzH,GACzC,IAAIY,EAAO3F,KAEX,IAAIsL,EAAO,IAAIsP,EAAKjV,EAAMZ,GAE1B/E,KAAKqL,MAAM9F,KAAK+F,GAEhB,OAAOA,CACR,EAEA5E,EAAOjH,UAAU8P,WAAa,WAC7B,IAAIvN,EAAQhC,KAAKuC,MAAMmI,cAAc9D,gBAAgB5G,MACrD,OAAOgC,GAAS,EAAIhC,KAAK6a,mBAAmB7Y,EAAQ,GAAK,KAC1D,EAEA0E,EAAOjH,UAAUob,mBAAqB,SAAU7Y,GAC/C,IAAIyE,EAASzG,KAAKuC,MAAMmI,cAAc5B,iBAAiB9G,GACvD,OAAQyE,GAAUA,EAAOuC,QAAUvC,EAASzG,KAAK6a,mBAAmB7Y,EAAQ,EAC7E,EAEA0E,EAAOjH,UAAUiQ,WAAa,WAC7B,IAAI1N,EAAQhC,KAAKuC,MAAMmI,cAAc9D,gBAAgB5G,MACrD,OAAOgC,GAAS,EAAIhC,KAAK8a,mBAAmB9Y,EAAQ,GAAK,KAC1D,EAEA0E,EAAOjH,UAAUqb,mBAAqB,SAAU9Y,GAC/C,IAAIyE,EAASzG,KAAKuC,MAAMmI,cAAc5B,iBAAiB9G,GACvD,OAAQyE,GAAUA,EAAOuC,QAAUvC,EAASzG,KAAK8a,mBAAmB9Y,EAAQ,EAC7E,EAEA0E,EAAOjH,UAAU6N,kBAAoB,SAAUG,GAC9CzN,KAAK+R,WAAa,MAGlB,UAAW/R,KAAKsG,WAAWwD,QAAU,cAAgB2D,EAAO,CAC3DzN,KAAK6P,SAAS7P,KAAKsG,WAAWwD,MAChC,CAGC,GAAI9J,KAAKuC,MAAMgC,UAAU,UAAW,CACnCvE,KAAKuC,MAAMiC,QAAQsK,OAAOiM,0BAC5B,CAEC/a,KAAKgb,YAGL,GAAIhb,KAAKuC,MAAMgC,UAAU,UAAW,CACnCvE,KAAKuC,MAAMiC,QAAQsK,OAAOmM,0BAC5B,CACA,EAGAvU,EAAOjH,UAAUub,UAAY,WAC5B,IAAIrV,EAAO3F,KAEX,IAAKA,KAAK+R,WAAY,CACrB/R,KAAK2C,QAAQ0B,MAAMyF,MAAQ,GAE3BnE,EAAK0F,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAK4P,YACR,GACA,CAEC,IAAItJ,EAAW5R,KAAK2C,QAAQwJ,YAE5B,IAAKxG,EAAKmE,QAAU9J,KAAK+R,WAAY,CACpCpM,EAAK0F,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAIxB,EAAQwB,EAAKzB,WAEjB,GAAIC,EAAQ8H,EAAU,CACrBA,EAAW9H,CACf,CACA,IAEE,GAAI8H,EAAU,CACbjM,EAAKmU,eAAelI,EAAW,EAClC,CACA,CACA,EAEAlL,EAAOjH,UAAUkQ,iBAAmB,SAAUC,GAC7C,IAAIuL,EAAUnb,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAIzF,EAEJ,IAAK6U,EAAQ5Q,QAAS,CACrB,IAAK4Q,EAAQ7Q,OAAOC,QAAS,CAC5BjE,EAAa1G,OAAOgC,OAAO,GAAIuZ,EAAQ3R,iBACvClD,EAAa1G,OAAOgC,OAAO0E,EAAYsJ,GAEvCuL,EAAQ5Y,MAAMmI,cAAcwC,UAAU5G,EAAY,MAAO6U,GAASC,MAAK,SAAU3U,GAEhF,GAAIH,EAAWnB,OAASgW,EAAQhW,MAAO,CACtCgW,EAAQhW,MAAQ,KACtB,CAEKgW,EAAQ3M,SAAS4M,MAAK,WACrBtP,EAAQrF,EAAOmD,eACrB,IAAQyR,OAAM,SAAUC,GAClBvP,EAAOuP,EACb,GACA,IAAOD,OAAM,SAAUC,GAClBvP,EAAOuP,EACZ,GACA,KAAU,CACNjP,QAAQC,KAAK,8FACbP,EAAO,sGACX,CACA,KAAS,CACNM,QAAQC,KAAK,8FACbP,EAAO,sGACV,CACA,GACA,EAEArF,EAAOjH,UAAU8b,WAAa,SAAUjQ,GACvC,IAAItJ,EAAQhC,KAAKqL,MAAMpK,QAAQqK,GAE/B,GAAItJ,GAAS,EAAG,CACfhC,KAAKqL,MAAMrE,OAAOhF,EAAO,EAC3B,CACA,EAEA0E,EAAOjH,UAAUoT,kBAAoB,CAAC,QAAS,QAAS,UAAW,UAAW,QAAS,WAAY,YAAa,QAAS,WAAY,WAAY,YAAa,cAAe,YAAa,SAAU,aAAc,UAAW,WAAY,YAAa,aAAc,QAAS,aAAc,SAAU,eAAgB,YAAa,kBAAmB,iBAAkB,WAAY,SAAU,eAAgB,YAAa,UAAW,gBAAiB,cAAe,oBAAqB,cAAe,oBAAqB,mBAAoB,yBAA0B,WAAY,iBAAkB,eAAgB,qBAAsB,mBAAoB,yBAA0B,oBAAqB,0BAA2B,gBAAiB,sBAAuB,qBAAsB,2BAA4B,YAAa,WAAY,gBAAiB,UAAW,gBAAiB,mBAAoB,yBAA0B,aAAc,mBAAoB,sBAAuB,4BAA6B,YAAa,eAAgB,cAAe,UAAW,aAAc,cAAe,iBAAkB,iBAAkB,gBAAiB,eAAgB,gBAAiB,cAAe,aAAc,oBAAqB,aAAc,wBAAyB,qBAAsB,cAAe,iBAAkB,gBAAiB,YAAa,eAAgB,gBAAiB,gBAAiB,iBAAkB,iBAAkB,gBAAiB,iBAAkB,uBAAwB,eAAgB,0BAA2B,qBAAsB,yBAA0B,mBAAoB,yBAA0B,yBAA0B,QAAS,oBAAqB,aAAc,cAE1qD,YAAa,iBAAkB,uBAAwB,qBAAsB,2BAA4B,sBAAuB,4BAA6B,aAAc,iBAAkB,kBAAmB,iBAKhNnM,EAAOjH,UAAUmK,aAAe,WAC/B,IAAK5J,KAAKgS,UAAW,CACpBhS,KAAKgS,UAAY,IAAI7J,EAAgBnI,KACvC,CAEC,OAAOA,KAAKgS,SACb,EAEA,IAAIwJ,EAAa,SAASA,EAAWjZ,GAEpCvC,KAAKuC,MAAQA,EACbvC,KAAK2C,QAAU3C,KAAKyb,sBACpBzb,KAAK0b,aAAe1b,KAAK2b,qBACzB3b,KAAK4b,YAAc5b,KAAK2b,qBACxB3b,KAAK0K,cAAgB,KACrB1K,KAAK2H,OAAS,EAEd3H,KAAK6b,YAAc,MACnB7b,KAAK8b,WAAa,UAClB9b,KAAK+b,YAAc,MAEnB/b,KAAKiL,KAAO,GACZjL,KAAKqK,WAAa,GAClBrK,KAAKgc,gBAAkB,EAEvBhc,KAAKic,YAAc,GACnBjc,KAAKkc,iBAAmB,EAExBlc,KAAKmc,UAAY,EACjBnc,KAAKiD,WAAa,EAElBjD,KAAKoc,cAAgB,GAErBpc,KAAKqc,QAAU,EACfrc,KAAKsc,WAAa,EAElBtc,KAAKuc,iBAAmB,EACxBvc,KAAKwc,oBAAsB,EAE3Bxc,KAAKyc,WAAa,EAClBzc,KAAK0c,cAAgB,EAErB1c,KAAK2c,mBAAqB,GAE1B3c,KAAK4c,iBAAmB,EAExB5c,KAAK6c,uBAAyB,GAC9B7c,KAAK8c,wBAA0B,EAE/B9c,KAAK+c,eAAiB,GACtB/c,KAAKgd,kBAAoB,GAEzBhd,KAAKiZ,aAAe,MAEpBjZ,KAAKid,YAAc,MACnBjd,KAAKkd,yBAA2B,MAChCld,KAAKmd,2BAA6B,KACnC,EAIA3B,EAAW/b,UAAUgc,oBAAsB,WAC1C,IAAIrY,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,yBACjBJ,EAAGuP,aAAa,WAAY,GAE5B,OAAOvP,CACR,EAEAoY,EAAW/b,UAAUkc,mBAAqB,WACzC,IAAIvY,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,mBAEjB,OAAOJ,CACR,EAGAoY,EAAW/b,UAAUqE,WAAa,WACjC,OAAO9D,KAAK2C,OACb,EAGA6Y,EAAW/b,UAAU2d,gBAAkB,WACtC,OAAOpd,KAAK0b,YACb,EAGAF,EAAW/b,UAAU4d,eAAiB,SAAUtY,EAAKuE,GACpD,GAAIA,EAAQ,CACX,OAAOtJ,KAAKqK,WAAWpJ,QAAQ8D,EACjC,KAAQ,CACN,OAAO/E,KAAKiL,KAAKhK,QAAQ8D,EAC3B,CACA,EAGAyW,EAAW/b,UAAU6d,iBAAmB,SAAUzZ,GACjD7D,KAAK0K,cAAgB7G,CACtB,EAEA2X,EAAW/b,UAAUkE,WAAa,WACjC,IAAIgC,EAAO3F,KAEX2F,EAAK4X,gBAGL5X,EAAKhD,QAAQyE,YAAYzB,EAAK+V,cAE9B/V,EAAKkW,YAAc,KAGnBlW,EAAKhD,QAAQgS,iBAAiB,UAAU,WACvC,IAAI1Q,EAAO0B,EAAKhD,QAAQM,WAGxB,GAAI0C,EAAK1C,YAAcgB,EAAM,CAC5B0B,EAAK+E,cAAc1G,iBAAiBC,GAEpC,GAAI0B,EAAKpD,MAAMkB,QAAQ+Z,QAAS,CAC/B7X,EAAKpD,MAAMiC,QAAQiZ,UAAUC,cAAczZ,EAC/C,CAEG,GAAI0B,EAAKpD,MAAMgC,UAAU,eAAgB,CACxCoB,EAAKpD,MAAMiC,QAAQ2F,YAAYnG,iBAAiBC,EACpD,CAEG0B,EAAKpD,MAAMkB,QAAQO,iBAAiBC,EACvC,CAEE0B,EAAK1C,WAAagB,CACpB,IAGC,GAAIjE,KAAK8b,aAAe,UAAW,CAElCnW,EAAKhD,QAAQgS,iBAAiB,UAAU,WACvC,IAAIgJ,EAAMhY,EAAKhD,QAAQwZ,UACvB,IAAIyB,EAAMjY,EAAKwW,UAAYwB,EAG3B,GAAIhY,EAAKwW,WAAawB,EAAK,CAC1BhY,EAAKwW,UAAYwB,EACjBhY,EAAKkY,eAAeD,GAEpB,GAAIjY,EAAKpD,MAAMkB,QAAQqa,qBAAuB,SAAU,CACvDnY,EAAKpD,MAAMiC,QAAQuZ,KAAKC,SAASrY,EAAKhD,QAAQiK,aAAejH,EAAKhD,QAAQkK,aAAe8Q,EAC9F,CAEIhY,EAAKpD,MAAMkB,QAAQoa,eAAeF,EACtC,KAAU,CACNhY,EAAKwW,UAAYwB,CACrB,CACA,GACA,CACA,EAIAnC,EAAW/b,UAAUwe,QAAU,SAAU/V,GACxC,IAAIvC,EAAO3F,KAEX,WAAYkI,IAAY,YAAc,YAAc9I,EAAQ8I,KAAa,SAAU,CAElF,GAAIA,aAAmBgW,EAAK,CAE3B,OAAOhW,CACV,MAAS,GAAIA,aAAmBiW,EAAc,CAE3C,OAAOjW,EAAQE,YAAc,KAChC,MAAS,UAAWC,cAAgB,aAAeH,aAAmBG,YAAa,CAEhF,IAAI/C,EAAQK,EAAKsF,KAAKvK,MAAK,SAAUqE,GACpC,OAAOA,EAAIjB,eAAiBoE,CAChC,IAEG,OAAO5C,GAAS,KACnB,CACA,MAAQ,UAAW4C,GAAW,aAAeA,IAAY,KAAM,CAC7D,OAAO,KACT,KAAQ,CAEN,IAAIkW,EAASzY,EAAKsF,KAAKvK,MAAK,SAAUqE,GACrC,OAAOA,EAAIJ,KAAKgB,EAAKpD,MAAMkB,QAAQzB,QAAUkG,CAChD,IAEE,OAAOkW,GAAU,KACnB,CAIC,OAAO,KACR,EAEA5C,EAAW/b,UAAU4e,qBAAuB,SAAU1Z,GACrD,IAAIW,EAAQtF,KAAKiL,KAAKvK,MAAK,SAAUqE,GACpC,OAAOA,EAAIJ,OAASA,CACtB,IAEC,OAAOW,GAAS,KACjB,EAEAkW,EAAW/b,UAAU6e,mBAAqB,SAAU9S,EAAUlC,GAC7D,GAAIA,EAAQ,CACX,OAAOtJ,KAAKqK,WAAWmB,EACzB,KAAQ,CACN,OAAOxL,KAAKiL,KAAKO,EACnB,CACA,EAEAgQ,EAAW/b,UAAU8e,YAAc,SAAUxZ,EAAKyG,EAAUC,GAC3D,IAAI+S,EAAUxe,KAEd,IAAIye,EAAWze,KAAK0e,iBAAiBzd,QAAQ8D,GACzC4Z,EAAQ5Z,EAAIjB,aACZ8a,EACAjT,EAAS,EAEb,OAAO,IAAIE,SAAQ,SAAUC,EAASC,GACrC,GAAI0S,GAAY,EAAG,CAElB,UAAWjT,IAAa,YAAa,CACpCA,EAAWgT,EAAQjc,MAAMkB,QAAQob,mBACrC,CAEG,UAAWpT,IAAc,YAAa,CACrCA,EAAY+S,EAAQjc,MAAMkB,QAAQqb,oBACtC,CAEG,GAAItT,IAAa,UAAW,CAC3B,OAAQgT,EAAQ1C,YACf,IAAK,UACJ8C,EAASlR,EAAUjO,UAAUkO,QAAQoR,SAASJ,GAAOhB,IACrDnS,EAAWnK,KAAKE,IAAIid,EAAQ7b,QAAQwZ,UAAYyC,GAAUvd,KAAKE,IAAIid,EAAQ7b,QAAQwZ,UAAYqC,EAAQ7b,QAAQkK,aAAe+R,GAAU,SAAW,MACnJ,MACD,IAAK,UACJpT,EAAWnK,KAAKE,IAAIid,EAAQnC,QAAUoC,GAAYpd,KAAKE,IAAIid,EAAQlC,WAAamC,GAAY,SAAW,MACvG,MAEN,CAGG,IAAKhT,EAAW,CACf,GAAIiC,EAAUjO,UAAUkO,QAAQC,UAAU+Q,GAAQ,CACjDhT,EAAS+B,EAAUjO,UAAUkO,QAAQoR,SAASJ,GAAOhB,IAAMjQ,EAAUjO,UAAUkO,QAAQoR,SAASP,EAAQ7b,SAASgb,IAEjH,GAAIhS,EAAS,GAAKA,EAAS6S,EAAQ7b,QAAQkK,aAAe8R,EAAM5F,aAAc,CAC7E,OAAO,KACb,CACA,CACA,CAGG,OAAQyF,EAAQ1C,YACf,IAAK,UACJ0C,EAAQ7b,QAAQwZ,UAAYzO,EAAUjO,UAAUkO,QAAQoR,SAASJ,GAAOhB,IAAMjQ,EAAUjO,UAAUkO,QAAQoR,SAASP,EAAQ7b,SAASgb,IAAMa,EAAQ7b,QAAQwZ,UAC1J,MACD,IAAK,UACJqC,EAAQQ,mBAAmBP,EAAU,MACrC,MAIF,OAAQjT,GACP,IAAK,SACL,IAAK,SAEJ,GAAIgT,EAAQ7b,QAAQiK,aAAe4R,EAAQ7b,QAAQwZ,WAAaqC,EAAQ7b,QAAQkK,aAAc,CAC7F2R,EAAQ7b,QAAQwZ,UAAYqC,EAAQ7b,QAAQwZ,WAAawC,EAAMM,UAAYT,EAAQ7b,QAAQwZ,YAAcqC,EAAQ7b,QAAQiK,aAAe+R,EAAMM,WAAa,CACjK,KAAY,CACNT,EAAQ7b,QAAQwZ,UAAYqC,EAAQ7b,QAAQwZ,UAAYqC,EAAQ7b,QAAQkK,aAAe,CAC7F,CAEK,MAED,IAAK,SAEJ,GAAI2R,EAAQ7b,QAAQiK,aAAe4R,EAAQ7b,QAAQwZ,WAAaqC,EAAQ7b,QAAQkK,aAAc,CAC7F2R,EAAQ7b,QAAQwZ,UAAYqC,EAAQ7b,QAAQwZ,WAAaqC,EAAQ7b,QAAQiK,aAAe+R,EAAMM,WAAaN,EAAM5F,YACvH,KAAY,CACNyF,EAAQ7b,QAAQwZ,UAAYqC,EAAQ7b,QAAQwZ,UAAYqC,EAAQ7b,QAAQkK,aAAe8R,EAAM5F,YACnG,CAEK,MAGFjN,GACH,KAAS,CACNO,QAAQC,KAAK,kCACbP,EAAO,iCACV,CACA,GACA,EAIAyP,EAAW/b,UAAUyf,QAAU,SAAUva,EAAMwa,EAAkBC,GAChE,IAAIC,EAAUrf,KAEd,IAAI2F,EAAO3F,KAEX,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,GAAIoT,GAAoBE,EAAQX,iBAAiBte,OAAQ,CACxD,GAAIuF,EAAKpD,MAAMkB,QAAQ6b,WAAY,CAClC3Z,EAAK4Z,eAAe5a,EAAM,KAC9B,KAAU,CACN0a,EAAQG,oBAAmB,WAC1B7Z,EAAK4Z,eAAe5a,EACzB,GACA,CACA,KAAS,CACN,GAAI0a,EAAQ9c,MAAMkB,QAAQgc,aAAeL,EAAgB,CACxDC,EAAQ9c,MAAMmI,cAAchG,2BAA2BC,EAC3D,CACG0a,EAAQxR,cAERwR,EAAQE,eAAe5a,EAC1B,CAEEmH,GACF,GACA,EAEA0P,EAAW/b,UAAU8f,eAAiB,SAAU5a,EAAMwa,GACrD,IAAIxZ,EAAO3F,KAEX2F,EAAKpD,MAAMkB,QAAQic,YAAYjf,KAAKT,KAAKuC,MAAOoC,GAEhD3E,KAAK2f,gBAEL,GAAI3f,KAAKuC,MAAMkB,QAAQmc,SAAW5f,KAAKuC,MAAMgC,UAAU,WAAY,CAClEvE,KAAKuC,MAAMiC,QAAQob,QAAQC,OAC7B,CAEC,GAAIngB,MAAM2F,QAAQV,GAAO,CAExB,GAAI3E,KAAKuC,MAAMgC,UAAU,aAAc,CACtCvE,KAAKuC,MAAMiC,QAAQsb,UAAUC,oBAChC,CAEE,GAAI/f,KAAKuC,MAAMkB,QAAQuc,cAAgBhgB,KAAKuC,MAAMgC,UAAU,eAAgB,MAAO,CAClFvE,KAAKuC,MAAMiC,QAAQwb,aAAaC,UAAUtb,EAC7C,CAEEA,EAAKa,SAAQ,SAAUC,EAAKK,GAC3B,GAAIL,WAAeA,IAAQ,YAAc,YAAcrG,EAAQqG,MAAU,SAAU,CAClF,IAAIV,EAAM,IAAImZ,EAAIzY,EAAKE,GACvBA,EAAKsF,KAAK1F,KAAKR,EACnB,KAAU,CACNsH,QAAQC,KAAK,+FAAgG7G,EACjH,CACA,IAEEE,EAAKua,kBAAkB,MAAO,MAAOf,GAErCxZ,EAAKpD,MAAMkB,QAAQ0c,WAAW1f,KAAKT,KAAKuC,MAAOoC,EACjD,KAAQ,CACN0H,QAAQ+T,MAAM,8GAA+Gzb,IAAS,YAAc,YAAcvF,EAAQuF,GAAO,eAAgBA,EACnM,CACA,EAEA6W,EAAW/b,UAAUkgB,cAAgB,WACpC3f,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3BA,EAAIsb,MACN,IAEC,GAAIrgB,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpEvE,KAAKuC,MAAMiC,QAAQiZ,UAAU4C,MAC/B,CAECrgB,KAAKiL,KAAO,GACZjL,KAAKqK,WAAa,GAClBrK,KAAKgc,gBAAkB,EACvBhc,KAAKic,YAAc,GACnBjc,KAAKkc,iBAAmB,EAExBlc,KAAKgI,iBACN,EAEAwT,EAAW/b,UAAU6gB,UAAY,SAAUvb,EAAKwb,GAC/C,IAAIC,EAAWxgB,KAAKiL,KAAKhK,QAAQ8D,GAC7B0b,EAAczgB,KAAKqK,WAAWpJ,QAAQ8D,GAE1C,GAAI0b,GAAe,EAAG,CACrBzgB,KAAKqK,WAAWrD,OAAOyZ,EAAa,EACtC,CAEC,GAAID,GAAY,EAAG,CAClBxgB,KAAKiL,KAAKjE,OAAOwZ,EAAU,EAC7B,CAECxgB,KAAK0gB,cAAc1gB,KAAKqK,YAExBrK,KAAK2gB,oBAAmB,SAAU1V,GACjC,IAAI2V,EAAe3V,EAAKhK,QAAQ8D,GAEhC,GAAI6b,GAAgB,EAAG,CACtB3V,EAAKjE,OAAO4Z,EAAc,EAC7B,CACA,IAEC,IAAKL,EAAa,CACjBvgB,KAAKwf,oBACP,CAECxf,KAAK6gB,uBAEL7gB,KAAKuC,MAAMkB,QAAQqd,WAAWrgB,KAAKT,KAAKuC,MAAOwC,EAAI6E,gBAEnD,GAAI5J,KAAKuC,MAAMkB,QAAQsd,YAAa,CACnC/gB,KAAKuC,MAAMkB,QAAQsd,YAAYtgB,KAAKT,KAAKuC,MAAOvC,KAAKghB,UACvD,CAEC,GAAIhhB,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpEvE,KAAKuC,MAAMiC,QAAQiZ,UAAUwD,gBAAgB,KAC/C,MAAQ,GAAIjhB,KAAKuC,MAAMkB,QAAQ6b,YAActf,KAAKuC,MAAMgC,UAAU,QAAS,CACzEvE,KAAKkgB,kBAAkB,MAAO,MAAO,KACvC,KAAQ,CACN,GAAIlgB,KAAKuC,MAAMkB,QAAQ6b,YAActf,KAAKuC,MAAMgC,UAAU,QAAS,CAClEvE,KAAKkgB,kBAAkB,OAC1B,CACA,CACA,EAEA1E,EAAW/b,UAAUyhB,OAAS,SAAUvc,EAAMwc,EAAKnf,EAAOue,GAEzD,IAAIxb,EAAM/E,KAAKohB,aAAazc,EAAMwc,EAAKnf,EAAOue,GAE9C,GAAIvgB,KAAKuC,MAAMkB,QAAQmc,SAAW5f,KAAKuC,MAAMgC,UAAU,WAAY,CAClEvE,KAAKuC,MAAMiC,QAAQob,QAAQyB,OAAO,SAAUtc,EAAK,CAAEJ,KAAMA,EAAMwc,IAAKA,EAAKnf,MAAOA,GAClF,CAEC,OAAO+C,CACR,EAGAyW,EAAW/b,UAAU6hB,QAAU,SAAU3c,EAAMwc,EAAKnf,GACnD,IAAIuf,EAAUvhB,KAEX,IAAC2F,EAAO3F,KAEPiL,EAAO,GAEX,OAAO,IAAIY,SAAQ,SAAUC,EAASC,GACrCoV,EAAMI,EAAQC,cAAcL,GAE5B,IAAKzhB,MAAM2F,QAAQV,GAAO,CACzBA,EAAO,CAACA,EACX,CAIE,UAAW3C,GAAS,aAAemf,UAAcnf,IAAU,cAAgBmf,EAAK,CAC/Exc,EAAK8c,SACR,CAEE9c,EAAKa,SAAQ,SAAUkc,EAAM5b,GAC5B,IAAIf,EAAMY,EAAKub,OAAOQ,EAAMP,EAAKnf,EAAO,MACxCiJ,EAAK1F,KAAKR,EACb,IAEE,GAAIwc,EAAQhf,MAAMkB,QAAQ+Z,SAAW+D,EAAQhf,MAAMgC,UAAU,aAAc,CAC1Egd,EAAQhf,MAAMiC,QAAQiZ,UAAUwD,gBAAgB,KACnD,MAAS,GAAIM,EAAQhf,MAAMkB,QAAQ6b,YAAciC,EAAQhf,MAAMgC,UAAU,QAAS,CAC/Egd,EAAQrB,kBAAkB,MAAO,MAAO,KAC3C,KAAS,CACNqB,EAAQ/B,oBACX,CAGE,GAAI+B,EAAQhf,MAAMgC,UAAU,eAAgB,CAC3Cgd,EAAQhf,MAAMiC,QAAQ2F,YAAYC,OAAOmX,EAAQhf,MAAMM,WAAWwH,WACrE,CAEEkX,EAAQV,uBACR/U,EAAQb,EACV,GACA,EAEAuQ,EAAW/b,UAAU+hB,cAAgB,SAAUL,GAC9C,UAAWA,IAAQ,YAAa,CAC/BA,EAAMnhB,KAAKuC,MAAMkB,QAAQke,SAC3B,CAEC,GAAIR,IAAQ,MAAO,CAClBA,EAAM,IACR,CAEC,GAAIA,IAAQ,SAAU,CACrBA,EAAM,KACR,CAEC,OAAOA,CACR,EAEA3F,EAAW/b,UAAU2hB,aAAe,SAAUzc,EAAMwc,EAAKnf,EAAOue,GAC/D,IAAIxb,EAAMJ,aAAgBuZ,EAAMvZ,EAAO,IAAIuZ,EAAIvZ,GAAQ,GAAI3E,MACvD2d,EAAM3d,KAAKwhB,cAAcL,GACzBX,GAAY,EACZC,EACAmB,EAEJ,IAAK5f,GAAShC,KAAKuC,MAAMkB,QAAQ6b,YAActf,KAAKuC,MAAMkB,QAAQoe,kBAAoB,OAAQ,CAC7FD,EAAW5hB,KAAK0e,iBAEhB,GAAIf,EAAK,CACR,GAAIiE,EAASxhB,OAAQ,CACpB4B,EAAQ4f,EAAS,EACrB,KAAU,CACN,GAAI5hB,KAAKqK,WAAWjK,OAAQ,CAC3B4B,EAAQhC,KAAKqK,WAAWrK,KAAKqK,WAAWjK,OAAS,GACjDud,EAAM,KACX,CACA,CACA,KAAS,CACN,GAAIiE,EAASxhB,OAAQ,CACpB4B,EAAQ4f,EAASA,EAASxhB,OAAS,GACnCud,EAAMiE,EAASxhB,OAASJ,KAAKuC,MAAMiC,QAAQsd,KAAKC,cAAgB,MAAQ,IAC5E,CACA,CACA,CAEC,UAAW/f,IAAU,YAAa,CACjCA,EAAQhC,KAAKie,QAAQjc,EACvB,CAEC,GAAIhC,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpEvE,KAAKuC,MAAMiC,QAAQiZ,UAAUuE,iBAAiBjd,GAE9C,IAAI0Y,EAAY1Y,EAAIkd,WAAWhX,KAE/B,GAAIwS,EAAUrd,OAAS,EAAG,CAEzB,IAAK4B,GAASA,GAASyb,EAAUxc,QAAQe,KAAW,EAAG,CACtD,GAAI2b,EAAK,CACR,GAAIF,EAAU,KAAO1Y,EAAK,CACzB/C,EAAQyb,EAAU,GAClBzd,KAAKkiB,gBAAgBnd,EAAIkd,WAAWhX,KAAMlG,EAAK/C,GAAQ2b,EAC7D,CACA,KAAW,CACN,GAAIF,EAAUA,EAAUrd,OAAS,KAAO2E,EAAK,CAC5C/C,EAAQyb,EAAUA,EAAUrd,OAAS,GACrCJ,KAAKkiB,gBAAgBnd,EAAIkd,WAAWhX,KAAMlG,EAAK/C,GAAQ2b,EAC7D,CACA,CACA,KAAU,CACN3d,KAAKkiB,gBAAgBnd,EAAIkd,WAAWhX,KAAMlG,EAAK/C,GAAQ2b,EAC3D,CACA,CACA,CAEC,GAAI3b,EAAO,CACVwe,EAAWxgB,KAAKiL,KAAKhK,QAAQe,EAC/B,CAEC,GAAIA,GAASwe,GAAY,EAAG,CAC3BC,EAAczgB,KAAKqK,WAAWpJ,QAAQe,GAEtChC,KAAK2gB,oBAAmB,SAAU1V,GACjC,IAAI2V,EAAe3V,EAAKhK,QAAQe,GAEhC,GAAI4e,GAAgB,EAAG,CACtB3V,EAAKjE,OAAO2W,EAAMiD,EAAeA,EAAe,EAAG,EAAG7b,EAC1D,CACA,IAEE,GAAI0b,GAAe,EAAG,CACrBzgB,KAAKqK,WAAWrD,OAAO2W,EAAM8C,EAAcA,EAAc,EAAG,EAAG1b,EAClE,CAEE/E,KAAKiL,KAAKjE,OAAO2W,EAAM6C,EAAWA,EAAW,EAAG,EAAGzb,EACrD,KAAQ,CAEN,GAAI4Y,EAAK,CAER3d,KAAK2gB,oBAAmB,SAAU1V,GACjCA,EAAK9D,QAAQpC,EACjB,IAEG/E,KAAKqK,WAAWlD,QAAQpC,GACxB/E,KAAKiL,KAAK9D,QAAQpC,EACrB,KAAS,CACN/E,KAAK2gB,oBAAmB,SAAU1V,GACjCA,EAAK1F,KAAKR,EACd,IAEG/E,KAAKqK,WAAW9E,KAAKR,GACrB/E,KAAKiL,KAAK1F,KAAKR,EAClB,CACA,CAEC/E,KAAK0gB,cAAc1gB,KAAKqK,YAExBrK,KAAKuC,MAAMkB,QAAQ0e,SAAS1hB,KAAKT,KAAKuC,MAAOwC,EAAI6E,gBAEjD,GAAI5J,KAAKuC,MAAMkB,QAAQsd,YAAa,CACnC/gB,KAAKuC,MAAMkB,QAAQsd,YAAYtgB,KAAKT,KAAKuC,MAAOvC,KAAKghB,UACvD,CAEC,IAAKT,EAAa,CACjBvgB,KAAKwf,oBACP,CAEC,OAAOza,CACR,EAEAyW,EAAW/b,UAAU8S,QAAU,SAAUvI,EAAMjI,EAAIkI,GAClD,GAAIjK,KAAKuC,MAAMkB,QAAQmc,SAAW5f,KAAKuC,MAAMgC,UAAU,WAAY,CAClEvE,KAAKuC,MAAMiC,QAAQob,QAAQyB,OAAO,UAAWrX,EAAM,CAAEoY,QAASpiB,KAAKqd,eAAerT,GAAOqY,MAAOriB,KAAKqd,eAAetb,GAAKA,GAAIA,EAAIkI,MAAOA,GAC1I,CAECjK,KAAKsiB,cAActY,EAAMjI,EAAIkI,GAE7BjK,KAAK6gB,uBAEL7gB,KAAKuC,MAAMkB,QAAQ8e,SAAS9hB,KAAKT,KAAKuC,MAAOyH,EAAKJ,eACnD,EAEA4R,EAAW/b,UAAU6iB,cAAgB,SAAUtY,EAAMjI,EAAIkI,GACxD,IAAIuY,EAAUxiB,KAEdA,KAAKkiB,gBAAgBliB,KAAKiL,KAAMjB,EAAMjI,EAAIkI,GAC1CjK,KAAKkiB,gBAAgBliB,KAAKqK,WAAYL,EAAMjI,EAAIkI,GAEhDjK,KAAK2gB,oBAAmB,SAAU1V,GACjCuX,EAAQN,gBAAgBjX,EAAMjB,EAAMjI,EAAIkI,EAC1C,IAEC,GAAIjK,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CAEpE,IAAK0F,GAASlI,aAAc0gB,EAAO,CAClC1gB,EAAK/B,KAAKuC,MAAMM,WAAW6f,eAAe1Y,IAASjI,CACtD,CAEE,IAAI4gB,EAAU5gB,EAAGkgB,WACjB,IAAIW,EAAY5Y,EAAKiY,WAErB,GAAIU,IAAYC,EAAW,CAC1B5iB,KAAKkiB,gBAAgBS,EAAQ1X,KAAMjB,EAAMjI,EAAIkI,EAChD,KAAS,CACN,GAAI2Y,EAAW,CACdA,EAAUC,UAAU7Y,EACxB,CAEG2Y,EAAQG,UAAU9Y,EAAMjI,EAAIkI,EAC/B,CACA,CACA,EAEAuR,EAAW/b,UAAUyiB,gBAAkB,SAAUjX,EAAMjB,EAAMjI,EAAIkI,GAChE,IAAI9I,EAAW6J,EAASjK,EAAOgiB,EAE/B,GAAI/Y,IAASjI,EAAI,CAEhBZ,EAAY8J,EAAKhK,QAAQ+I,GAEzB,GAAI7I,GAAa,EAAG,CAEnB8J,EAAKjE,OAAO7F,EAAW,GAEvB6J,EAAUC,EAAKhK,QAAQc,GAEvB,GAAIiJ,GAAW,EAAG,CAEjB,GAAIf,EAAO,CACVgB,EAAKjE,OAAOgE,EAAU,EAAG,EAAGhB,EACjC,KAAW,CACNiB,EAAKjE,OAAOgE,EAAS,EAAGhB,EAC7B,CACA,KAAU,CACNiB,EAAKjE,OAAO7F,EAAW,EAAG6I,EAC9B,CACA,CAGE,GAAIiB,IAASjL,KAAK0e,iBAAkB,CAEnC3d,EAAQI,EAAY6J,EAAU7J,EAAY6J,EAC1C+X,EAAM/X,EAAU7J,EAAY6J,EAAU7J,EAAY,EAElD,IAAK,IAAI6hB,EAAMjiB,EAAOiiB,GAAOD,EAAKC,IAAO,CACxC,GAAI/X,EAAK+X,GAAM,CACdhjB,KAAKijB,SAAShY,EAAK+X,GAAMA,EAC9B,CACA,CACA,CACA,CACA,EAEAxH,EAAW/b,UAAUyjB,UAAY,WAChCljB,KAAKkf,QAAQ,GACd,EAEA1D,EAAW/b,UAAU0jB,YAAc,SAAUpe,GAC5C,OAAO/E,KAAKojB,aAAare,EAAK/E,KAAKiL,KACpC,EAEAuQ,EAAW/b,UAAU4jB,mBAAqB,SAAUte,GACnD,IAAI/C,EAAQhC,KAAK0e,iBAAiBzd,QAAQ8D,GAC1C,OAAO/C,GAAS,EAAIA,EAAQ,KAC7B,EAEAwZ,EAAW/b,UAAU6jB,eAAiB,SAAUve,EAAKwe,GACpD,IAAIvhB,EAAQhC,KAAKqjB,mBAAmBte,GAChCye,EAAU,MAEd,GAAIxhB,IAAU,OAASA,EAAQhC,KAAKkc,iBAAmB,EAAG,CACzDsH,EAAUxjB,KAAK0e,iBAAiB1c,EAAQ,EAC1C,CAEC,GAAIwhB,MAAcA,aAAmBtF,IAAQsF,EAAQvV,MAAQ,OAAQ,CACpE,OAAOjO,KAAKsjB,eAAeE,EAASD,EACtC,CAEC,OAAOC,CACR,EAEAhI,EAAW/b,UAAUijB,eAAiB,SAAU3d,EAAKwe,GACpD,IAAIvhB,EAAQhC,KAAKqjB,mBAAmBte,GAChC0e,EAAU,MAEd,GAAIzhB,EAAO,CACVyhB,EAAUzjB,KAAK0e,iBAAiB1c,EAAQ,EAC1C,CAEC,GAAIuhB,GAAWE,MAAcA,aAAmBvF,IAAQuF,EAAQxV,MAAQ,OAAQ,CAC/E,OAAOjO,KAAK0iB,eAAee,EAASF,EACtC,CAEC,OAAOE,CACR,EAEAjI,EAAW/b,UAAU2jB,aAAe,SAAUre,EAAK2e,GAClD,IAAIjF,EAEJ1Z,EAAM/E,KAAKie,QAAQlZ,GAEnB,GAAIA,EAAK,CACR0Z,EAAWiF,EAAKziB,QAAQ8D,GAExB,GAAI0Z,GAAY,EAAG,CAClB,OAAOA,CACV,CACA,CAEC,OAAO,KACR,EAEAjD,EAAW/b,UAAUuhB,QAAU,SAAU1X,EAAQqa,GAChD,IAAIpa,EAAS,GACT0B,EAAOjL,KAAK4jB,QAAQta,GAExB2B,EAAKzF,SAAQ,SAAUT,GACtB,GAAIA,EAAIkJ,MAAQ,MAAO,CACtB1E,EAAOhE,KAAKR,EAAIic,QAAQ2C,GAAa,QACxC,CACA,IAEC,OAAOpa,CACR,EAEAiS,EAAW/b,UAAUiK,cAAgB,SAAUJ,GAC9C,IAAIC,EAAS,GACT0B,EAAOjL,KAAK4jB,QAAQta,GAExB2B,EAAKzF,SAAQ,SAAUT,GACtBwE,EAAOhE,KAAKR,EAAI6E,eAClB,IAEC,OAAOL,CACR,EAEAiS,EAAW/b,UAAUokB,aAAe,SAAUva,GAC7C,IAAI2B,EAAOjL,KAAK4jB,QAAQta,GAExB,OAAO2B,EAAK7K,MACb,EAEAob,EAAW/b,UAAUqkB,kBAAoB,WACxC,IAAIC,EAAU/jB,KAEd,IAAIuC,EAAQvC,KAAKuC,MACbkB,EAAUlB,EAAMkB,QAChBqU,EAAS,GAEb,GAAIvV,EAAMgC,UAAU,QAAS,CAE5B,GAAId,EAAQugB,YAAa,CACxB,IAAIC,EAAUjkB,KAAKuC,MAAMiC,QAAQqR,KAAKqO,UAEtCD,EAAQze,SAAQ,SAAUkc,UAClBA,EAAKjb,MAChB,IAEGqR,EAAO9X,KAAKuC,MAAMiC,QAAQsd,KAAKqC,wBAAwBF,SAAWA,CACrE,CAGE,GAAIxgB,EAAQ2gB,cAAe,CAC1B,IAAIC,EAAUrkB,KAAKuC,MAAMiC,QAAQsK,OAAOwV,WAAW,KAAM,MAEzDxM,EAAO9X,KAAKuC,MAAMiC,QAAQsd,KAAKqC,wBAAwBE,SAAWA,CACrE,CAEErkB,KAAKuC,MAAMiC,QAAQuZ,KAAKwG,UAAUzM,EAAQ,KAC5C,CAECvV,EAAMiC,QAAQuZ,KAAKyG,cAAcpJ,MAAK,SAAUzW,GAC/Cof,EAAQxE,eAAe5a,EAAM,KAC/B,IAAI0W,OAAM,SAAUzG,GAAG,GACvB,EAGA4G,EAAW/b,UAAUglB,cAAgB,WACpC,IAAIliB,EAAQvC,KAAKuC,MACbkB,EAAUlB,EAAMkB,QAChBQ,EAAOjE,KAAKiD,WAEhB,GAAIQ,EAAQ2gB,cAAe,CAC1B,GAAI3gB,EAAQ6b,YAAc,UAAY/c,EAAMgC,UAAU,QAAS,CAC9DhC,EAAMiC,QAAQsd,KAAKjc,MAAM,MACzBtD,EAAMiC,QAAQsd,KAAK4C,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,MAAS,GAAI5X,EAAQqa,oBAAqB,CACvCvb,EAAMiC,QAAQuZ,KAAK4G,WAAWvJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,KAAS,CAENrb,KAAK8jB,mBACR,CACA,KAAQ,CACN9jB,KAAKkgB,kBAAkB,SACzB,CAEClgB,KAAKgE,iBAAiBC,EACvB,EAGAuX,EAAW/b,UAAUmlB,cAAgB,SAAUC,GAC9C,IAAItiB,EAAQvC,KAAKuC,MACbkB,EAAUzD,KAAKuC,MAAMkB,QACrBQ,EAAOjE,KAAKiD,WAEhB,GAAIQ,EAAQugB,YAAa,CACxB,IAAKvgB,EAAQ6b,YAAc,UAAY7b,EAAQqhB,kBAAoBviB,EAAMgC,UAAU,QAAS,CAC3FhC,EAAMiC,QAAQsd,KAAKjc,MAAM,MACzBtD,EAAMiC,QAAQsd,KAAK4C,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,MAAS,GAAI5X,EAAQqa,oBAAqB,CACvCvb,EAAMiC,QAAQuZ,KAAK4G,WAAWvJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACxE,KAAS,CAENrb,KAAK8jB,mBACR,CACA,KAAQ,CACN9jB,KAAKkgB,kBAAkB2E,EAAkB,SAAW,OACtD,CAEC7kB,KAAKgE,iBAAiBC,EACvB,EAEAuX,EAAW/b,UAAUuE,iBAAmB,SAAUC,GACjDjE,KAAKiD,WAAagB,EAClBjE,KAAK2C,QAAQM,WAAagB,EAE1B,GAAIjE,KAAKuC,MAAMkB,QAAQ+Z,QAAS,CAC/Bxd,KAAKuC,MAAMiC,QAAQiZ,UAAUC,cAAczZ,EAC7C,CAEC,GAAIjE,KAAKuC,MAAMgC,UAAU,eAAgB,CACxCvE,KAAKuC,MAAMiC,QAAQ2F,YAAYnG,iBAAiBC,EAClD,CACA,EAGAuX,EAAW/b,UAAUygB,kBAAoB,SAAU6E,EAAOC,EAAW7F,GACpE,IAAIxZ,EAAO3F,KACPuC,EAAQvC,KAAKuC,MACb0iB,EAAe,CAAC,MAAO,SAAU,OAAQ,UAAW,SAAU,QAAS,OAAQ,QAC/ErE,EAEJ,GAAI5gB,KAAKid,YAAa,CAErB,IAAKjd,KAAKkd,0BAA4B+H,EAAahkB,QAAQ8jB,GAASE,EAAahkB,QAAQjB,KAAKkd,yBAAyB6H,OAAQ,CAC9H/kB,KAAKkd,yBAA2B,CAC/B6H,MAAOA,EACPC,UAAWA,EACX7F,iBAAkBA,EAEtB,CAEE,MACF,KAAQ,CAEN,GAAIxZ,EAAKpD,MAAMgC,UAAU,QAAS,CACjCoB,EAAKpD,MAAMiC,QAAQ6R,KAAKmE,YAC3B,CAEE,IAAKuK,EAAO,CACXA,EAAQ,KACX,CAEE,GAAIxiB,EAAMkB,QAAQyhB,aAAe3iB,EAAMkB,QAAQ0hB,uBAAyB5iB,EAAMgC,UAAU,aAAc,CACrGhC,EAAMiC,QAAQsb,UAAUsF,cAC3B,CAGE,OAAQL,GACP,IAAK,MAEL,IAAK,SACJ,IAAKC,EAAW,CACf,GAAIziB,EAAMgC,UAAU,UAAW,CAC9BoB,EAAK+a,cAAcne,EAAMiC,QAAQsK,OAAOA,OAAOnJ,EAAKsF,MAC1D,KAAY,CACNtF,EAAK+a,cAAc/a,EAAKsF,KAAKoa,MAAM,GACzC,CACA,KAAW,CACNL,EAAY,KACjB,CAEG,IAAK,OACJ,IAAKA,EAAW,CACf,GAAIziB,EAAMgC,UAAU,QAAS,CAC5BhC,EAAMiC,QAAQqR,KAAKA,KAAK7V,KAAKqK,WACnC,CACA,KAAW,CACN2a,EAAY,KACjB,CAGIhlB,KAAK6gB,uBAGN,IAAK,UACJ7gB,KAAKslB,mBAEN,IAAK,SACJ,IAAKN,EAAW,CACf,GAAIhlB,KAAKuC,MAAMgC,UAAU,cAAe,CACvC,GAAIhC,EAAMiC,QAAQ+gB,WAAWC,WAAY,CACxC,IAAKjjB,EAAMiC,QAAQ+gB,WAAWE,kBAAmB,CAChDljB,EAAMiC,QAAQ+gB,WAAWG,gBAAgB1lB,KAAK2lB,sBACtD,CAEO/E,EAAere,EAAMiC,QAAQ+gB,WAAWE,kBAExC7E,EAAejb,EAAKigB,eAAerjB,EAAMiC,QAAQ+gB,WAAW3B,QAAQ5jB,KAAK0e,eAAekC,EAAe,IAAKA,GAE5G,GAAIA,IAAiB,KAAM,CAC1Bre,EAAMiC,QAAQ+gB,WAAWG,gBAAgB9E,EACjD,CACA,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,CAEG,IAAK,QACJ,IAAKA,EAAW,CACf,GAAIziB,EAAMkB,QAAQ+Z,SAAWjb,EAAMgC,UAAU,aAAc,CAE1D,IAAKhC,EAAMiC,QAAQiZ,UAAUgI,kBAAmB,CAC/CljB,EAAMiC,QAAQiZ,UAAUiI,gBAAgB1lB,KAAK2lB,sBACpD,CAEM/E,EAAere,EAAMiC,QAAQiZ,UAAUgI,kBAEvC7E,EAAejb,EAAKigB,eAAerjB,EAAMiC,QAAQiZ,UAAUmG,QAAQ5jB,KAAK0e,eAAekC,EAAe,IAAKA,GAE3G,GAAIA,IAAiB,KAAM,CAC1Bre,EAAMiC,QAAQiZ,UAAUiI,gBAAgB9E,EAC/C,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,CAEG,IAAK,OAEJ,IAAKA,EAAW,CACf,GAAIziB,EAAMkB,QAAQyH,UAAY3I,EAAMgC,UAAU,YAAa,CAC1D,IAAKhC,EAAMiC,QAAQ0G,SAASua,kBAAmB,CAC9CljB,EAAMiC,QAAQ0G,SAASwa,gBAAgB1lB,KAAK2lB,sBACnD,CAEM/E,EAAere,EAAMiC,QAAQ0G,SAASua,kBAEtC7E,EAAejb,EAAKigB,eAAerjB,EAAMiC,QAAQ0G,SAAS0Y,QAAQ5jB,KAAK0e,eAAekC,EAAe,IAAKA,GAE1G,GAAIA,IAAiB,KAAM,CAC1Bre,EAAMiC,QAAQ0G,SAASwa,gBAAgB9E,EAC9C,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,CAEI,GAAIziB,EAAMkB,QAAQ6b,YAAc/c,EAAMgC,UAAU,UAAY4a,EAAkB,CAC7E,GAAI5c,EAAMiC,QAAQsd,KAAKzU,WAAa,QAAS,CAC5C9K,EAAMiC,QAAQsd,KAAKjc,OACzB,CACA,CAEG,IAAK,OACJ,IAAKmf,EAAW,CACf,GAAIziB,EAAMkB,QAAQ6b,YAAc/c,EAAMgC,UAAU,QAAS,CAExD,IAAKhC,EAAMiC,QAAQsd,KAAK2D,kBAAmB,CAC1CljB,EAAMiC,QAAQsd,KAAK4D,gBAAgB1lB,KAAK2lB,sBAC/C,CAEM/E,EAAere,EAAMiC,QAAQsd,KAAK2D,kBAElC,GAAIljB,EAAMiC,QAAQsd,KAAKzU,WAAa,QAAS,CAC5C9K,EAAMiC,QAAQsd,KAAK+D,WAAW7lB,KAAK0e,eAAekC,EAAe,GAAGxgB,OAC3E,CAEMwgB,EAAejb,EAAKigB,eAAerjB,EAAMiC,QAAQsd,KAAK8B,QAAQ5jB,KAAK0e,eAAekC,EAAe,IAAKA,GAEtG,GAAIA,IAAiB,KAAM,CAC1Bre,EAAMiC,QAAQsd,KAAK4D,gBAAgB9E,EAC1C,CACA,CACA,KAAW,CACNoE,EAAY,KACjB,EAGE,GAAItX,EAAUjO,UAAUkO,QAAQC,UAAUjI,EAAKhD,SAAU,CACxD,GAAIwc,EAAkB,CACrBxZ,EAAK6Z,oBACT,KAAU,CAEN,GAAIuF,IAAU,OAAS/kB,KAAKuC,MAAMkB,QAAQyC,cAAe,CACxDlG,KAAKuC,MAAM4D,QAAQ2f,YACxB,CAEIngB,EAAKogB,cAEL,GAAIxjB,EAAMkB,QAAQuiB,uBAAwB,CACzCrgB,EAAKpD,MAAMmI,cAAcrE,OAAO,KACrC,CACA,CACA,CAEE,GAAI9D,EAAMgC,UAAU,eAAgB,CACnChC,EAAMiC,QAAQ2F,YAAYC,OAAOpK,KAAKqK,WACzC,CACA,CACA,EAGAmR,EAAW/b,UAAUohB,qBAAuB,WAC3C,IAAIoF,EAAUjmB,KAEd,GAAIA,KAAKiZ,aAAc,CACtBjZ,KAAKqK,WAAW7E,SAAQ,SAAUT,GACjC,IAAIuG,EAAOvG,EAAImhB,QAAQD,EAAQhN,cAE/B,GAAI3N,EAAM,CACTA,EAAK6a,mBACT,CACA,GACA,CACA,EAEA3K,EAAW/b,UAAUihB,cAAgB,SAAUrW,GAC9CrK,KAAKqK,WAAaA,EAClBrK,KAAKgc,gBAAkBhc,KAAKqK,WAAWjK,MACxC,EAGAob,EAAW/b,UAAU6lB,iBAAmB,WACvCtlB,KAAKic,YAAc,GAEnBjc,KAAKic,YAAY1W,KAAKvF,KAAKqK,WAAWgb,MAAM,IAE5CrlB,KAAKkc,iBAAmBlc,KAAKic,YAAY,GAAG7b,OAE5C,GAAIJ,KAAKuC,MAAMgC,UAAU,cAAe,CACvCvE,KAAKuC,MAAMiC,QAAQ+gB,WAAWG,gBAAgB,EAChD,CAEC,GAAI1lB,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpEvE,KAAKuC,MAAMiC,QAAQiZ,UAAUiI,gBAAgB,EAC/C,CAEC,GAAI1lB,KAAKuC,MAAMkB,QAAQ6b,YAActf,KAAKuC,MAAMgC,UAAU,QAAS,CAClEvE,KAAKuC,MAAMiC,QAAQsd,KAAK4D,gBAAgB,EAC1C,CACA,EAEAlK,EAAW/b,UAAUkmB,oBAAsB,WAC1C,OAAO3lB,KAAKic,YAAY7b,MACzB,EAGAob,EAAW/b,UAAUmmB,eAAiB,SAAU3J,EAAaja,GAE5D,IAAIuH,EAAS,KAEb,GAAIvH,UAAgBhC,KAAKic,YAAYja,IAAU,YAAa,CAC3DhC,KAAKic,YAAYja,GAASia,EAC1B1S,EAAS,IACX,KAAQ,CACNvJ,KAAKic,YAAY1W,KAAK0W,GACtB1S,EAASvH,EAAQhC,KAAKic,YAAY7b,OAAS,CAC7C,CAEC,GAAI4B,GAAShC,KAAKic,YAAY7b,OAAS,EAAG,CACzCJ,KAAKkc,iBAAmBlc,KAAKic,YAAYjc,KAAKic,YAAY7b,OAAS,GAAGA,MACxE,CAEC,OAAOmJ,CACR,EAEAiS,EAAW/b,UAAUif,eAAiB,SAAU1c,GAC/C,UAAWA,GAAS,YAAa,CAChC,OAAOhC,KAAKic,YAAY7b,OAASJ,KAAKic,YAAYjc,KAAKic,YAAY7b,OAAS,GAAK,EACnF,KAAQ,CACN,OAAOJ,KAAKic,YAAYja,IAAU,EACpC,CACA,EAEAwZ,EAAW/b,UAAU2mB,eAAiB,SAAUC,GAC/C,IAAIC,EAAUtmB,KAAK2C,QAAQwZ,UACvBoK,EAAavmB,KAAK2C,QAAQkK,aAAeyZ,EACzCE,EAAW,MACXC,EAAS,EACTC,EAAY,EACZzb,EAAOjL,KAAK0e,iBAEhB,GAAI2H,EAAU,CAEbrmB,KAAK0e,iBACL,IAAK,IAAI5Y,EAAI9F,KAAKqc,QAASvW,GAAK9F,KAAKsc,WAAYxW,IAAK,CACrD,GAAImF,EAAKnF,GAAI,CACZ,IAAK0gB,EAAU,CACd,GAAIF,EAAUrb,EAAKnF,GAAGhC,aAAamb,WAAa,EAAG,CAClDwH,EAAS3gB,CACf,KAAY,CACN0gB,EAAW,KAEX,GAAID,EAAatb,EAAKnF,GAAGhC,aAAamb,WAAa,EAAG,CACrDyH,EAAY5gB,CACnB,KAAa,CACN,KACP,CACA,CACA,KAAW,CACN,GAAIygB,EAAatb,EAAKnF,GAAGhC,aAAamb,WAAa,EAAG,CACrDyH,EAAY5gB,CAClB,KAAY,CACN,KACN,CACA,CACA,CACA,CACA,KAAQ,CACN2gB,EAASzmB,KAAKqc,QACdqK,EAAY1mB,KAAKsc,UACnB,CAEC,OAAOrR,EAAKoa,MAAMoB,EAAQC,EAAY,EACvC,EAGAlL,EAAW/b,UAAUkhB,mBAAqB,SAAUvX,GACnDpJ,KAAKic,YAAYzW,QAAQ4D,GAEzBpJ,KAAKkc,iBAAmBlc,KAAKic,YAAYjc,KAAKic,YAAY7b,OAAS,GAAGA,MACvE,EAGAob,EAAW/b,UAAUmkB,QAAU,SAAUta,GACxC,IAAI2B,EAEJ,OAAQ3B,GACP,IAAK,SACJ2B,EAAOjL,KAAKqK,WACZ,MAED,IAAK,UACJY,EAAOjL,KAAKuC,MAAMM,WAAW6b,iBAC7B,MAED,IAAK,UACJzT,EAAOjL,KAAKomB,eAAe,MAC3B,MAED,IAAK,WACJnb,EAAOjL,KAAKuC,MAAMiC,QAAQsb,UAAU6G,aACpC,MAED,QACC1b,EAAOjL,KAAKiL,KAGd,OAAOA,CACR,EAKAuQ,EAAW/b,UAAU+f,mBAAqB,SAAUpW,GACnD,GAAIpJ,KAAK4mB,iBAAmB,UAAW,CAEtC,GAAI5mB,KAAKid,YAAa,CACrB,GAAI7T,EAAU,CACbA,GACJ,KAAU,CACNpJ,KAAKmd,2BAA6B,IACtC,CACA,KAAS,CACN,IAAIhB,EAAYnc,KAAK2C,QAAQwZ,UAC7B,IAAIsK,EAAS,MACb,IAAII,EAAY,MAEhB,IAAI5iB,EAAOjE,KAAKiD,WAEhB,IAAIgI,EAAOjL,KAAK0e,iBAEhB,IAAK,IAAI5Y,EAAI9F,KAAKqc,QAASvW,GAAK9F,KAAKsc,WAAYxW,IAAK,CAErD,GAAImF,EAAKnF,GAAI,CACZ,IAAIghB,EAAO3K,EAAYlR,EAAKnF,GAAGhC,aAAamb,UAE5C,GAAI4H,IAAc,OAASxlB,KAAKE,IAAIulB,GAAQD,EAAW,CACtDA,EAAYC,EACZL,EAAS3gB,CACf,KAAY,CACN,KACN,CACA,CACA,CAEG,GAAIsD,EAAU,CACbA,GACJ,CAEGpJ,KAAKgf,mBAAmByH,IAAW,MAAQzmB,KAAKkc,iBAAmB,EAAIuK,EAAQ,KAAMI,GAAa,GAElG7mB,KAAKgE,iBAAiBC,EACzB,CACA,KAAQ,CACNjE,KAAK+lB,cAEL,GAAI3c,EAAU,CACbA,GACH,CACA,CACA,EAEAoS,EAAW/b,UAAU8d,cAAgB,WAEpC,GAAIvd,KAAKuC,MAAMkB,QAAQsjB,WAAY,CAElC/mB,KAAK8b,WAAa,UAElB,GAAI9b,KAAKuC,MAAMI,QAAQkK,cAAgB7M,KAAKuC,MAAMkB,QAAQkE,OAAQ,CACjE3H,KAAK+b,YAAc,IACtB,KAAS,CACN/b,KAAK+b,YAAc,KACtB,CACA,KAAQ,CACN/b,KAAK8b,WAAa,SACpB,CACA,EAEAN,EAAW/b,UAAUmnB,cAAgB,WACpC,OAAO5mB,KAAK8b,UACb,EAEAN,EAAW/b,UAAUsmB,YAAc,WAElC/lB,KAAKuC,MAAMkB,QAAQujB,cAAcvmB,KAAKT,KAAKuC,OAE3CvC,KAAK2C,QAAQwZ,UAAY,EAEzB,OAAQnc,KAAK8b,YACZ,IAAK,UACJ9b,KAAKinB,gBACL,MAED,IAAK,UACJjnB,KAAKgf,qBACL,MAGF,GAAIhf,KAAK6b,YAAa,CACrB,GAAI7b,KAAKkc,iBAAkB,CAC1Blc,KAAK6b,YAAc,MACnB7b,KAAKuC,MAAMiC,QAAQ4I,OAAOA,QAC7B,KAAS,CACNpN,KAAKknB,mBACR,CACA,CAEC,GAAIlnB,KAAKuC,MAAMgC,UAAU,iBAAkB,CAC1CvE,KAAKuC,MAAMiC,QAAQC,cAAc2I,QACnC,CAEC,IAAKpN,KAAKkc,iBAAkB,CAC3B,GAAIlc,KAAKuC,MAAMkB,QAAQ0jB,YAAa,CAEnCnnB,KAAKuC,MAAMkB,QAAQ0jB,YAAYxU,aAAa,wBAAyB3S,KAAK8b,YAE1E9b,KAAK8D,aAAasD,YAAYpH,KAAKuC,MAAMkB,QAAQ0jB,aACjDnnB,KAAKuC,MAAMkB,QAAQ0jB,YAAY9iB,MAAMyF,MAAQ9J,KAAKuC,MAAMmI,cAAcb,WAAa,IACtF,CACA,CAEC7J,KAAKuC,MAAMkB,QAAQ2jB,eAAe3mB,KAAKT,KAAKuC,MAC7C,EAGAiZ,EAAW/b,UAAUwnB,cAAgB,WACpCjnB,KAAKqnB,mBAEL,GAAIrnB,KAAKkc,iBAAkB,CAC1Blc,KAAKsnB,kCACP,KAAQ,CACNtnB,KAAKknB,mBACP,CACA,EAEA1L,EAAW/b,UAAU6nB,iCAAmC,WACvD,IAAI3hB,EAAO3F,KACP2C,EAAU3C,KAAK0b,aACf6L,EAAmB,KAEvB5hB,EAAK+Y,iBAAiBlZ,SAAQ,SAAUT,EAAK/C,GAC5C2D,EAAKsd,SAASle,EAAK/C,GACnBW,EAAQyE,YAAYrC,EAAIjB,cACxBiB,EAAIpB,WAAW,MAEf,GAAIoB,EAAIkJ,OAAS,QAAS,CACzBsZ,EAAmB,KACtB,CACA,IAEC,GAAIA,EAAkB,CACrB5kB,EAAQ0B,MAAMyI,SAAWnH,EAAKpD,MAAMmI,cAAcb,WAAa,IACjE,KAAQ,CACNlH,EAAQ0B,MAAMyI,SAAW,EAC3B,CACA,EAGA0O,EAAW/b,UAAUynB,kBAAoB,WACxC,GAAIlnB,KAAKuC,MAAMkB,QAAQ0jB,YAAa,CACnCnnB,KAAK0b,aAAarX,MAAMoV,QAAU,MACpC,KAAQ,CACNzZ,KAAK0b,aAAarX,MAAMyI,SAAW9M,KAAKuC,MAAMmI,cAAcb,WAAa,IAG3E,CACA,EAEA2R,EAAW/b,UAAU4nB,iBAAmB,WACvC,IAAI1kB,EAAU3C,KAAK0b,aAEnB,GAAI1b,KAAKuC,MAAMkB,QAAQ0jB,aAAennB,KAAKuC,MAAMkB,QAAQ0jB,YAAYlgB,WAAY,CAChFjH,KAAKuC,MAAMkB,QAAQ0jB,YAAYlgB,WAAWrB,YAAY5F,KAAKuC,MAAMkB,QAAQ0jB,YAC3E,CAGC,MAAOxkB,EAAQQ,WAAY,CAC1BR,EAAQiD,YAAYjD,EAAQQ,WAC9B,CAAER,EAAQ0B,MAAM2U,WAAa,GAC5BrW,EAAQ0B,MAAMmjB,cAAgB,GAC9B7kB,EAAQ0B,MAAMyI,SAAW,GACzBnK,EAAQ0B,MAAMqD,UAAY,GAC1B/E,EAAQ0B,MAAMoV,QAAU,GACxB9W,EAAQ0B,MAAMojB,WAAa,GAE3BznB,KAAKmc,UAAY,EACjBnc,KAAKiD,WAAa,EAClBjD,KAAKqc,QAAU,EACfrc,KAAKsc,WAAa,EAClBtc,KAAKyc,WAAa,EAClBzc,KAAK0c,cAAgB,CACtB,EAEAlB,EAAW/b,UAAUwjB,SAAW,SAAUle,EAAK/C,GAC9C,IAAI2c,EAAQ5Z,EAAIjB,aAEhB,GAAI9B,EAAQ,EAAG,CACd2c,EAAMpb,UAAUC,IAAI,sBACpBmb,EAAMpb,UAAUmkB,OAAO,oBACzB,KAAQ,CACN/I,EAAMpb,UAAUC,IAAI,qBACpBmb,EAAMpb,UAAUmkB,OAAO,qBACzB,CACA,EAGAlM,EAAW/b,UAAUuf,mBAAqB,SAAUxT,EAAUmc,EAAWhc,GACxE,IAAIhG,EAAO3F,KACP2C,EAAUgD,EAAK+V,aACfkM,EAASjiB,EAAKhD,QACdklB,EAAS,EACTC,EAAa,EACbC,EAAe,EACfjiB,EAAI,EACJyhB,EAAmB,KACnBtc,EAAOtF,EAAK+Y,iBAEhBlT,EAAWA,GAAY,EAEvBG,EAASA,GAAU,EAEnB,IAAKH,EAAU,CACd7F,EAAK0hB,kBACP,KAAQ,CACN,MAAO1kB,EAAQQ,WAAY,CAC1BR,EAAQiD,YAAYjD,EAAQQ,WAC/B,CACE,IAAI6kB,GAAkBriB,EAAKuW,iBAAmB1Q,EAAW,GAAK7F,EAAKyW,cAEnE,GAAI4L,EAAiBriB,EAAKgC,OAAQ,CACjC6D,GAAYnK,KAAK4mB,MAAMtiB,EAAKgC,OAASqgB,GAAkBriB,EAAKyW,eAE5D,GAAI5Q,EAAW,EAAG,CACjBA,EAAW,CACf,CACA,CAGEqc,EAASxmB,KAAK+K,IAAI/K,KAAKC,IAAID,KAAK0Y,MAAMpU,EAAKiX,iBAAmBjX,EAAKyW,eAAgBzW,EAAKmX,yBAA0BtR,GAClHA,GAAYqc,CACd,CAEC,GAAIliB,EAAKuW,kBAAoBxO,EAAUjO,UAAUkO,QAAQC,UAAUjI,EAAKhD,SAAU,CAEjFgD,EAAK0W,QAAU7Q,EAEf7F,EAAK2W,WAAa9Q,EAAW,EAE7B,OAAQsc,GAAcniB,EAAKgC,OAAShC,EAAKiX,kBAAoB9W,EAAIH,EAAKkX,yBAA2BlX,EAAK2W,WAAa3W,EAAKuW,iBAAmB,EAAG,CAC7I,IAAIla,EAAQ2D,EAAK2W,WAAa,EAC1BvX,EAAMkG,EAAKjJ,GACXkmB,EAAY,EAEhBviB,EAAKsd,SAASle,EAAK/C,GAEnBW,EAAQyE,YAAYrC,EAAIjB,cAExBiB,EAAIpB,aAEJ,IAAKoB,EAAIkV,kBAAmB,CAC3BlV,EAAIojB,gBAAgB,KACxB,CAUGD,EAAYnjB,EAAI8C,YAEhB,GAAI/B,EAAI+hB,EAAQ,CACfE,GAAgBG,CACpB,KAAU,CACNJ,GAAcI,CAClB,CAEG,GAAIA,EAAYloB,KAAK4c,iBAAkB,CACtC5c,KAAK4c,iBAAmBsL,EAAY,CACxC,CAEG,GAAInjB,EAAIkJ,OAAS,QAAS,CACzBsZ,EAAmB,KACvB,CAEG5hB,EAAK2W,aACLxW,GACH,CAEE,IAAK0F,EAAU,CACdxL,KAAKyc,WAAa,EAElB9W,EAAKyW,cAAgB/a,KAAK0Y,OAAO+N,EAAaC,GAAgBjiB,GAC9DH,EAAK+W,cAAgB/W,EAAKyW,eAAiBzW,EAAKuW,iBAAmBvW,EAAK2W,WAAa,GAErF3W,EAAKyiB,iBAAmBL,EAAeD,EAAaniB,EAAK+W,cAAgB/W,EAAKgC,MACjF,KAAS,CACNhC,EAAK8W,YAAckL,EAAYhiB,EAAKwW,UAAY4L,EAAepiB,EAAKyW,cAAgBpc,KAAKqc,QAAU1Q,EACnGhG,EAAK+W,cAAgB/W,EAAK2W,YAAc3W,EAAKuW,iBAAmB,EAAI,EAAI7a,KAAKC,IAAIqE,EAAKyiB,iBAAmBziB,EAAK8W,WAAaqL,EAAaC,EAAc,EACzJ,CAEEplB,EAAQ0B,MAAM2U,WAAarT,EAAK8W,WAAa,KAC7C9Z,EAAQ0B,MAAMmjB,cAAgB7hB,EAAK+W,cAAgB,KAEnD,GAAIiL,EAAW,CACd3nB,KAAKmc,UAAYxW,EAAK8W,WAAasL,EAAepc,GAAU3L,KAAK2C,QAAQwB,YAAcnE,KAAK2C,QAAQyB,YAAcpE,KAAK2C,QAAQoW,aAAe/Y,KAAK2C,QAAQkK,aAAe,EAC7K,CAEE7M,KAAKmc,UAAY9a,KAAK+K,IAAIpM,KAAKmc,UAAWnc,KAAK2C,QAAQiK,aAAe5M,KAAK2H,QAG3E,GAAI3H,KAAK2C,QAAQwB,YAAcnE,KAAK2C,QAAQwJ,aAAewb,EAAW,CACrE3nB,KAAKmc,WAAanc,KAAK2C,QAAQoW,aAAe/Y,KAAK2C,QAAQkK,YAC9D,CAEE7M,KAAKuc,iBAAmBvc,KAAKmc,UAC7Bnc,KAAKwc,oBAAsBxc,KAAKmc,UAEhCyL,EAAOzL,UAAYnc,KAAKmc,UAExBxZ,EAAQ0B,MAAMyI,SAAWya,EAAmB5hB,EAAKpD,MAAMmI,cAAcb,WAAa,KAAO,GAEzF,GAAIlE,EAAKpD,MAAMkB,QAAQ+Z,QAAS,CAC/B,GAAI7X,EAAKpD,MAAMiC,QAAQ4I,OAAOC,WAAa,eAAiB1H,EAAKuW,kBAAoBvW,EAAKpD,MAAMiC,QAAQiZ,UAAU4K,cAAe,CAChI1iB,EAAK+V,aAAarX,MAAMyI,SAAWnH,EAAKpD,MAAMmI,cAAcb,UAChE,CACA,CACA,KAAQ,CACN7J,KAAKknB,mBACP,CAEC,IAAKlnB,KAAK+b,YAAa,CACtB/b,KAAKgI,iBACP,CACA,EAGAwT,EAAW/b,UAAUoe,eAAiB,SAAUD,GAC/C,IAAI0K,EAAUtoB,KAAKmc,UAAYnc,KAAKuc,iBACpC,IAAIgM,EAAavoB,KAAKmc,UAAYnc,KAAKwc,oBACvC,IAAIgM,EAASxoB,KAAK4c,iBAAmB,EAErC,IAAK0L,EAAUE,GAAUD,EAAaC,EAAQ,CAE7C,IAAIvkB,EAAOjE,KAAKiD,WAChBjD,KAAKgf,mBAAmB3d,KAAK0Y,MAAM/Z,KAAK2C,QAAQwZ,UAAYnc,KAAK2C,QAAQiK,aAAe5M,KAAKkc,mBAC7Flc,KAAKgE,iBAAiBC,EACxB,KAAQ,CAEN,GAAI2Z,EAAK,CAER,GAAI0K,EAAU,EAAG,CAEhBtoB,KAAKyoB,YAAYH,EACrB,CAEG,GAAIC,EAAa,EAAG,CAGnB,GAAIvoB,KAAKooB,iBAAmBpoB,KAAKmc,UAAYnc,KAAK4c,iBAAkB,CACnE5c,KAAK0oB,kBAAkBH,EAC5B,KAAW,CACNvoB,KAAKwc,oBAAsBxc,KAAKmc,SACrC,CACA,CACA,KAAS,CAEN,GAAImM,GAAW,EAAG,CAGjB,GAAItoB,KAAKmc,UAAYnc,KAAK4c,iBAAkB,CAE3C5c,KAAK2oB,cAAcL,EACxB,KAAW,CACNtoB,KAAKuc,iBAAmBvc,KAAKmc,SAClC,CACA,CAEG,GAAIoM,GAAc,EAAG,CAEpBvoB,KAAK4oB,cAAcL,EACvB,CACA,CACA,CACA,EAEA/M,EAAW/b,UAAUgpB,WAAa,SAAUH,GAC3C,IAAIxiB,EAAIxF,UAAUF,OAAS,GAAKE,UAAU,KAAOK,UAAYL,UAAU,GAAK,EAE5E,IAAIiC,EAAQvC,KAAK0b,aACbzQ,EAAOjL,KAAK0e,iBAEhB,GAAI1e,KAAKqc,QAAS,CACjB,IAAIra,EAAQhC,KAAKqc,QAAU,EACvBoK,EAASxb,EAAKjJ,GACd6mB,EAAepC,EAAO5e,aAAe7H,KAAKoc,cAG9C,GAAIkM,GAAWO,EAAc,CAC5B7oB,KAAKijB,SAASwD,EAAQzkB,GACtBO,EAAMW,aAAaujB,EAAO3iB,aAAcvB,EAAMY,YAC9C,IAAKsjB,EAAOqC,cAAgBrC,EAAOxM,kBAAmB,CACrDja,KAAK+c,eAAexX,KAAKkhB,GAEzB,IAAKA,EAAOxM,kBAAmB,CAC9BwM,EAAOtM,iBACZ,CACA,CACGsM,EAAO9iB,aAEP3D,KAAKyc,YAAcoM,EAEnB,GAAI7oB,KAAKyc,WAAa,EAAG,CACxBzc,KAAKyc,WAAaza,EAAQhC,KAAKoc,aACnC,CAEG,IAAKpa,EAAO,CACXhC,KAAKyc,WAAa,CACtB,CAEGla,EAAM8B,MAAM2U,WAAahZ,KAAKyc,WAAa,KAC3Czc,KAAKuc,kBAAoBsM,EACzB7oB,KAAKqc,SACR,CAEEiM,IAAYtoB,KAAKmc,UAAYnc,KAAKuc,kBAElC,GAAIkK,EAAO5e,YAAc7H,KAAK4c,iBAAkB,CAC/C5c,KAAK4c,iBAAmB6J,EAAO5e,YAAc,CAChD,CAEE,GAAI/B,EAAI9F,KAAK2c,oBAAsB3c,KAAKqc,SAAWiM,IAAYrd,EAAKjL,KAAKqc,QAAU,GAAGxU,aAAe7H,KAAKoc,eAAgB,CACzHpc,KAAKyoB,WAAWH,EAASxiB,EAAI,EAChC,KAAS,CACN9F,KAAK+oB,yBAAyB/oB,KAAK+c,eACtC,CACA,CACA,EAEAvB,EAAW/b,UAAUkpB,cAAgB,SAAUL,GAC9C,IAAI/lB,EAAQvC,KAAK0b,aACb+K,EAASzmB,KAAK0e,iBAAiB1e,KAAKqc,SACpCwM,EAAepC,EAAO5e,aAAe7H,KAAKoc,cAE9C,GAAIkM,GAAWO,EAAc,CAE5B,IAAIlK,EAAQ8H,EAAO3iB,aACnB6a,EAAM1X,WAAWrB,YAAY+Y,GAE7B3e,KAAKyc,YAAcoM,EACnBtmB,EAAM8B,MAAM2U,WAAahZ,KAAKyc,WAAa,KAC3Czc,KAAKuc,kBAAoBvc,KAAKqc,QAAUwM,EAAeA,EAAe7oB,KAAK4c,iBAC3E5c,KAAKqc,UAELiM,EAAUtoB,KAAKmc,UAAYnc,KAAKuc,iBAEhCvc,KAAK2oB,cAAcL,EACrB,CACA,EAEA9M,EAAW/b,UAAUmpB,cAAgB,SAAUL,GAC9C,IAAIziB,EAAIxF,UAAUF,OAAS,GAAKE,UAAU,KAAOK,UAAYL,UAAU,GAAK,EAE5E,IAAIiC,EAAQvC,KAAK0b,aACbzQ,EAAOjL,KAAK0e,iBAEhB,GAAI1e,KAAKsc,WAAatc,KAAKkc,iBAAmB,EAAG,CAChD,IAAIla,EAAQhC,KAAKsc,WAAa,EAC1BoK,EAAYzb,EAAKjJ,GACjBgnB,EAAkBtC,EAAU7e,aAAe7H,KAAKoc,cAGpD,GAAImM,GAAcS,EAAiB,CAClChpB,KAAKijB,SAASyD,EAAW1kB,GACzBO,EAAM6E,YAAYsf,EAAU5iB,cAE5B,IAAK4iB,EAAUoC,cAAgBpC,EAAUzM,kBAAmB,CAC3Dja,KAAKgd,kBAAkBzX,KAAKmhB,GAE5B,IAAKA,EAAUzM,kBAAmB,CACjCyM,EAAUvM,iBACf,CACA,CAEGuM,EAAU/iB,aAEV3D,KAAK0c,eAAiBsM,EAEtB,GAAIhpB,KAAK0c,cAAgB,GAAK1a,GAAShC,KAAKkc,iBAAmB,EAAG,CACjElc,KAAK0c,cAAgB,CACzB,CAEGna,EAAM8B,MAAMmjB,cAAgBxnB,KAAK0c,cAAgB,KACjD1c,KAAKwc,qBAAuBwM,EAC5BhpB,KAAKsc,YACR,CAEEiM,EAAavoB,KAAKmc,UAAYnc,KAAKwc,oBAEnC,GAAIkK,EAAU7e,YAAc7H,KAAK4c,iBAAkB,CAClD5c,KAAK4c,iBAAmB8J,EAAU7e,YAAc,CACnD,CAEE,GAAI/B,EAAI9F,KAAK2c,oBAAsB3c,KAAKsc,WAAatc,KAAKkc,iBAAmB,GAAKqM,IAAetd,EAAKjL,KAAKsc,WAAa,GAAGzU,aAAe7H,KAAKoc,eAAgB,CAC9Jpc,KAAK4oB,cAAcL,EAAYziB,EAAI,EACtC,KAAS,CACN9F,KAAK+oB,yBAAyB/oB,KAAKgd,kBACtC,CACA,CACA,EAEAxB,EAAW/b,UAAUipB,iBAAmB,SAAUH,GACjD,IAAIhmB,EAAQvC,KAAK0b,aACbgL,EAAY1mB,KAAK0e,iBAAiB1e,KAAKsc,YACvC0M,EAAkBtC,EAAU7e,aAAe7H,KAAKoc,cAEpD,GAAImM,GAAcS,EAAiB,CAElC,IAAIrK,EAAQ+H,EAAU5iB,aAEtB,GAAI6a,EAAM1X,WAAY,CACrB0X,EAAM1X,WAAWrB,YAAY+Y,EAChC,CAEE3e,KAAK0c,eAAiBsM,EAEtB,GAAIhpB,KAAK0c,cAAgB,EAAG,CAC3B1c,KAAK0c,cAAgB,CACxB,CAEEna,EAAM8B,MAAMmjB,cAAgBxnB,KAAK0c,cAAgB,KACjD1c,KAAKwc,qBAAuBwM,EAC5BhpB,KAAKsc,aAELiM,IAAevoB,KAAKmc,UAAYnc,KAAKwc,qBAErCxc,KAAK0oB,iBAAiBH,EACxB,CACA,EAEA/M,EAAW/b,UAAUspB,yBAA2B,SAAU9d,GACzDA,EAAKzF,SAAQ,SAAUT,GACtBA,EAAIqV,YACN,IAECnP,EAAKzF,SAAQ,SAAUT,GACtBA,EAAIsV,eACN,IAECpP,EAAK7K,OAAS,CACf,EAGAob,EAAW/b,UAAU0oB,gBAAkB,WACtCnoB,KAAKqK,WAAW7E,SAAQ,SAAUT,GACjCA,EAAIojB,iBACN,GACA,EAGA3M,EAAW/b,UAAUuI,gBAAkB,WACtC,IAAIihB,EAAgBjpB,KAAK2C,QAAQkK,aAC7BtI,EAEJ,GAAIvE,KAAK8b,aAAe,UAAW,CAElC,IAAIoN,EAAc7nB,KAAK0Y,MAAM/Z,KAAK0K,cAAc5G,aAAaqlB,wBAAwBxhB,QAAU3H,KAAKuC,MAAMwL,eAAiB/N,KAAKuC,MAAMwL,cAAczE,SAAWtJ,KAAKuC,MAAMwL,cAAcqb,SAAWppB,KAAKuC,MAAMwL,cAAcjK,aAAaqlB,wBAAwBxhB,OAAS,IAE1Q,GAAI3H,KAAK+b,YAAa,CACrB/b,KAAK2C,QAAQ0B,MAAMqD,UAAY,eAAiBwhB,EAAc,MAC9DlpB,KAAK2C,QAAQ0B,MAAMsD,OAAS,eAAiBuhB,EAAc,MAC3DlpB,KAAK2C,QAAQ0B,MAAMglB,UAAY,eAAiBH,EAAc,KACjE,KAAS,CACNlpB,KAAK2C,QAAQ0B,MAAMsD,OAAS,GAC5B3H,KAAK2C,QAAQ0B,MAAMsD,OAAS3H,KAAKuC,MAAMI,QAAQkK,aAAeqc,EAAc,KAC5ElpB,KAAK2C,QAAQwZ,UAAYnc,KAAKmc,SACjC,CAEEnc,KAAK2H,OAAS3H,KAAK2C,QAAQkK,aAC3B7M,KAAK4c,iBAAmB5c,KAAKuC,MAAMkB,QAAQ6lB,kBAAoBtpB,KAAK2H,OAGpE,IAAK3H,KAAK+b,aAAekN,GAAiBjpB,KAAK2C,QAAQkK,aAAc,CACpEtI,EAAYvE,KAAKuC,MAAMgC,UAAU,eAEjC,GAAIA,IAAcvE,KAAKuC,MAAMiC,QAAQ+kB,YAAYC,aAAejlB,EAAW,CAC1EvE,KAAKqG,QACT,CACA,CACA,CACA,EAGAmV,EAAW/b,UAAU2G,aAAe,WACnCpG,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3BA,EAAIqB,aAAa,KACnB,GACA,EAGAoV,EAAW/b,UAAU8gB,YAAc,WAClCvgB,KAAKid,YAAc,KACnBjd,KAAKkd,yBAA2B,KACjC,EAGA1B,EAAW/b,UAAUgqB,cAAgB,WACpCzpB,KAAKid,YAAc,MAEnB,GAAIjd,KAAKkd,yBAA0B,CAClCld,KAAKkgB,kBAAkBlgB,KAAKkd,yBAAyB6H,MAAO/kB,KAAKkd,yBAAyB8H,UAAWhlB,KAAKkd,yBAAyBiC,kBAEnInf,KAAKkd,yBAA2B,KAClC,KAAQ,CACN,GAAIld,KAAKmd,2BAA4B,CACpCnd,KAAKwf,oBACR,CACA,CAECxf,KAAKmd,2BAA6B,KACnC,EAGA3B,EAAW/b,UAAU4G,OAAS,SAAUoH,GACpC,IACCxJ,EAAOjE,KAAKiD,WAEhBjD,KAAKgI,kBAELhI,KAAKuC,MAAMmnB,WAAa1pB,KAAKuC,MAAMI,QAAQyB,YAE3C,IAAKqJ,EAAO,CACX,GAAIzN,KAAK8b,YAAc,UAAW,CAEjC,GAAI9b,KAAKuC,MAAMkB,QAAQ+Z,QAAS,CAC/Bxd,KAAKkgB,kBAAkB,QAAS,MAAO,MAC3C,KAAU,CACNlgB,KAAKinB,eACT,CACA,KAAS,CACNjnB,KAAKwf,qBACLxf,KAAKgE,iBAAiBC,EACzB,CAEE,IAAKjE,KAAKkc,iBAAkB,CAC3B,GAAIlc,KAAKuC,MAAMkB,QAAQ0jB,YAAa,CACnCnnB,KAAK8D,aAAasD,YAAYpH,KAAKuC,MAAMkB,QAAQ0jB,YACrD,CACA,CACA,KAAQ,CACNnnB,KAAK+lB,aACP,CACA,EAEAvK,EAAW/b,UAAUoO,YAAc,WAClC7N,KAAK2C,QAAQM,WAAa,EAC1BjD,KAAK2C,QAAQwZ,UAAY,EAEzB,GAAInc,KAAKuC,MAAMonB,UAAY,KAAM,CAChC,IAAIC,EAAQvmB,SAASwmB,YAAY,SACjCD,EAAME,UAAU,SAAU,MAAO,MACjC9pB,KAAK2C,QAAQonB,cAAcH,EAC7B,KAAQ,CACN5pB,KAAK2C,QAAQonB,cAAc,IAAIC,MAAM,UACvC,CACA,EAEA,IAAIC,EAAU,SAASA,EAAQ1nB,GAC9BvC,KAAKuC,MAAQA,EAEbvC,KAAK2C,QAAU3C,KAAKuC,MAAMM,WAAW6Y,aACrC1b,KAAKkqB,SAAWlqB,KAAKuC,MAAMM,WAAWF,QAEtC3C,KAAKmqB,QAAU,EACfnqB,KAAKoqB,SAAW,EAChBpqB,KAAKiD,WAAa,EAElBjD,KAAKqqB,kBAAoB,EACzBrqB,KAAKsqB,mBAAqB,EAE1BtqB,KAAKuqB,YAAc,EACnBvqB,KAAKwqB,aAAe,EAEpBxqB,KAAKyqB,cAAgB,EAErBzqB,KAAK0qB,OAAS,IAEd1qB,KAAK8oB,YAAc,MAEnB9oB,KAAK8C,QAAU,GAEf,GAAI9C,KAAK2qB,qBAAsB,CAC9B3qB,KAAK2D,YACP,CACA,EAEAsmB,EAAQxqB,UAAUkrB,mBAAqB,WACtC,IAAIlnB,EAAUzD,KAAKuC,MAAMkB,QACrBmnB,EAAS,MACTC,EAAK,KAET,GAAIpnB,EAAQ2J,QAAU,eAAgB,CACrCf,QAAQC,KAAK,0EACbue,EAAK,KACP,CAEC,GAAIpnB,EAAQwC,iBAAkB,CAC7BoG,QAAQC,KAAK,oEACbue,EAAK,KACP,CAEC,GAAI7qB,KAAKuC,MAAMuoB,IAAK,CACnBze,QAAQC,KAAK,8EACbue,EAAK,KACP,CAOC,GAAIpnB,EAAQX,QAAS,CACpB8nB,EAASnnB,EAAQX,QAAQpC,MAAK,SAAUwE,GACvC,OAAOA,EAAI0lB,MACd,IAEE,GAAIA,EAAQ,CACXve,QAAQC,KAAK,gEACbue,EAAK,KACR,CACA,CAEC,IAAKA,EAAI,CACRpnB,EAAQyC,cAAgB,KAC1B,CAEC,OAAO2kB,CACR,EAEAZ,EAAQxqB,UAAUkE,WAAa,WAC9B,IAAIonB,EAAU/qB,KAEdA,KAAKkqB,SAASvV,iBAAiB,UAAU,WACxC,IAAI1Q,EAAO8mB,EAAQb,SAASjnB,WAE5B,GAAI8nB,EAAQ9nB,YAAcgB,EAAM,CAC/B8mB,EAAQ9nB,WAAagB,EACrB8mB,EAAQC,OAAO/mB,GAAQ8mB,EAAQV,kBAAoBU,EAAQL,QAC9D,CACA,GACA,EAEAT,EAAQxqB,UAAUwrB,aAAe,WAChCjrB,KAAK8oB,YAAc,KACpB,EAEAmB,EAAQxqB,UAAUogB,MAAQ,WACzB7f,KAAK8C,QAAU,GAEf9C,KAAKmqB,SAAW,EAChBnqB,KAAKoqB,SAAW,EAEhBpqB,KAAKqqB,kBAAoB,EACzBrqB,KAAKsqB,mBAAqB,EAC1BtqB,KAAKuqB,YAAc,EACnBvqB,KAAKwqB,aAAe,CACrB,EAEAP,EAAQxqB,UAAUqmB,WAAa,WAC9B,IAAIoF,EAAS,MACTC,EAAa,EACbC,EAAS,EACTC,EACAtmB,EACA4Z,EAEJ,GAAI3e,KAAKuC,MAAMkB,QAAQ2J,SAAW,UAAW,CAC5CpN,KAAKuC,MAAMmI,cAAc3H,eAAeyC,SAAQ,SAAUiB,GACzD,IAAKA,EAAOH,WAAWwD,OAASrD,EAAOuC,QAAS,CAC/CkiB,EAAS,IACb,CACA,IAEE,GAAIA,EAAQ,CACX,GAAIA,GAAUlrB,KAAKuC,MAAMM,WAAW6b,iBAAiBte,OAAQ,CAG5DJ,KAAKsqB,mBAAqBtqB,KAAKiD,WAAajD,KAAKkqB,SAAS9lB,YAAcpE,KAAK0qB,OAE7E,GAAI1qB,KAAKuC,MAAMkB,QAAQ+Z,QAAS,CAC/B6N,EAAQrrB,KAAKuC,MAAMiC,QAAQiZ,UAAU6N,UAAU,OAAO,GAEtDvmB,EAAMsmB,EAAMzH,QAAQ,OAAO,EAChC,KAAW,CACN7e,EAAM/E,KAAKuC,MAAMM,WAAW6b,iBAAiB,EAClD,CAEI,GAAI3Z,EAAK,CAER4Z,EAAQ5Z,EAAIjB,aAEZiB,EAAIwH,gBAEJvM,KAAK2C,QAAQyE,YAAYuX,GAEzB,IAAK,IAAIyM,EAAS,EAAGA,EAASrmB,EAAIsG,MAAMjL,OAAQgrB,IAAU,CACzD,IAAI9f,EAAOvG,EAAIsG,MAAM+f,GACrBzM,EAAMvX,YAAYkE,EAAKxH,cAEvBwH,EAAK7E,OAAO6G,oBAEZ6d,GAAc7f,EAAK7E,OAAOoD,WAE1B,GAAIshB,EAAanrB,KAAKsqB,mBAAoB,CACzC,KACP,CACA,CAEK3L,EAAM1X,WAAWrB,YAAY+Y,GAE7B3e,KAAKyqB,cAAgBppB,KAAK0Y,MAAMoR,GAAcC,EAAS,IAEvD,IAAKA,EAAQA,EAASprB,KAAKuC,MAAMmI,cAAc3H,eAAe3C,OAAQgrB,IAAU,CAC/EprB,KAAKuC,MAAMmI,cAAc3H,eAAeqoB,GAAQvb,SAAS7P,KAAKyqB,cACpE,CAEKzqB,KAAKoG,aAAa,MAAO,KAC9B,CACA,CACA,CACA,KAAQ,CACN,GAAIpG,KAAKuC,MAAMkB,QAAQ2J,SAAW,aAAc,CAC/CpN,KAAKuC,MAAMiC,QAAQ4I,OAAOA,SAC1BpN,KAAKuC,MAAM4D,QAAQC,aAAa,MAAO,KAC1C,CACA,CACA,EAEA6jB,EAAQxqB,UAAU8rB,sBAAwB,WACzC,IAAK,IAAIC,EAAMxrB,KAAKmqB,QAASqB,GAAOxrB,KAAKoqB,SAAUoB,IAAO,CACzDxrB,KAAK8C,QAAQ0oB,GAAKle,mBACpB,CACA,EAEA2c,EAAQxqB,UAAU2G,aAAe,SAAU0H,EAAQyS,GAClD,IAAIkL,EAAUzrB,KAEd,IAAI0rB,EAAM,CACT9mB,KAAM5E,KAAK8C,QACXqnB,QAASnqB,KAAKmqB,QACdC,SAAUpqB,KAAKoqB,UAGhB,GAAItc,IAAW9N,KAAK8oB,YAAa,CAChC,MACF,CAEC9oB,KAAK6f,QAEL7f,KAAKiD,WAAajD,KAAKkqB,SAASjnB,WAEhCjD,KAAKqqB,kBAAoBrqB,KAAKiD,WAAajD,KAAK0qB,OAChD1qB,KAAKsqB,mBAAqBtqB,KAAKiD,WAAajD,KAAKkqB,SAAS9lB,YAAcpE,KAAK0qB,OAE7E,IAAIiB,EAAS,EAEb3rB,KAAKuC,MAAMmI,cAAc3H,eAAeyC,SAAQ,SAAUiB,GACzD,IAAImE,EAAS,GAEb,GAAInE,EAAOuC,QAAS,CACnB,IAAIc,EAAQrD,EAAOoD,WAEnBe,EAAOghB,QAAUD,EACjB/gB,EAAOihB,SAAWF,EAAS7hB,EAE3B,GAAI6hB,EAAS7hB,EAAQ2hB,EAAQpB,mBAAqBsB,EAASF,EAAQnB,mBAAoB,CAGtF,GAAImB,EAAQtB,UAAY,EAAG,CAC1BsB,EAAQtB,QAAUsB,EAAQ3oB,QAAQ1C,OAClCqrB,EAAQlB,YAAcoB,CAC3B,CAEIF,EAAQrB,SAAWqB,EAAQ3oB,QAAQ1C,MACvC,KAAU,CAEN,GAAIqrB,EAAQtB,WAAa,EAAG,CAC3BsB,EAAQjB,cAAgB1gB,CAC7B,CACA,CAEG2hB,EAAQ3oB,QAAQyC,KAAKkB,GAErBA,EAAOjC,QAAQ2B,QAAUyE,EAEzB+gB,GAAU7hB,CACb,CACA,IAEC9J,KAAK2C,QAAQ0B,MAAMynB,YAAc9rB,KAAKuqB,YAAc,KACpDvqB,KAAK2C,QAAQ0B,MAAM0nB,aAAe/rB,KAAKwqB,aAAe,KAEtDxqB,KAAK8oB,YAAc,KAEnB,IAAKvI,EAAa,CACjB,IAAKzS,GAAU9N,KAAKgsB,cAAcN,GAAM,CACvC1rB,KAAKisB,iBACR,CACA,CAECjsB,KAAKkqB,SAASjnB,WAAajD,KAAKiD,UACjC,EAEAgnB,EAAQxqB,UAAUusB,cAAgB,SAAUN,GAC3C,IAAIQ,EAAUlsB,KAEd,IAAIsF,EAAQ,KAEZ,GAAIomB,EAAI9mB,KAAKxE,SAAWJ,KAAK8C,QAAQ1C,QAAUsrB,EAAIvB,UAAYnqB,KAAKmqB,SAAWuB,EAAItB,WAAapqB,KAAKoqB,SAAU,CAC9G,OAAO,IACT,CAECsB,EAAI9mB,KAAKY,SAAQ,SAAUN,EAAKY,GAC/B,GAAIZ,IAAQgnB,EAAQppB,QAAQgD,GAAI,CAC/BR,EAAQ,KACX,CACA,IAEC,OAAQA,CACT,EAEA2kB,EAAQxqB,UAAUwsB,gBAAkB,WACnC,IAAIE,EAAUnsB,KAEd,IAAIiL,EAAOjL,KAAKuC,MAAMM,WAAWujB,iBACjCnb,EAAKzF,SAAQ,SAAUT,GACtBonB,EAAQC,gBAAgBrnB,EAAK,KAC/B,GACA,EAEAklB,EAAQxqB,UAAUurB,OAAS,SAAUlE,GACpC9mB,KAAKqqB,mBAAqBvD,EAC1B9mB,KAAKsqB,oBAAsBxD,EAE3B,GAAIA,EAAO9mB,KAAKkqB,SAAS9lB,YAAc,GAAI,CAC1CpE,KAAKoG,cACP,KAAQ,CACN,GAAI0gB,EAAO,EAAG,CAEb9mB,KAAKqsB,cACLrsB,KAAKssB,eACR,KAAS,CAENtsB,KAAKusB,aACLvsB,KAAKwsB,gBACR,CACA,CACA,EAEAvC,EAAQxqB,UAAUgtB,kBAAoB,SAAU1rB,EAAOgiB,EAAK+D,GAC3D,IAAK,IAAI4F,EAAM3rB,EAAO2rB,EAAM3J,EAAK2J,IAAO,CACvC,IAAIjmB,EAASzG,KAAK8C,QAAQ4pB,GAE1BjmB,EAAOjC,QAAQ2B,QAAQylB,SAAW9E,EAClCrgB,EAAOjC,QAAQ2B,QAAQ0lB,UAAY/E,CACrC,CACA,EAEAmD,EAAQxqB,UAAU4sB,YAAc,WAC/B,IAAI5lB,EAASzG,KAAK8C,QAAQ9C,KAAKoqB,SAAW,GACtCnf,EACA0hB,EACAC,EAEJ,GAAInmB,GAAUA,EAAOjC,QAAQ2B,QAAQylB,SAAW5rB,KAAKsqB,mBAAoB,CAExErf,EAAOjL,KAAKuC,MAAMM,WAAWujB,iBAE7Bnb,EAAKzF,SAAQ,SAAUT,GACtB,GAAIA,EAAIkJ,OAAS,QAAS,CACzB,IAAI3C,EAAOvG,EAAImhB,QAAQzf,GACvB1B,EAAIjB,aAAasD,YAAYkE,EAAKxH,cAClCwH,EAAKuhB,cACT,CACA,IAEE,GAAI7sB,KAAKyqB,cAAe,CAEvBkC,EAAWlmB,EAAOoD,WAElB,GAAI8iB,IAAa3sB,KAAKyqB,cAAe,CACpChkB,EAAO6G,oBAEPsf,EAAYD,EAAWlmB,EAAOoD,WAE9B,GAAI+iB,EAAW,CACdnmB,EAAOjC,QAAQ2B,QAAQ0lB,UAAYe,EACnC5sB,KAAKysB,kBAAkBzsB,KAAKoqB,SAAW,EAAGpqB,KAAK8C,QAAQ1C,OAAQwsB,EACpE,CACA,CACA,CAEE5sB,KAAKoqB,WAEL,GAAIpqB,KAAKoqB,UAAYpqB,KAAK8C,QAAQ1C,OAAS,EAAG,CAC7CJ,KAAKwqB,aAAe,CACvB,KAAS,CACNxqB,KAAKwqB,cAAgB/jB,EAAOoD,UAC/B,CAEE7J,KAAK2C,QAAQ0B,MAAM0nB,aAAe/rB,KAAKwqB,aAAe,KAEtDxqB,KAAKqsB,aACP,CACA,EAEApC,EAAQxqB,UAAU8sB,WAAa,WAC9B,IAAI9lB,EAASzG,KAAK8C,QAAQ9C,KAAKmqB,QAAU,GACrClf,EAEJ,GAAIxE,GAAUA,EAAOjC,QAAQ2B,QAAQ0lB,UAAY7rB,KAAKqqB,kBAAmB,CACxE,IAAIpf,EAAOjL,KAAKuC,MAAMM,WAAWujB,iBAEjCnb,EAAKzF,SAAQ,SAAUT,GACtB,GAAIA,EAAIkJ,OAAS,QAAS,CACzB,IAAI3C,EAAOvG,EAAImhB,QAAQzf,GACvB1B,EAAIjB,aAAagpB,QAAQxhB,EAAKxH,cAC9BwH,EAAKuhB,cACT,CACA,IAEE,IAAK7sB,KAAKmqB,QAAS,CAClBnqB,KAAKuqB,YAAc,CACtB,KAAS,CACNvqB,KAAKuqB,aAAe9jB,EAAOoD,UAC9B,CAEE7J,KAAK2C,QAAQ0B,MAAMynB,YAAc9rB,KAAKuqB,YAAc,KAEpDvqB,KAAKmqB,UAELnqB,KAAKusB,YACP,CACA,EAEAtC,EAAQxqB,UAAU+sB,eAAiB,SAAU/lB,GAC5C,IAAIA,EAASzG,KAAK8C,QAAQ9C,KAAKoqB,UAC3Bnf,EAEJ,GAAIxE,GAAUA,EAAOjC,QAAQ2B,QAAQylB,QAAU5rB,KAAKsqB,mBAAoB,CACvErf,EAAOjL,KAAKuC,MAAMM,WAAWujB,iBAE7B3f,EAAOjC,QAAQ2B,QAAQ6C,QAAU,MAEjCiC,EAAKzF,SAAQ,SAAUT,GACtB,GAAIA,EAAIkJ,OAAS,QAAS,CACzB,IAAI3C,EAAOvG,EAAImhB,QAAQzf,GACvB1B,EAAIjB,aAAa8B,YAAY0F,EAAKxH,aACtC,CACA,IAEE9D,KAAKwqB,cAAgB/jB,EAAOoD,WAC5B7J,KAAK2C,QAAQ0B,MAAM0nB,aAAe/rB,KAAKwqB,aAAe,KAEtDxqB,KAAKoqB,WAELpqB,KAAKwsB,gBACP,CACA,EAEAvC,EAAQxqB,UAAU6sB,cAAgB,WACjC,IAAI7lB,EAASzG,KAAK8C,QAAQ9C,KAAKmqB,SAC3Blf,EAEJ,GAAIxE,GAAUA,EAAOjC,QAAQ2B,QAAQ0lB,SAAW7rB,KAAKqqB,kBAAmB,CAEvEpf,EAAOjL,KAAKuC,MAAMM,WAAWujB,iBAE7Bnb,EAAKzF,SAAQ,SAAUT,GACtB,GAAIA,EAAIkJ,OAAS,QAAS,CACzB,IAAI3C,EAAOvG,EAAImhB,QAAQzf,GACvB1B,EAAIjB,aAAa8B,YAAY0F,EAAKxH,aACtC,CACA,IAEE9D,KAAKuqB,aAAe9jB,EAAOoD,WAC3B7J,KAAK2C,QAAQ0B,MAAMynB,YAAc9rB,KAAKuqB,YAAc,KAEpDvqB,KAAKmqB,UAELnqB,KAAKssB,eACP,CACA,EAEArC,EAAQxqB,UAAUstB,cAAgB,SAAUhoB,GAC3C,GAAIA,EAAIkJ,OAAS,QAAS,CACzBlJ,EAAIP,QAAQ2B,QAAU,CACrBgkB,QAASnqB,KAAKmqB,QACdC,SAAUpqB,KAAKoqB,UAGhB,IAAK,IAAI4C,EAAMhtB,KAAKmqB,QAAS6C,GAAOhtB,KAAKoqB,SAAU4C,IAAO,CACzD,IAAIvmB,EAASzG,KAAK8C,QAAQkqB,GAE1B,GAAIvmB,GAAUA,EAAOuC,QAAS,CAC7B,IAAIsC,EAAOvG,EAAImhB,QAAQzf,GAEvB1B,EAAIjB,aAAasD,YAAYkE,EAAKxH,cAClCwH,EAAKuhB,cACT,CACA,CACA,CACA,EAEA5C,EAAQxqB,UAAU2sB,gBAAkB,SAAUrnB,EAAK0I,GAClD,GAAI1I,EAAIkJ,OAAS,QAAS,CACzB,GAAIR,IAAU1I,EAAIP,QAAQ2B,SAAWpB,EAAIP,QAAQ2B,QAAQgkB,UAAYnqB,KAAKmqB,SAAWplB,EAAIP,QAAQ2B,QAAQikB,WAAapqB,KAAKoqB,SAAU,CACpI,IAAIzL,EAAQ5Z,EAAIjB,aAChB,MAAO6a,EAAMxb,WAAY,CACxBwb,EAAM/Y,YAAY+Y,EAAMxb,WAC5B,CAAInD,KAAK+sB,cAAchoB,EACvB,CACA,CACA,EAEA,IAAIoZ,EAAe,SAASA,EAAapZ,GACxC/E,KAAKitB,KAAOloB,CACb,EAEAoZ,EAAa1e,UAAUuhB,QAAU,SAAU2C,GAC1C,OAAO3jB,KAAKitB,KAAKjM,QAAQ2C,EAC1B,EAEAxF,EAAa1e,UAAUqE,WAAa,WACnC,OAAO9D,KAAKitB,KAAKnpB,YAClB,EAEAqa,EAAa1e,UAAUyO,SAAW,WACjC,IAAI7C,EAAQ,GAEZrL,KAAKitB,KAAK/e,WAAW1I,SAAQ,SAAU8F,GACtCD,EAAM9F,KAAK+F,EAAK1B,eAClB,IAEC,OAAOyB,CACR,EAEA8S,EAAa1e,UAAUymB,QAAU,SAAUzf,GAC1C,IAAI6E,EAAOtL,KAAKitB,KAAK/G,QAAQzf,GAC7B,OAAO6E,EAAOA,EAAK1B,eAAiB,KACrC,EAEAuU,EAAa1e,UAAUytB,SAAW,WACjC,OAAOltB,KAAKitB,KAAKjM,QAAQ,QAAQhhB,KAAKitB,KAAK1qB,MAAMkB,QAAQzB,MAC1D,EAEAmc,EAAa1e,UAAU0tB,YAAc,SAAU7jB,GAC9C,OAAOtJ,KAAKitB,KAAK1qB,MAAMM,WAAWwa,eAAerd,KAAKitB,KAAM3jB,EAC7D,EAEA6U,EAAa1e,UAAU+O,OAAS,WAC/B,OAAOxO,KAAKitB,KAAKze,QAClB,EAEA2P,EAAa1e,UAAUkP,SAAW,WACjC,OAAO3O,KAAKitB,KAAK1qB,MAAMM,WAAW0b,YAAYve,KAAKitB,KACpD,EAEA9O,EAAa1e,UAAU2tB,OAAS,WAC/B,GAAIptB,KAAKitB,KAAK1qB,MAAMgC,UAAU,OAAQ,MAAO,CAC5C,OAAOvE,KAAKitB,KAAK1qB,MAAMiC,QAAQsd,KAAKuL,aAAartB,KAAKitB,KACxD,CACA,EAEA9O,EAAa1e,UAAU0P,KAAO,SAAUpN,EAAIkI,GAC3CjK,KAAKitB,KAAKK,UAAUvrB,EAAIkI,EACzB,EAEAkU,EAAa1e,UAAUqO,OAAS,SAAUnJ,GACzC,OAAO3E,KAAKitB,KAAKM,WAAW5oB,EAC7B,EAEAwZ,EAAa1e,UAAU0oB,gBAAkB,WACxCnoB,KAAKitB,KAAK9E,gBAAgB,KAC3B,EAEAhK,EAAa1e,UAAU+tB,OAAS,WAC/BxtB,KAAKitB,KAAK1qB,MAAMiC,QAAQsb,UAAU2N,WAAWztB,KAAKitB,KACnD,EAEA9O,EAAa1e,UAAUiuB,SAAW,WACjC1tB,KAAKitB,KAAK1qB,MAAMiC,QAAQsb,UAAUsF,aAAaplB,KAAKitB,KACrD,EAEA9O,EAAa1e,UAAUkuB,aAAe,WACrC3tB,KAAKitB,KAAK1qB,MAAMiC,QAAQsb,UAAU8N,UAAU5tB,KAAKitB,KAClD,EAEA9O,EAAa1e,UAAUouB,WAAa,WACnC,OAAO7tB,KAAKitB,KAAK1qB,MAAMiC,QAAQsb,UAAUgO,cAAc9tB,KAAKitB,KAC7D,EAEA9O,EAAa1e,UAAU2I,SAAW,WACjC,OAAOpI,KAAKitB,IACb,EAEA9O,EAAa1e,UAAUsQ,SAAW,WACjC,OAAO/P,KAAKitB,KAAKld,UAClB,EAEAoO,EAAa1e,UAAUsuB,OAAS,WAC/B,GAAI/tB,KAAKitB,KAAK1qB,MAAMgC,UAAU,aAAc,MAAO,CAClDvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ+gB,WAAWyI,UAAUhuB,KAAKitB,KACpD,CACA,EAEA9O,EAAa1e,UAAUwuB,SAAW,WACjC,GAAIjuB,KAAKitB,KAAK1qB,MAAMgC,UAAU,aAAc,MAAO,CAClDvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ+gB,WAAW2I,YAAYluB,KAAKitB,KACtD,CACA,EAEA9O,EAAa1e,UAAU+lB,SAAW,WACjC,GAAIxlB,KAAKitB,KAAK1qB,MAAMgC,UAAU,aAAc,MAAO,CAClD,IAAIvC,EAAQhC,KAAKitB,KAAK1qB,MAAMiC,QAAQ+gB,WAAWta,KAAKhK,QAAQjB,KAAKitB,MACjE,OAAOjrB,GAAS,CAClB,CAEC,OAAO,KACR,EAEAmc,EAAa1e,UAAU0uB,aAAe,WACrC,GAAInuB,KAAKitB,KAAK1qB,MAAMgC,UAAU,WAAY,MAAO,CAChDvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ0G,SAASkjB,YAAYpuB,KAAKitB,KACpD,CACA,EAEA9O,EAAa1e,UAAU4uB,WAAa,WACnC,GAAIruB,KAAKitB,KAAK1qB,MAAMgC,UAAU,WAAY,MAAO,CAChDvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ0G,SAASojB,UAAUtuB,KAAKitB,KAClD,CACA,EAEA9O,EAAa1e,UAAU8uB,WAAa,WACnC,GAAIvuB,KAAKitB,KAAK1qB,MAAMgC,UAAU,WAAY,MAAO,CAChDvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ0G,SAAS0iB,UAAU5tB,KAAKitB,KAClD,CACA,EAEA9O,EAAa1e,UAAU+uB,cAAgB,WACtC,GAAIxuB,KAAKitB,KAAK1qB,MAAMgC,UAAU,WAAY,MAAO,CAChD,OAAOvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ0G,SAASsjB,cAAcxuB,KAAKitB,KAC7D,CAEC,OAAO,KACR,EAEA9O,EAAa1e,UAAU2L,gBAAkB,WACxC,GAAIpL,KAAKitB,KAAK1qB,MAAMgC,UAAU,WAAY,MAAO,CAChD,OAAOvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ0G,SAASE,gBAAgBpL,KAAKitB,KAAM,KACrE,CAEC,OAAO,KACR,EAEA9O,EAAa1e,UAAUgvB,aAAe,SAAU9pB,EAAMwc,EAAKnf,GAC1D,GAAIhC,KAAKitB,KAAK1qB,MAAMgC,UAAU,WAAY,MAAO,CAChD,OAAOvE,KAAKitB,KAAK1qB,MAAMiC,QAAQ0G,SAASwjB,gBAAgB1uB,KAAKitB,KAAMtoB,EAAMwc,EAAKnf,EAChF,CAEC,OAAO,KACR,EAEAmc,EAAa1e,UAAUkvB,SAAW,WACjC,OAAO3uB,KAAKitB,KAAK7mB,cAClB,EAEA+X,EAAa1e,UAAUwiB,SAAW,WACjC,OAAOjiB,KAAKitB,KAAKhL,WAAWrY,cAC7B,EAEAuU,EAAa1e,UAAUmP,SAAW,WACjC,OAAO5O,KAAKitB,KAAK1qB,KAClB,EAEA4b,EAAa1e,UAAUmvB,WAAa,WACnC,IAAI7pB,EAAM/E,KAAKitB,KAAKzJ,UACpB,OAAOze,EAAMA,EAAI6E,eAAiB7E,CACnC,EAEAoZ,EAAa1e,UAAUovB,WAAa,WACnC,IAAI9pB,EAAM/E,KAAKitB,KAAKxJ,UACpB,OAAO1e,EAAMA,EAAI6E,eAAiB7E,CACnC,EAEA,IAAImZ,EAAM,SAASA,EAAIvZ,EAAM2F,GAC5B,IAAI2D,EAAO3N,UAAUF,OAAS,GAAKE,UAAU,KAAOK,UAAYL,UAAU,GAAK,MAE/EN,KAAKuC,MAAQ+H,EAAO/H,MACpBvC,KAAKsK,OAASA,EACdtK,KAAK2E,KAAO,GACZ3E,KAAKiO,KAAOA,EACZjO,KAAK2C,QAAU,MACf3C,KAAKwE,QAAU,GACfxE,KAAKqL,MAAQ,GACbrL,KAAK2H,OAAS,EACd3H,KAAK8uB,aAAe,GACpB9uB,KAAK+uB,aAAe,MACpB/uB,KAAKgvB,YAAc,EACnBhvB,KAAK8oB,YAAc,MACnB9oB,KAAKia,kBAAoB,MAEzBja,KAAKgS,UAAY,KAEjBhS,KAAKivB,QAAU,MAEfjvB,KAAKkf,QAAQva,EACd,EAEAuZ,EAAIze,UAAUyvB,OAAS,WACtB,IAAKlvB,KAAKivB,QAAS,CAClBjvB,KAAKivB,QAAU,KACfjvB,KAAKmvB,iBACP,CACA,EAEAjR,EAAIze,UAAU6D,cAAgB,WAC7B,IAAIF,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGuP,aAAa,OAAQ,OAExB3S,KAAK2C,QAAUS,CAChB,EAEA8a,EAAIze,UAAUqE,WAAa,WAC1B9D,KAAKkvB,SACL,OAAOlvB,KAAK2C,OACb,EAEAub,EAAIze,UAAU2vB,cAAgB,WAC7B,GAAIpvB,KAAK2C,SAAW3C,KAAK2C,QAAQsE,WAAY,CAC5CjH,KAAK2C,QAAQsE,WAAWrB,YAAY5F,KAAK2C,QAC3C,CACA,EAEAub,EAAIze,UAAU0vB,gBAAkB,WAC/B,IAAIxpB,EAAO3F,KACP6U,EACAC,EACAC,EAEJ/U,KAAKsD,gBAGL,GAAIqC,EAAKpD,MAAMkB,QAAQyhB,aAAe,OAASvf,EAAKpD,MAAMgC,UAAU,aAAc,CACjFoB,EAAKpD,MAAMiC,QAAQsb,UAAUiN,cAAc/sB,KAC7C,CAGC,GAAI2F,EAAKpD,MAAMkB,QAAQ6O,cAAgB,OAAS3M,EAAKpD,MAAMgC,UAAU,WAAY,CAChFoB,EAAKpD,MAAMiC,QAAQ+N,QAAQwa,cAAc/sB,KAC3C,CAGC,GAAI2F,EAAKpD,MAAMkB,QAAQyH,WAAa,OAASvF,EAAKpD,MAAMgC,UAAU,YAAa,CAC9EoB,EAAKpD,MAAMiC,QAAQ0G,SAAS6hB,cAAc/sB,KAC5C,CAGC,GAAI2F,EAAKpD,MAAMkB,QAAQwC,mBAAqB,YAAcN,EAAKpD,MAAMgC,UAAU,oBAAqB,CACnGoB,EAAKpD,MAAMiC,QAAQyB,iBAAiB8mB,cAAc/sB,KACpD,CAGC,IAAK2F,EAAKpD,MAAMkB,QAAQ4rB,gBAAkB1pB,EAAKpD,MAAMkB,QAAQ6rB,eAAiBtvB,KAAKuC,MAAMgC,UAAU,QAAS,CAC3GoB,EAAKpD,MAAMiC,QAAQyR,KAAK8W,cAAc/sB,KACxC,CAGC,GAAI2F,EAAKpD,MAAMkB,QAAQ8rB,SAAU,CAChC5pB,EAAKhD,QAAQgS,iBAAiB,SAAS,SAAUC,GAChDjP,EAAKpD,MAAMkB,QAAQ8rB,SAAS3a,EAAGjP,EAAKiE,eACvC,GACA,CAEC,GAAIjE,EAAKpD,MAAMkB,QAAQ+rB,YAAa,CACnC7pB,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnDjP,EAAKpD,MAAMkB,QAAQ+rB,YAAY5a,EAAGjP,EAAKiE,eAC1C,GACA,CAEC,GAAIjE,EAAKpD,MAAMkB,QAAQgsB,WAAY,CAClC9pB,EAAKhD,QAAQgS,iBAAiB,eAAe,SAAUC,GACtDjP,EAAKpD,MAAMkB,QAAQgsB,WAAW7a,EAAGjP,EAAKiE,eACzC,GACA,CAGC,GAAIjE,EAAKpD,MAAMkB,QAAQisB,cAAe,CACrC/pB,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDjP,EAAKpD,MAAMkB,QAAQisB,cAAc9a,EAAGjP,EAAKiE,eAC5C,GACA,CAEC,GAAIjE,EAAKpD,MAAMkB,QAAQksB,cAAe,CACrChqB,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDjP,EAAKpD,MAAMkB,QAAQksB,cAAc/a,EAAGjP,EAAKiE,eAC5C,GACA,CAEC,GAAIjE,EAAKpD,MAAMkB,QAAQmsB,aAAc,CACpCjqB,EAAKhD,QAAQgS,iBAAiB,aAAa,SAAUC,GACpDjP,EAAKpD,MAAMkB,QAAQmsB,aAAahb,EAAGjP,EAAKiE,eAC3C,GACA,CAEC,GAAIjE,EAAKpD,MAAMkB,QAAQosB,YAAa,CACnClqB,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnDjP,EAAKpD,MAAMkB,QAAQosB,YAAYjb,EAAGjP,EAAKiE,eAC1C,GACA,CAEC,GAAIjE,EAAKpD,MAAMkB,QAAQqsB,aAAc,CACpCnqB,EAAKhD,QAAQgS,iBAAiB,aAAa,SAAUC,GACpDjP,EAAKpD,MAAMkB,QAAQqsB,aAAalb,EAAGjP,EAAKiE,eAC3C,GACA,CAEC,GAAIjE,EAAKpD,MAAMkB,QAAQssB,OAAQ,CAE9Bhb,EAAM,MAENpP,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdzP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnD,GAAIG,EAAK,CACRpP,EAAKpD,MAAMkB,QAAQssB,OAAOnb,EAAGjP,EAAKiE,eACtC,CAEGmL,EAAM,KACT,GACA,CAEC,GAAIpP,EAAKpD,MAAMkB,QAAQusB,UAAW,CAEjCnb,EAAS,KAETlP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GAEnD,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAETlP,EAAKpD,MAAMkB,QAAQusB,UAAUpb,EAAGjP,EAAKiE,eACzC,KAAU,CAENiL,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,GAAIlP,EAAKpD,MAAMkB,QAAQwsB,WAAY,CAElCnb,EAAU,KAEVnP,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACNpP,EAAKpD,MAAMkB,QAAQwsB,WAAWrb,EAAGjP,EAAKiE,eAC1C,GAAM,IACN,GAAK,CAAEwL,QAAS,OAEdzP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnDU,aAAaR,GACbA,EAAU,IACb,GACA,CACA,EAEAoJ,EAAIze,UAAU8M,cAAgB,WAC7BvM,KAAKqL,MAAQrL,KAAKuC,MAAMmI,cAAc6B,cAAcvM,KACrD,EAGAke,EAAIze,UAAUkE,WAAa,SAAU8J,GACpC,IAAIyiB,EAAUlwB,KAEdA,KAAKkvB,SAEL,IAAKlvB,KAAK8oB,aAAerb,EAAO,CAE/BzN,KAAKmwB,cAEL,MAAOnwB,KAAK2C,QAAQQ,WAAY,CAC/BnD,KAAK2C,QAAQiD,YAAY5F,KAAK2C,QAAQQ,WACzC,CACE,GAAInD,KAAKuC,MAAMgC,UAAU,iBAAkB,CAC1CvE,KAAKuC,MAAMiC,QAAQC,cAAc2rB,UAAUpwB,KAC9C,CAEEA,KAAKuM,gBAEL,GAAIvM,KAAKuC,MAAMkB,QAAQyC,eAAiBlG,KAAKuC,MAAM4D,QAAQ2iB,YAAa,CACvE9oB,KAAKuC,MAAM4D,QAAQ4mB,cAAc/sB,KACpC,KAAS,CACNA,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5B4kB,EAAQvtB,QAAQyE,YAAYkE,EAAKxH,cACjCwH,EAAKuhB,cACT,GACA,CAEE,GAAIpf,EAAO,CACVzN,KAAKmoB,iBACR,CAGE,GAAInoB,KAAKuC,MAAMkB,QAAQyH,UAAYlL,KAAKuC,MAAMgC,UAAU,YAAa,CACpEvE,KAAKuC,MAAMiC,QAAQ0G,SAASklB,UAAUpwB,KACzC,CAGE,GAAIA,KAAKuC,MAAMkB,QAAQwC,mBAAqB,YAAcjG,KAAKuC,MAAMgC,UAAU,oBAAqB,CACnGvE,KAAKuC,MAAMiC,QAAQyB,iBAAiBmqB,UAAUpwB,KACjD,CAEE,GAAIA,KAAKuC,MAAMkB,QAAQ4sB,aAAc,CACpCrwB,KAAKuC,MAAMkB,QAAQ4sB,aAAarwB,KAAK4J,eACxC,CAGE,GAAI5J,KAAKuC,MAAMkB,QAAQ6sB,eAAiBtwB,KAAKuC,MAAMgC,UAAU,cAAe,CAC3EvE,KAAKuC,MAAMiC,QAAQ+rB,WAAWxD,cAAc/sB,KAC/C,CAEEA,KAAK8oB,YAAc,IACrB,KAAQ,CACN,GAAI9oB,KAAKuC,MAAMkB,QAAQyC,cAAe,CACrClG,KAAKuC,MAAM4D,QAAQimB,gBAAgBpsB,KACtC,CACA,CACA,EAEAke,EAAIze,UAAU+wB,mBAAqB,WAClCxwB,KAAKia,kBAAoB,MAEzB,GAAIja,KAAK2C,SAAW3C,KAAK2C,QAAQuX,eAAiB,KAAM,CACvDla,KAAKmoB,gBAAgB,KACvB,CACA,EAEAjK,EAAIze,UAAU2G,aAAe,SAAUqqB,GACtCzwB,KAAK8oB,YAAc,MACnB9oB,KAAKia,kBAAoB,MAEzB,IAAKja,KAAK+uB,aAAc,CACvB/uB,KAAK2H,OAAS,EACd3H,KAAK8uB,aAAe,EACtB,CAEC,GAAI9uB,KAAK2C,SAAW3C,KAAK2C,QAAQuX,eAAiB,KAAM,CACvDla,KAAK2D,WAAW,KAClB,CAEC,GAAI3D,KAAKuC,MAAMkB,QAAQyH,UAAYlL,KAAKuC,MAAMgC,UAAU,WAAY,MAAO,CAC1EvE,KAAKuC,MAAMiC,QAAQ0G,SAASE,gBAAgBpL,KAAM,MAAO,MAAMwF,SAAQ,SAAUqU,GAChFA,EAAMzT,aAAa,KACtB,GACA,CACA,EAGA8X,EAAIze,UAAU2a,WAAa,SAAU3M,GAEpC,IAAI4b,EAAY,EACZ3hB,EAAY1H,KAAKuC,MAAMkB,QAAQ6sB,cAAgBtwB,KAAK2C,QAAQkK,aAAe,EAE/E7M,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAI3D,EAAS2D,EAAKzD,YAClB,GAAIF,EAAS0hB,EAAW,CACvBA,EAAY1hB,CACf,CACA,IAEC,GAAI8F,EAAO,CACVzN,KAAK2H,OAAStG,KAAKC,IAAI+nB,EAAW3hB,EACpC,KAAQ,CACN1H,KAAK2H,OAAS3H,KAAK+uB,aAAe/uB,KAAK2H,OAAStG,KAAKC,IAAI+nB,EAAW3hB,EACtE,CAEC1H,KAAK8uB,aAAe9uB,KAAK2H,OAAS3H,KAAK2H,OAAS,KAAO,GACvD3H,KAAKgvB,YAAchvB,KAAK2C,QAAQoW,YACjC,EAGAmF,EAAIze,UAAU4a,cAAgB,WAC7Bra,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKolB,WACP,IAEC1wB,KAAKia,kBAAoB,IAC1B,EAEAiE,EAAIze,UAAU0a,gBAAkB,WAC/Bna,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5BA,EAAKqlB,aACP,GACA,EAGAzS,EAAIze,UAAU0oB,gBAAkB,SAAU1a,GAEzC,GAAIA,EAAO,CACVzN,KAAKma,iBACP,CAECna,KAAKoa,WAAW3M,GAEhBzN,KAAKqa,eACN,EASA6D,EAAIze,UAAUixB,UAAY,SAAU/oB,EAAQ8F,GAC3C,GAAIzN,KAAK2H,QAAUA,GAAU8F,EAAO,CAEnCzN,KAAK+uB,aAAe,KAEpB/uB,KAAK2H,OAASA,EACd3H,KAAK8uB,aAAennB,EAASA,EAAS,KAAO,GAE7C3H,KAAKqa,gBAGLra,KAAKgvB,YAAchvB,KAAK2C,QAAQoW,YAClC,CACA,EAGAmF,EAAIze,UAAUoI,UAAY,WACzB,OAAO7H,KAAKgvB,WACb,EAGA9Q,EAAIze,UAAUoK,SAAW,WACxB,OAAO7J,KAAK2C,QAAQwJ,WACrB,EAIA+R,EAAIze,UAAU8b,WAAa,SAAUjQ,GACpC,IAAItJ,EAAQhC,KAAKqL,MAAMpK,QAAQqK,GAE/B,GAAItJ,GAAS,EAAG,CACfhC,KAAKqL,MAAMrE,OAAOhF,EAAO,EAC3B,CACA,EAIAkc,EAAIze,UAAUyf,QAAU,SAAUva,GACjC,GAAI3E,KAAKuC,MAAMgC,UAAU,WAAY,CACpCI,EAAO3E,KAAKuC,MAAMiC,QAAQ+R,QAAQqa,aAAajsB,EAAM,OACvD,CAEC3E,KAAK2E,KAAOA,EAEZ,GAAI3E,KAAKuC,MAAMkB,QAAQuc,cAAgBhgB,KAAKuC,MAAMgC,UAAU,eAAgB,MAAO,CAClFvE,KAAKuC,MAAMiC,QAAQwb,aAAa6Q,SAAS7wB,KAC3C,CACA,EAGAke,EAAIze,UAAU8tB,WAAa,SAAUuD,GACpC,IAAIC,EAAU/wB,KAEd,IAAIgJ,EAAUhJ,KAAK2C,SAAW+K,EAAUjO,UAAUkO,QAAQC,UAAU5N,KAAK2C,SACrEquB,EAAW,GACXC,EAEJ,OAAO,IAAIplB,SAAQ,SAAUC,EAASC,GAErC,UAAW+kB,IAAgB,SAAU,CACpCA,EAAcI,KAAKC,MAAML,EAC5B,CAEE,GAAIC,EAAQxuB,MAAMkB,QAAQuc,cAAgB+Q,EAAQxuB,MAAMgC,UAAU,eAAgB,MAAO,CACxFwsB,EAAQxuB,MAAMiC,QAAQwb,aAAaoR,OACtC,CAGE,GAAIL,EAAQxuB,MAAMgC,UAAU,WAAY,CAEvCysB,EAAWpxB,OAAOgC,OAAOovB,EAAUD,EAAQpsB,MAC3CqsB,EAAWpxB,OAAOgC,OAAOovB,EAAUF,GAEnCG,EAAaF,EAAQxuB,MAAMiC,QAAQ+R,QAAQqa,aAAaI,EAAU,OAAQF,EAC7E,KAAS,CACNG,EAAaH,CAChB,CAGE,IAAK,IAAIO,KAAYJ,EAAY,CAChCF,EAAQpsB,KAAK0sB,GAAYJ,EAAWI,EACvC,CAEE,GAAIN,EAAQxuB,MAAMkB,QAAQuc,cAAgB+Q,EAAQxuB,MAAMgC,UAAU,eAAgB,MAAO,CACxFwsB,EAAQxuB,MAAMiC,QAAQwb,aAAasR,SACtC,CAGE,IAAK,IAAID,KAAYP,EAAa,CAEjC,IAAIhuB,EAAUiuB,EAAQxuB,MAAMmI,cAAcnC,sBAAsB8oB,GAEhEvuB,EAAQ0C,SAAQ,SAAUiB,GACzB,IAAI6E,EAAOylB,EAAQ7K,QAAQzf,EAAO+G,YAElC,GAAIlC,EAAM,CACT,IAAIxL,EAAQ2G,EAAOgK,cAAcwgB,GACjC,GAAI3lB,EAAK6M,YAAcrY,EAAO,CAC7BwL,EAAKimB,oBAAoBzxB,GAEzB,GAAIkJ,EAAS,CACZsC,EAAKuhB,cACZ,CACA,CACA,CACA,GACA,CAEE,GAAIkE,EAAQxuB,MAAMkB,QAAQ+tB,uBAAyBT,EAAQxuB,MAAMkB,QAAQ+Z,SAAWuT,EAAQxuB,MAAMgC,UAAU,aAAc,CACzHwsB,EAAQxuB,MAAMiC,QAAQiZ,UAAUgU,mBAAmBV,EAAQhsB,IAC9D,CAGE,GAAIiE,EAAS,CACZ+nB,EAAQ5I,gBAAgB,MAExB,GAAI4I,EAAQxuB,MAAMkB,QAAQ4sB,aAAc,CACvCU,EAAQxuB,MAAMkB,QAAQ4sB,aAAaU,EAAQnnB,eAC/C,CACA,KAAS,CACNmnB,EAAQjI,YAAc,MACtBiI,EAAQppB,OAAS,EACjBopB,EAAQjC,aAAe,EAC1B,CAEE,GAAIiC,EAAQxuB,MAAMkB,QAAQyH,WAAa,OAAS6lB,EAAQxuB,MAAMgC,UAAU,aAAewsB,EAAQxuB,MAAMiC,QAAQ0G,SAASwmB,aAAaZ,GAAc,CAChJC,EAAQxuB,MAAMiC,QAAQ0G,SAAS6hB,cAAcgE,GAE7C,GAAI/nB,EAAS,CACZ+nB,EAAQxuB,MAAMiC,QAAQ0G,SAASklB,UAAUW,GACzCA,EAAQxuB,MAAMM,WAAWqd,kBAAkB,OAAQ,MAAO,KAC9D,CACA,CAIE6Q,EAAQxuB,MAAMkB,QAAQkuB,WAAWlxB,KAAKswB,EAAQxuB,MAAOwuB,EAAQnnB,gBAE7D,GAAImnB,EAAQxuB,MAAMkB,QAAQsd,YAAa,CACtCgQ,EAAQxuB,MAAMkB,QAAQsd,YAAYtgB,KAAKswB,EAAQxuB,MAAOwuB,EAAQxuB,MAAMM,WAAWme,UAClF,CAEElV,GACF,GACA,EAEAoS,EAAIze,UAAUuhB,QAAU,SAAU2C,GACjC,GAAIA,EAAW,CACd,GAAI3jB,KAAKuC,MAAMgC,UAAU,YAAa,CACrC,OAAOvE,KAAKuC,MAAMiC,QAAQgS,SAASoa,aAAa5wB,KAAM2jB,EACzD,CACA,CAEC,OAAO3jB,KAAK2E,IACb,EAEAuZ,EAAIze,UAAUymB,QAAU,SAAUzf,GACjC,IAAInB,EAAQ,MAEZmB,EAASzG,KAAKuC,MAAMmI,cAAczC,WAAWxB,GAE7CnB,EAAQtF,KAAKqL,MAAM3K,MAAK,SAAU4K,GACjC,OAAOA,EAAK7E,SAAWA,CACzB,IAEC,OAAOnB,CACR,EAEA4Y,EAAIze,UAAUmyB,aAAe,SAAUC,GACtC,OAAO7xB,KAAKqL,MAAM1L,WAAU,SAAU2L,GACrC,OAAOA,IAASumB,CAClB,GACA,EAEA3T,EAAIze,UAAUqyB,qBAAuB,SAAU9vB,GAC9C,IAAI+vB,EAAW,MAEf,GAAI/vB,EAAQhC,KAAKqL,MAAMjL,OAAS,EAAG,CAClC,IAAK,IAAI0F,EAAI9D,EAAQ,EAAG8D,EAAI9F,KAAKqL,MAAMjL,OAAQ0F,IAAK,CACnD,IAAIwF,EAAOtL,KAAKqL,MAAMvF,GAEtB,GAAIwF,EAAK7E,OAAOjC,QAAQ6R,MAAQ3I,EAAUjO,UAAUkO,QAAQC,UAAUtC,EAAKxH,cAAe,CACzF,IAAIkuB,EAAY,KAEhB,UAAW1mB,EAAK7E,OAAOjC,QAAQ6R,KAAK4b,OAAS,WAAY,CACxDD,EAAY1mB,EAAK7E,OAAOjC,QAAQ6R,KAAK4b,MAAM3mB,EAAK1B,eACrD,CAEI,GAAIooB,EAAW,CACdD,EAAWzmB,EACX,KACL,CACA,CACA,CACA,CAEC,OAAOymB,CACR,EAEA7T,EAAIze,UAAUyyB,qBAAuB,SAAUlwB,GAC9C,IAAImwB,EAAW,MAEf,GAAInwB,EAAQ,EAAG,CACd,IAAK,IAAI8D,EAAI9D,EAAQ,EAAG8D,GAAK,EAAGA,IAAK,CACpC,IAAIwF,EAAOtL,KAAKqL,MAAMvF,GAClBksB,EAAY,KAEhB,GAAI1mB,EAAK7E,OAAOjC,QAAQ6R,MAAQ3I,EAAUjO,UAAUkO,QAAQC,UAAUtC,EAAKxH,cAAe,CACzF,UAAWwH,EAAK7E,OAAOjC,QAAQ6R,KAAK4b,OAAS,WAAY,CACxDD,EAAY1mB,EAAK7E,OAAOjC,QAAQ6R,KAAK4b,MAAM3mB,EAAK1B,eACrD,CAEI,GAAIooB,EAAW,CACdG,EAAW7mB,EACX,KACL,CACA,CACA,CACA,CAEC,OAAO6mB,CACR,EAEAjU,EAAIze,UAAUyO,SAAW,WACxB,OAAOlO,KAAKqL,KACb,EAEA6S,EAAIze,UAAU+jB,QAAU,WACvB,IAAIze,EAAM/E,KAAKuC,MAAMM,WAAWygB,eAAetjB,KAAM,MACrD,OAAO+E,GAAO,KACf,EAEAmZ,EAAIze,UAAUgkB,QAAU,WACvB,IAAI1e,EAAM/E,KAAKuC,MAAMM,WAAW6f,eAAe1iB,KAAM,MACrD,OAAO+E,GAAO,KACf,EAEAmZ,EAAIze,UAAU6tB,UAAY,SAAUvrB,EAAIwE,GACvC,IAAI6rB,EAAQpyB,KAAKuC,MAAMM,WAAWob,QAAQlc,GAE1C,GAAIqwB,EAAO,CACVpyB,KAAKuC,MAAMM,WAAWyf,cAActiB,KAAMoyB,GAAQ7rB,GAClDvG,KAAKuC,MAAMM,WAAWqd,kBAAkB,UAAW,MAAO,KAC5D,KAAQ,CACN7T,QAAQC,KAAK,sCAAuCvK,EACtD,CACA,EAEAmc,EAAIze,UAAUsQ,SAAW,WACxB,IAAI4K,EAAU,GAEd3a,KAAKqL,MAAM7F,SAAQ,SAAU8F,GAC5B,IAAKA,EAAKyE,WAAY,CACrB4K,EAAQpV,KAAK+F,EAAK1B,eACrB,CACA,IAEC,OAAO+Q,EAAQva,OAASua,EAAU,IACnC,EAIAuD,EAAIze,UAAU+O,OAAS,WACtB,IAAI6jB,EAAUryB,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAI/J,EAAOiJ,EAEX,GAAIonB,EAAQ9vB,MAAMkB,QAAQmc,SAAWyS,EAAQ9vB,MAAMgC,UAAU,WAAY,CAExE,GAAI8tB,EAAQ9vB,MAAMkB,QAAQ+Z,SAAW6U,EAAQ9vB,MAAMgC,UAAU,aAAc,CAC1E0G,EAAOonB,EAAQpQ,WAAWhX,KAC1BjJ,EAAQiJ,EAAKhK,QAAQoxB,GAErB,GAAIrwB,EAAO,CACVA,EAAQiJ,EAAKjJ,EAAQ,EAC1B,CACA,KAAU,CACNA,EAAQqwB,EAAQ9vB,MAAMM,WAAWsgB,YAAYkP,GAE7C,GAAIrwB,EAAO,CACVA,EAAQqwB,EAAQ9vB,MAAMM,WAAWoI,KAAKjJ,EAAQ,EACnD,CACA,CAEGqwB,EAAQ9vB,MAAMiC,QAAQob,QAAQyB,OAAO,YAAagR,EAAS,CAAE1tB,KAAM0tB,EAAQrR,UAAWG,KAAMnf,EAAOA,MAAOA,GAC7G,CAEEqwB,EAAQC,eAERxmB,GACF,GACA,EAEAoS,EAAIze,UAAU6yB,aAAe,SAAU/R,GAC1BvgB,KAAKuC,MAAMM,WAAWsgB,YAAYnjB,MAE9CA,KAAKuyB,iBAOL,GAAIvyB,KAAKuC,MAAMkB,QAAQuc,cAAgBhgB,KAAKuC,MAAMgC,UAAU,eAAgB,OAK5E,GAAIvE,KAAKwE,QAAQ6mB,MAAO,CACvBrrB,KAAKwE,QAAQ6mB,MAAMxI,UAAU7iB,KAC/B,CAECA,KAAKuC,MAAMM,WAAWyd,UAAUtgB,KAAMugB,GAEtCvgB,KAAKmwB,cAELnwB,KAAK8oB,YAAc,MACnB9oB,KAAKia,kBAAoB,MACzBja,KAAK2C,QAAU,MAEf,GAAI3C,KAAKuC,MAAMkB,QAAQyH,UAAYlL,KAAKuC,MAAMgC,UAAU,WAAY,MAAO,CAC1EvE,KAAKuC,MAAMiC,QAAQ0G,SAASsnB,UAAUxyB,KACxC,CAGC,GAAIA,KAAKuC,MAAMgC,UAAU,eAAgB,CACxC,GAAIvE,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpEvE,KAAKuC,MAAMiC,QAAQ2F,YAAYsoB,eAAezyB,KACjD,KAAS,CACNA,KAAKuC,MAAMiC,QAAQ2F,YAAYC,OAAOpK,KAAKuC,MAAMM,WAAWwH,WAC/D,CACA,CACA,EAEA6T,EAAIze,UAAU8yB,eAAiB,WAE9B,GAAIvyB,KAAKuC,MAAMgC,UAAU,aAAc,CACtCvE,KAAKuC,MAAMiC,QAAQsb,UAAU4S,aAAa1yB,KAAM,KAClD,CAGC,GAAIA,KAAKuC,MAAMgC,UAAU,QAAS,CACjC,GAAIvE,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAAYxV,MAAQ/E,KAAM,CACrDA,KAAKuC,MAAMiC,QAAQ6R,KAAKmE,YAC3B,CACA,CAEC,GAAIxa,KAAKuC,MAAMgC,UAAU,cAAe,CACvCvE,KAAKuC,MAAMiC,QAAQ+gB,WAAWoN,UAAU3yB,KAC1C,CACA,EAEAke,EAAIze,UAAU0wB,YAAc,WAC3B,IAAI1V,EAAYza,KAAKqL,MAAMjL,OAE3B,IAAK,IAAIwyB,EAAM,EAAGA,EAAMnY,EAAWmY,IAAO,CACzC5yB,KAAKqL,MAAM,GAAGmD,QAChB,CACA,EAEA0P,EAAIze,UAAU4gB,KAAO,WACpBrgB,KAAKuyB,iBACLvyB,KAAKmwB,cAEL,GAAInwB,KAAK2C,QAAS,CACjB,MAAO3C,KAAK2C,QAAQQ,WAAY,CAC/BnD,KAAK2C,QAAQiD,YAAY5F,KAAK2C,QAAQQ,WACzC,CAAG,GAAInD,KAAK2C,QAAQsE,WAAY,CAC7BjH,KAAK2C,QAAQsE,WAAWrB,YAAY5F,KAAK2C,QAC5C,CACA,CAEC3C,KAAK2C,QAAU,MACf3C,KAAKwE,QAAU,EAChB,EAEA0Z,EAAIze,UAAUwiB,SAAW,WACxB,OAAOjiB,KAAKwE,QAAQ6mB,OAAS,KAC9B,EAGAnN,EAAIze,UAAUmK,aAAe,WAC5B,IAAK5J,KAAKgS,UAAW,CACpBhS,KAAKgS,UAAY,IAAImM,EAAane,KACpC,CAEC,OAAOA,KAAKgS,SACb,EAGA,IAAI6gB,EAAgB,SAASA,EAAcvnB,GAC1CtL,KAAK8yB,MAAQxnB,CACd,EAEAunB,EAAcpzB,UAAU0Y,SAAW,WAClC,OAAOnY,KAAK8yB,MAAM3a,UACnB,EAEA0a,EAAcpzB,UAAUszB,YAAc,WACrC,OAAO/yB,KAAK8yB,MAAMC,aACnB,EAEAF,EAAcpzB,UAAUuzB,gBAAkB,WACzC,OAAOhzB,KAAK8yB,MAAMG,YACnB,EAEAJ,EAAcpzB,UAAUqE,WAAa,WACpC,OAAO9D,KAAK8yB,MAAMhvB,YACnB,EAEA+uB,EAAcpzB,UAAUyzB,OAAS,WAChC,OAAOlzB,KAAK8yB,MAAM/tB,IAAI6E,cACvB,EAEAipB,EAAcpzB,UAAUuhB,QAAU,WACjC,OAAOhhB,KAAK8yB,MAAM/tB,IAAIic,SACvB,EAEA6R,EAAcpzB,UAAU+N,SAAW,WAClC,OAAOxN,KAAK8yB,MAAMrsB,OAAO+G,UAC1B,EAEAqlB,EAAcpzB,UAAU0zB,UAAY,WACnC,OAAOnzB,KAAK8yB,MAAMrsB,OAAOmD,cAC1B,EAEAipB,EAAcpzB,UAAU2zB,SAAW,SAAUtzB,EAAOuzB,GACnD,UAAWA,GAAU,YAAa,CACjCA,EAAS,IACX,CAECrzB,KAAK8yB,MAAMM,SAAStzB,EAAOuzB,EAC5B,EAEAR,EAAcpzB,UAAU6zB,gBAAkB,WACzCtzB,KAAK8yB,MAAMS,eAAevzB,KAAK8yB,MAAMC,cACtC,EAEAF,EAAcpzB,UAAU+zB,oBAAsB,WAC7CxzB,KAAK8yB,MAAMS,eAAevzB,KAAK8yB,MAAMG,aACtC,EAEAJ,EAAcpzB,UAAU4W,KAAO,SAAU5I,GACxC,OAAOzN,KAAK8yB,MAAMzc,KAAK5I,EACxB,EAEAolB,EAAcpzB,UAAU+a,WAAa,WACpCxa,KAAK8yB,MAAMtY,YACZ,EAEAqY,EAAcpzB,UAAUg0B,SAAW,WAClC,QAASzzB,KAAK8yB,MAAMtuB,QAAQ6R,MAAQrW,KAAK8yB,MAAMtuB,QAAQ6R,KAAKqd,MAC7D,EAEAb,EAAcpzB,UAAUk0B,YAAc,WACrC,GAAIhuB,KAAKpD,MAAMgC,UAAU,OAAQ,MAAO,CACvCvE,KAAK8yB,MAAMvwB,MAAMiC,QAAQ6R,KAAKsd,YAAY3zB,KAAK8yB,MACjD,CACA,EAEAD,EAAcpzB,UAAUm0B,QAAU,WACjC,OAAO5zB,KAAK8yB,MAAMtuB,QAAQuL,UAAY/P,KAAK8yB,MAAMtuB,QAAQuL,SAAS4K,QAAU,IAC7E,EAEAkY,EAAcpzB,UAAUsQ,SAAW,WAClC,OAAO/P,KAAK8yB,MAAM/iB,UACnB,EAEA8iB,EAAcpzB,UAAUo0B,gBAAkB,WACzC,GAAI7zB,KAAK8yB,MAAMvwB,MAAMgC,UAAU,WAAY,MAAO,CACjDvE,KAAK8yB,MAAMvwB,MAAMiC,QAAQuL,SAAS8jB,gBAAgB7zB,KAAK8yB,MACzD,CACA,EAEAD,EAAcpzB,UAAUq0B,IAAM,WAC7B,OAAO9zB,KAAK8yB,MAAMgB,KACnB,EAEAjB,EAAcpzB,UAAUs0B,YAAc,WACrC/zB,KAAK8yB,MAAMiB,aACZ,EAEAlB,EAAcpzB,UAAUmP,SAAW,WAClC,OAAO5O,KAAK8yB,MAAMvwB,KACnB,EAEAswB,EAAcpzB,UAAU2I,SAAW,WAClC,OAAOpI,KAAK8yB,KACb,EAEA,IAAIlY,EAAO,SAASA,EAAKnU,EAAQ1B,GAEhC/E,KAAKuC,MAAQkE,EAAOlE,MACpBvC,KAAKyG,OAASA,EACdzG,KAAK+E,IAAMA,EACX/E,KAAK2C,QAAU,KACf3C,KAAKF,MAAQ,KAEbE,KAAKg0B,SAAW,KAChBh0B,KAAKwE,QAAU,GAEfxE,KAAK2H,OAAS,KACd3H,KAAK8J,MAAQ,KACb9J,KAAK8M,SAAW,KAEhB9M,KAAKgS,UAAY,KAEjBhS,KAAKi0B,OAAS,MAEdj0B,KAAKk0B,OACN,EAKAtZ,EAAKnb,UAAUy0B,MAAQ,WACtBl0B,KAAKmvB,kBAELnvB,KAAK6P,WAEL7P,KAAKm0B,iBAELn0B,KAAKuzB,eAAevzB,KAAKyG,OAAOgK,cAAczQ,KAAK+E,IAAIJ,OAEvD3E,KAAKizB,aAAejzB,KAAKF,KAC1B,EAEA8a,EAAKnb,UAAU0vB,gBAAkB,WAChCnvB,KAAK2C,QAAUU,SAASC,cAAc,OACtCtD,KAAK2C,QAAQgU,UAAY,iBACzB3W,KAAK2C,QAAQgQ,aAAa,OAAQ,YAClC3S,KAAK2C,QAAU3C,KAAK2C,OACrB,EAEAiY,EAAKnb,UAAU00B,eAAiB,WAC/B,IAAIxuB,EAAO3F,KACP+Q,EAAapL,EAAKc,OAAOsK,WACzBpO,EAAUgD,EAAKhD,QACfwC,EAAQnF,KAAKyG,OAAO+G,WACpB4mB,EAAa,CAChBzW,IAAK,aACL0W,OAAQ,WACRC,OAAQ,UAELC,EAAY,CACftwB,KAAM,aACNuwB,MAAO,WACPC,OAAQ,UAIT9xB,EAAQ0B,MAAM6S,UAAYvR,EAAKc,OAAO6J,SAEtC,GAAI3K,EAAKc,OAAO8J,UAAW,CAC1B5N,EAAQ0B,MAAMoV,QAAU,cAExB9W,EAAQ0B,MAAMqwB,WAAaN,EAAWzuB,EAAKc,OAAO8J,YAAc,GAEhE,GAAI5K,EAAKc,OAAO6J,SAAU,CACzB3N,EAAQ0B,MAAMswB,eAAiBJ,EAAU5uB,EAAKc,OAAO6J,WAAa,EACrE,CACA,CAEC,GAAInL,EAAO,CACVxC,EAAQgQ,aAAa,kBAAmBxN,EAC1C,CAGC,GAAIQ,EAAKc,OAAOH,WAAWmQ,SAAU,CACpC,IAAIme,EAAajvB,EAAKc,OAAOH,WAAWmQ,SAAS5N,MAAM,KACvD+rB,EAAWpvB,SAAQ,SAAUmR,GAC5BhU,EAAQY,UAAUC,IAAImT,EACzB,GACA,CAGC,GAAI3W,KAAKuC,MAAMkB,QAAQoxB,wBAA0B,QAAS,CACzDlyB,EAAQgS,iBAAiB,cAAc,SAAUC,GAChDjP,EAAKmvB,kBACR,GACA,CAECnvB,EAAKovB,iBAAiBhkB,GAEtBpL,EAAKqvB,iBAAiBjkB,GAEtBpL,EAAKsvB,iBAAiBlkB,GAEtB,GAAIpL,EAAKc,OAAOjC,QAAQ6R,KAAM,CAC7B1Q,EAAKpD,MAAMiC,QAAQ6R,KAAK6e,WAAWvvB,EACrC,CAEC,GAAIA,EAAKc,OAAOH,WAAW+L,WAAa1M,EAAKpD,MAAMkB,QAAQ6O,cAAgB,OAAS3M,EAAKpD,MAAMgC,UAAU,WAAY,CACpHoB,EAAKpD,MAAMiC,QAAQ+N,QAAQ4iB,eAAexvB,EAC5C,CAGC,IAAKA,EAAKc,OAAOuC,QAAS,CACzBrD,EAAK2I,MACP,CACA,EAEAsM,EAAKnb,UAAUs1B,iBAAmB,SAAUhkB,GAC3C,IAAIpL,EAAO3F,KACP2C,EAAUgD,EAAKhD,QAGnB,GAAIoO,EAAWC,WAAarL,EAAKpD,MAAMkB,QAAQuN,UAAW,CACzDrO,EAAQgS,iBAAiB,SAAS,SAAUC,GAC3C,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWC,UAAW,CACzBD,EAAWC,UAAUvQ,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAC7C,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQuN,UAAW,CACjCrL,EAAKpD,MAAMkB,QAAQuN,UAAUvQ,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACrD,CACA,GACA,CAEC,GAAIjB,EAAWE,cAAgBjR,KAAKuC,MAAMkB,QAAQwN,aAAc,CAC/DtO,EAAQgS,iBAAiB,YAAY,SAAUC,GAC9C,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWE,aAAc,CAC5BF,EAAWE,aAAaxQ,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAChD,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQwN,aAAc,CACpCtL,EAAKpD,MAAMkB,QAAQwN,aAAaxQ,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACxD,CACA,GACA,KAAQ,CACNrP,EAAQgS,iBAAiB,YAAY,SAAUC,GAE9C,GAAIjP,EAAKpD,MAAMgC,UAAU,QAAS,CACjC,GAAIoB,EAAKpD,MAAMiC,QAAQ6R,KAAKkE,cAAgB5U,EAAM,CACjD,MACL,CACA,CAEGiP,EAAEwgB,iBAEF,IACC,GAAI/xB,SAASgyB,UAAW,CAEvB,IAAIC,EAAQjyB,SAASkyB,KAAKC,kBAC1BF,EAAMG,kBAAkB9vB,EAAKhD,SAC7B2yB,EAAM9H,QACX,MAAW,GAAI9C,OAAOgL,aAAc,CAC/B,IAAIJ,EAAQjyB,SAASsyB,cACrBL,EAAMM,WAAWjwB,EAAKhD,SACtB+nB,OAAOgL,eAAeG,kBACtBnL,OAAOgL,eAAeI,SAASR,EACpC,CACA,CAAK,MAAO1gB,GAAG,CACf,GACA,CAEC,GAAI7D,EAAWG,aAAelR,KAAKuC,MAAMkB,QAAQyN,YAAa,CAC7DvO,EAAQgS,iBAAiB,eAAe,SAAUC,GACjD,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWG,YAAa,CAC3BH,EAAWG,YAAYzQ,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAC/C,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQyN,YAAa,CACnCvL,EAAKpD,MAAMkB,QAAQyN,YAAYzQ,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACvD,CACA,GACA,CACA,EAEA4I,EAAKnb,UAAUw1B,iBAAmB,SAAUlkB,GAC3C,IAAIpL,EAAO3F,KACP2C,EAAUgD,EAAKhD,QAEnB,GAAIoO,EAAWO,gBAAkB3L,EAAKpD,MAAMkB,QAAQ6N,eAAgB,CACnE3O,EAAQgS,iBAAiB,cAAc,SAAUC,GAChD,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWO,eAAgB,CAC9BP,EAAWO,eAAe7Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAClD,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQ6N,eAAgB,CACtC3L,EAAKpD,MAAMkB,QAAQ6N,eAAe7Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAC1D,CACA,GACA,CAEC,GAAIjB,EAAWQ,gBAAkB5L,EAAKpD,MAAMkB,QAAQ8N,eAAgB,CACnE5O,EAAQgS,iBAAiB,cAAc,SAAUC,GAChD,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWQ,eAAgB,CAC9BR,EAAWQ,eAAe9Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAClD,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQ8N,eAAgB,CACtC5L,EAAKpD,MAAMkB,QAAQ8N,eAAe9Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAC1D,CACA,GACA,CAEC,GAAIjB,EAAWS,eAAiB7L,EAAKpD,MAAMkB,QAAQ+N,cAAe,CACjE7O,EAAQgS,iBAAiB,aAAa,SAAUC,GAC/C,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWS,cAAe,CAC7BT,EAAWS,cAAc/Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACjD,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQ+N,cAAe,CACrC7L,EAAKpD,MAAMkB,QAAQ+N,cAAc/Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACzD,CACA,GACA,CAEC,GAAIjB,EAAWU,cAAgB9L,EAAKpD,MAAMkB,QAAQgO,aAAc,CAC/D9O,EAAQgS,iBAAiB,YAAY,SAAUC,GAC9C,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWU,aAAc,CAC5BV,EAAWU,aAAahR,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAChD,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQgO,aAAc,CACpC9L,EAAKpD,MAAMkB,QAAQgO,aAAahR,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACxD,CACA,GACA,CAEC,GAAIjB,EAAWW,eAAiB/L,EAAKpD,MAAMkB,QAAQiO,cAAe,CACjE/O,EAAQgS,iBAAiB,aAAa,SAAUC,GAC/C,IAAI5C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWW,cAAe,CAC7BX,EAAWW,cAAcjR,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACjD,CAEG,GAAIrM,EAAKpD,MAAMkB,QAAQiO,cAAe,CACrC/L,EAAKpD,MAAMkB,QAAQiO,cAAcjR,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACzD,CACA,GACA,CACA,EAEA4I,EAAKnb,UAAUu1B,iBAAmB,SAAUjkB,GAC3C,IAAIpL,EAAO3F,KACP2C,EAAUgD,EAAKhD,QACfkS,EACAC,EACAC,EAEJ,GAAIhE,EAAWI,SAAWnR,KAAKuC,MAAMkB,QAAQ0N,QAAS,CACrD4D,EAAM,MAENpS,EAAQgS,iBAAiB,cAAc,SAAUC,GAChDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdzS,EAAQgS,iBAAiB,YAAY,SAAUC,GAC9C,GAAIG,EAAK,CACR,IAAI/C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWI,QAAS,CACvBJ,EAAWI,QAAQ1Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAC5C,CAEI,GAAIrM,EAAKpD,MAAMkB,QAAQ0N,QAAS,CAC/BxL,EAAKpD,MAAMkB,QAAQ0N,QAAQ1Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACpD,CACA,CAEG+C,EAAM,KACT,GACA,CAEC,GAAIhE,EAAWK,YAAcpR,KAAKuC,MAAMkB,QAAQ2N,WAAY,CAC3DyD,EAAS,KAETlS,EAAQgS,iBAAiB,YAAY,SAAUC,GAE9C,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAET,IAAI7C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWK,WAAY,CAC1BL,EAAWK,WAAW3Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAC/C,CAEI,GAAIrM,EAAKpD,MAAMkB,QAAQ2N,WAAY,CAClCzL,EAAKpD,MAAMkB,QAAQ2N,WAAW3Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACvD,CACA,KAAU,CAEN6C,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,GAAI9D,EAAWM,aAAerR,KAAKuC,MAAMkB,QAAQ4N,YAAa,CAC7DyD,EAAU,KAEVnS,EAAQgS,iBAAiB,cAAc,SAAUC,GAChDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACN,IAAI/C,EAAYrM,EAAKiE,eAErB,GAAImH,EAAWM,YAAa,CAC3BN,EAAWM,YAAY5Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EAChD,CAEI,GAAIrM,EAAKpD,MAAMkB,QAAQ4N,YAAa,CACnC1L,EAAKpD,MAAMkB,QAAQ4N,YAAY5Q,KAAKkF,EAAKpD,MAAOqS,EAAG5C,EACxD,CACA,GAAM,IACN,GAAK,CAAEoD,QAAS,OAEdzS,EAAQgS,iBAAiB,YAAY,SAAUC,GAC9CU,aAAaR,GACbA,EAAU,IACb,GACA,CACA,EAGA8F,EAAKnb,UAAU0mB,kBAAoB,WAClC,IAAI4P,EAEJ,GAAI/1B,KAAKuC,MAAMgC,UAAU,UAAW,CACnCwxB,EAAM/1B,KAAKuC,MAAMiC,QAAQ2R,OAAO6f,YAAYh2B,KAC9C,KAAQ,CACN+1B,EAAM/1B,KAAK2C,QAAQ2V,UAAYtY,KAAKF,KACtC,CAEC,cAAei2B,IAAQ,YAAc,YAAc32B,EAAQ22B,IAC1D,IAAK,SACJ,GAAIA,aAAe1d,KAAM,CAGxB,MAAOrY,KAAK2C,QAAQQ,WAAY,CAC/BnD,KAAK2C,QAAQiD,YAAY5F,KAAK2C,QAAQQ,WAC3C,CAAKnD,KAAK2C,QAAQyE,YAAY2uB,EAC9B,KAAU,CACN/1B,KAAK2C,QAAQ2V,UAAY,GAEzB,GAAIyd,GAAO,KAAM,CAChB1pB,QAAQC,KAAK,iJAAkJypB,EACpK,CACA,CACG,MACD,IAAK,YACL,IAAK,OACJ/1B,KAAK2C,QAAQ2V,UAAY,GACzB,MACD,QACCtY,KAAK2C,QAAQ2V,UAAYyd,EAE5B,EAEAnb,EAAKnb,UAAUotB,aAAe,WAC7B,GAAI7sB,KAAKuC,MAAMgC,UAAU,WAAavE,KAAKuC,MAAMiC,QAAQ2R,OAAO0W,aAAc,CAC7E7sB,KAAKuC,MAAMiC,QAAQ2R,OAAO0W,aAAa7sB,KACzC,CACA,EAGA4a,EAAKnb,UAAUq1B,iBAAmB,WACjC,IAAIzkB,EAAUrQ,KAAKyG,OAAO4J,QAE1B,GAAIA,EAAS,CACZ,GAAIA,IAAY,KAAM,CACrBA,EAAUrQ,KAAKF,KAClB,MAAS,UAAWuQ,GAAW,WAAY,CACxCA,EAAUA,EAAQrQ,KAAK4J,gBAEvB,GAAIyG,IAAY,MAAO,CACtBA,EAAU,EACd,CACA,CAEE,UAAWA,IAAY,YAAa,CACnCA,EAAU,EACb,CAEErQ,KAAK2C,QAAQgQ,aAAa,QAAStC,EACrC,KAAQ,CACNrQ,KAAK2C,QAAQgQ,aAAa,QAAS,GACrC,CACA,EAGAiI,EAAKnb,UAAUqE,WAAa,SAAUmyB,GACrC,IAAKj2B,KAAKi0B,OAAQ,CACjBj0B,KAAKi0B,OAAS,KACd,IAAKgC,EAAe,CACnBj2B,KAAKk2B,eACR,CACA,CAEC,OAAOl2B,KAAK2C,OACb,EAEAiY,EAAKnb,UAAU0Y,SAAW,WACzB,OAAOnY,KAAKF,KACb,EAEA8a,EAAKnb,UAAUszB,YAAc,WAC5B,OAAO/yB,KAAKg0B,QACb,EAIApZ,EAAKnb,UAAU2zB,SAAW,SAAUtzB,EAAOuzB,GAE1C,IAAI8C,EAAUn2B,KAAKuxB,oBAAoBzxB,EAAOuzB,GAC1CrhB,EAEJ,GAAImkB,EAAS,CACZ,GAAIn2B,KAAKuC,MAAMkB,QAAQmc,SAAW5f,KAAKuC,MAAMgC,UAAU,WAAY,CAClEvE,KAAKuC,MAAMiC,QAAQob,QAAQyB,OAAO,WAAYrhB,KAAM,CAAEg0B,SAAUh0B,KAAKg0B,SAAUoC,SAAUp2B,KAAKF,OACjG,CAEEkS,EAAYhS,KAAK4J,eAEjB,GAAI5J,KAAKyG,OAAOsK,WAAW0E,WAAY,CACtCzV,KAAKyG,OAAOsK,WAAW0E,WAAWhV,KAAKT,KAAKuC,MAAOyP,EACtD,CAEE,GAAIhS,KAAKuC,MAAMkB,QAAQ+tB,uBAAyBxxB,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CAChHvE,KAAKuC,MAAMiC,QAAQiZ,UAAUgU,mBAAmBzxB,KAAK+E,IACxD,CAEE/E,KAAK6sB,eAEL7sB,KAAKuC,MAAMkB,QAAQgS,WAAWhV,KAAKT,KAAKuC,MAAOyP,GAE/C,GAAIhS,KAAKuC,MAAMkB,QAAQsd,YAAa,CACnC/gB,KAAKuC,MAAMkB,QAAQsd,YAAYtgB,KAAKT,KAAKuC,MAAOvC,KAAKuC,MAAMM,WAAWme,UACzE,CACA,CACA,EAEApG,EAAKnb,UAAU8xB,oBAAsB,SAAUzxB,EAAOuzB,GACrD,IAAI8C,EAAU,MAEd,GAAIn2B,KAAKF,OAASA,EAAO,CAExBq2B,EAAU,KAEV,GAAI9C,EAAQ,CACX,GAAIrzB,KAAKyG,OAAOjC,QAAQ6uB,OAAQ,CAC/BvzB,EAAQE,KAAKuC,MAAMiC,QAAQ+R,QAAQ8f,cAAcr2B,KAAMF,EAC3D,CACA,CACA,CAECE,KAAKuzB,eAAezzB,GAEpB,GAAIq2B,GAAWn2B,KAAKuC,MAAMgC,UAAU,eAAgB,CACnD,GAAIvE,KAAKyG,OAAOH,WAAWmO,SAAWzU,KAAKyG,OAAOH,WAAWoO,WAAY,CACxE,GAAI1U,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CAEpE,GAAIvE,KAAKuC,MAAMkB,QAAQ0G,aAAe,SAAWnK,KAAKuC,MAAMkB,QAAQ0G,aAAe,OAAQ,CAC1FnK,KAAKuC,MAAMiC,QAAQ2F,YAAYC,OAAOpK,KAAKuC,MAAMM,WAAWwH,WACjE,CAEI,GAAIrK,KAAKuC,MAAMkB,QAAQ0G,aAAe,QAAS,CAC9CnK,KAAKuC,MAAMiC,QAAQ2F,YAAYsoB,eAAezyB,KAAK+E,IACxD,CACA,KAAU,CACN/E,KAAKuC,MAAMiC,QAAQ2F,YAAYC,OAAOpK,KAAKuC,MAAMM,WAAWwH,WAChE,CACA,CACA,CAEC,OAAO8rB,CACR,EAEAvb,EAAKnb,UAAU8zB,eAAiB,SAAUzzB,GACzCE,KAAKg0B,SAAWh0B,KAAKF,MAErBE,KAAKF,MAAQA,EAEb,GAAIE,KAAKuC,MAAMkB,QAAQuc,cAAgBhgB,KAAKuC,MAAMgC,UAAU,gBAAiB,CAC5EvE,KAAKuC,MAAMiC,QAAQwb,aAAaoR,OAClC,CAECpxB,KAAKyG,OAAOiK,cAAc1Q,KAAK+E,IAAIJ,KAAM7E,GAEzC,GAAIE,KAAKuC,MAAMkB,QAAQuc,cAAgBhgB,KAAKuC,MAAMgC,UAAU,gBAAiB,CAC5EvE,KAAKuC,MAAMiC,QAAQwb,aAAasR,SAClC,CAEC,GAAItxB,KAAKi0B,OAAQ,CAChBj0B,KAAKk2B,eACP,CACA,EAEAtb,EAAKnb,UAAUy2B,cAAgB,WAC9Bl2B,KAAKmmB,oBACLnmB,KAAK80B,mBAGL,GAAI90B,KAAKuC,MAAMkB,QAAQyQ,kBAAoBlU,KAAKuC,MAAMgC,UAAU,kBAAoBvE,KAAK+E,IAAIkJ,OAAS,MAAO,CAC5GjO,KAAKuC,MAAMiC,QAAQ2P,cAAcC,iBAAiB,OAAQpU,KAAKyG,OAAQzG,KAAK2C,QAC9E,CAEC,IAAK3C,KAAKyG,OAAOH,WAAWgwB,aAAet2B,KAAKyG,OAAOH,WAAWiwB,YAAcv2B,KAAKuC,MAAMgC,UAAU,QAAS,CAC7GvE,KAAKuC,MAAMiC,QAAQyR,KAAKkf,eAAen1B,KACzC,CAGC,GAAIA,KAAKuC,MAAMgC,UAAU,iBAAkB,CAC1CvE,KAAKuC,MAAMiC,QAAQC,cAAcyxB,cAAcl2B,KAAK2C,QAAS3C,KAAKyG,OACpE,CACA,EAEAmU,EAAKnb,UAAUoQ,SAAW,WACzB7P,KAAK8J,MAAQ9J,KAAKyG,OAAOqD,MACzB9J,KAAK2C,QAAQ0B,MAAMyF,MAAQ9J,KAAKyG,OAAOkL,WACxC,EAEAiJ,EAAKnb,UAAUyb,WAAa,WAC3Blb,KAAK8J,MAAQ,GACb9J,KAAK2C,QAAQ0B,MAAMyF,MAAQ,EAC5B,EAEA8Q,EAAKnb,UAAUoK,SAAW,WACzB,OAAO7J,KAAK8J,OAAS9J,KAAK2C,QAAQwJ,WACnC,EAEAyO,EAAKnb,UAAUmX,YAAc,WAC5B5W,KAAK8M,SAAW9M,KAAKyG,OAAOqG,SAC5B9M,KAAK2C,QAAQ0B,MAAMyI,SAAW9M,KAAKyG,OAAOqL,cAC3C,EAEA8I,EAAKnb,UAAUqX,YAAc,WAC5B9W,KAAK4R,SAAW5R,KAAKyG,OAAOmL,SAC5B5R,KAAK2C,QAAQ0B,MAAMuN,SAAW5R,KAAKyG,OAAOoL,cAC3C,EAEA+I,EAAKnb,UAAUs0B,YAAc,WAE5B/zB,KAAK+E,IAAIyrB,oBACV,EAEA5V,EAAKnb,UAAUkxB,YAAc,WAC5B3wB,KAAK2C,QAAQ0B,MAAMsD,OAAS,GAC5B3H,KAAK2H,OAAS,IACf,EAEAiT,EAAKnb,UAAUixB,UAAY,WAC1B1wB,KAAK2H,OAAS3H,KAAK+E,IAAI4C,OACvB3H,KAAK2C,QAAQ0B,MAAMsD,OAAS3H,KAAK+E,IAAI+pB,YACtC,EAEAlU,EAAKnb,UAAUoI,UAAY,WAC1B,OAAO7H,KAAK2H,QAAU3H,KAAK2C,QAAQoW,YACpC,EAEA6B,EAAKnb,UAAU4O,KAAO,WACrBrO,KAAK2C,QAAQ0B,MAAMoV,QAAUzZ,KAAKyG,OAAO8J,UAAY,cAAgB,EACtE,EAEAqK,EAAKnb,UAAU6O,KAAO,WACrBtO,KAAK2C,QAAQ0B,MAAMoV,QAAU,MAC9B,EAEAmB,EAAKnb,UAAU4W,KAAO,SAAU5I,GAC/B,GAAIzN,KAAKuC,MAAMgC,UAAU,OAAQ,MAAO,CACvC,OAAOvE,KAAKuC,MAAMiC,QAAQ6R,KAAKmgB,SAASx2B,KAAMyN,EAChD,CACA,EAEAmN,EAAKnb,UAAU+a,WAAa,WAC3B,GAAIxa,KAAKuC,MAAMgC,UAAU,OAAQ,MAAO,CACvC,IAAIkyB,EAAUz2B,KAAKuC,MAAMiC,QAAQ6R,KAAKqgB,iBAEtC,GAAID,GAAWA,EAAQruB,aAAepI,KAAM,CAC3CA,KAAKuC,MAAMiC,QAAQ6R,KAAKmE,YAC3B,KAAS,CACNnO,QAAQC,KAAK,iEAChB,CACA,CACA,EAEAsO,EAAKnb,UAAUsQ,SAAW,WACzB,GAAI/P,KAAKyG,OAAOjC,QAAQuL,UAAY/P,KAAKuC,MAAMgC,UAAU,WAAY,MAAO,CAC3E,IAAIoyB,EAAQ32B,KAAKuC,MAAMiC,QAAQuL,SAASA,SAAS/P,KAAKyG,OAAOjC,QAAQuL,SAAU/P,KAAMA,KAAKmY,YAE1F,OAAOwe,IAAU,IACnB,KAAQ,CACN,OAAO,IACT,CACA,EAEA/b,EAAKnb,UAAU+O,OAAS,WACvB,IAAKxO,KAAKuC,MAAMM,WAAWoa,aAAejd,KAAK2C,QAAQsE,WAAY,CAClEjH,KAAK2C,QAAQsE,WAAWrB,YAAY5F,KAAK2C,QAC3C,CAEC,GAAI3C,KAAKwE,QAAQuL,UAAY/P,KAAKwE,QAAQuL,SAAS4K,QAAS,CAC3D3a,KAAKuC,MAAMiC,QAAQuL,SAAS8jB,gBAAgB7zB,KAC9C,CAEC,GAAIA,KAAKwE,QAAQ6R,MAAQrW,KAAKwE,QAAQ6R,KAAKqd,OAAQ,CAClD1zB,KAAKuC,MAAMiC,QAAQ6R,KAAKsd,YAAY3zB,KACtC,CAEC,GAAIA,KAAKuC,MAAMkB,QAAQmc,QAAS,CAC/B5f,KAAKuC,MAAMiC,QAAQob,QAAQgX,sBAAsB52B,KACnD,CAECA,KAAK2C,QAAU,MACf3C,KAAKyG,OAAO8U,WAAWvb,MACvBA,KAAK+E,IAAIwW,WAAWvb,MACpBA,KAAK62B,MAAQ,EACd,EAIAjc,EAAKnb,UAAUq0B,IAAM,WAEpB,IAAInuB,EAAO3F,KACP+xB,EAAW,MACX/vB,EAAQhC,KAAK+E,IAAI6sB,aAAa5xB,MAElC,MAAO,CACN82B,KAAM,SAASA,IACd,IAAI/E,EAAW/xB,KAAKw0B,QAChBhR,EAEJ,IAAKuO,EAAU,CACdvO,EAAU7d,EAAKpD,MAAMM,WAAWygB,eAAe3d,EAAKZ,IAAK,MAEzD,GAAIye,EAAS,CACZuO,EAAWvO,EAAQsO,sBAAsB,GAEzC,GAAIC,EAAU,CACbA,EAAS1b,OACT,OAAO,IACb,CACA,CACA,KAAU,CACN,OAAO,IACX,CAEG,OAAO,KACV,EACE0gB,KAAM,SAASA,IACd,IAAIhF,EAAW/xB,KAAKiE,OAChBwf,EAEJ,IAAKsO,EAAU,CACdtO,EAAU9d,EAAKpD,MAAMM,WAAW6f,eAAe/c,EAAKZ,IAAK,MAEzD,GAAI0e,EAAS,CACZsO,EAAWtO,EAAQyO,qBAAqBzO,EAAQpY,MAAMjL,QAEtD,GAAI2xB,EAAU,CACbA,EAAS1b,OACT,OAAO,IACb,CACA,CACA,KAAU,CACN,OAAO,IACX,CAEG,OAAO,KACV,EACEpS,KAAM,SAASA,IAEd8tB,EAAWpsB,EAAKZ,IAAImtB,qBAAqBlwB,GAEzC,GAAI+vB,EAAU,CACbA,EAAS1b,OACT,OAAO,IACX,KAAU,CACN,OAAO,KACX,CACA,EACEme,MAAO,SAASA,IACfzC,EAAWpsB,EAAKZ,IAAI+sB,qBAAqB9vB,GAEzC,GAAI+vB,EAAU,CACbA,EAAS1b,OACT,OAAO,IACX,KAAU,CACN,OAAO,KACX,CACA,EACE2gB,GAAI,SAASA,IACZ,IAAIxT,EAAU7d,EAAKpD,MAAMM,WAAW6f,eAAe/c,EAAKZ,IAAK,MAE7D,GAAIye,EAAS,CACZA,EAAQnY,MAAMrJ,GAAOqU,MACzB,CACA,EACE4gB,KAAM,SAASA,IACd,IAAIzT,EAAU7d,EAAKpD,MAAMM,WAAWygB,eAAe3d,EAAKZ,IAAK,MAE7D,GAAIye,EAAS,CACZA,EAAQnY,MAAMrJ,GAAOqU,MACzB,CACA,EAGA,EAEAuE,EAAKnb,UAAUytB,SAAW,WACzBltB,KAAK+E,IAAI6sB,aAAa5xB,KACvB,EAGA4a,EAAKnb,UAAUmK,aAAe,WAE7B,IAAK5J,KAAKgS,UAAW,CACpBhS,KAAKgS,UAAY,IAAI6gB,EAAc7yB,KACrC,CAEC,OAAOA,KAAKgS,SACb,EACA,IAAIklB,EAAgB,SAASA,EAAc30B,GAC1CvC,KAAKuC,MAAQA,EACbvC,KAAKsJ,OAAS,MACdtJ,KAAK2C,QAAU3C,KAAKsD,gBACpBtD,KAAKopB,SAAW,MAChBppB,KAAKm3B,MAAQ,GAEbn3B,KAAKo3B,aACN,EAEAF,EAAcz3B,UAAU6D,cAAgB,WACvC,IAAIF,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,oBAEjB,OAAOJ,CACR,EAEA8zB,EAAcz3B,UAAU23B,YAAc,SAAUz0B,GAC/C,GAAI3C,KAAKuC,MAAMkB,QAAQ4zB,cAAe,CAErC,OAAQj4B,EAAQY,KAAKuC,MAAMkB,QAAQ4zB,gBAClC,IAAK,SAEJ,GAAIr3B,KAAKuC,MAAMkB,QAAQ4zB,cAAc,KAAO,IAAK,CAChDr3B,KAAK2C,QAAQ2V,UAAYtY,KAAKuC,MAAMkB,QAAQ4zB,aACjD,KAAW,CACNr3B,KAAKopB,SAAW,KAChBppB,KAAK2C,QAAUU,SAASi0B,cAAct3B,KAAKuC,MAAMkB,QAAQ4zB,cAC9D,CACI,MACD,QACCr3B,KAAK2C,QAAU3C,KAAKuC,MAAMkB,QAAQ4zB,cAClC,MAEJ,CACA,EAEAH,EAAcz3B,UAAUqE,WAAa,WACpC,OAAO9D,KAAK2C,OACb,EAEAu0B,EAAcz3B,UAAU83B,OAAS,SAAU50B,EAAS2H,GACnDtK,KAAKw3B,SAASltB,GAEdtK,KAAK2C,QAAQyE,YAAYzE,GACzB3C,KAAKuC,MAAMM,WAAWmF,iBACvB,EAEAkvB,EAAcz3B,UAAUqtB,QAAU,SAAUnqB,EAAS2H,GACpDtK,KAAKw3B,SAASltB,GAEdtK,KAAK2C,QAAQO,aAAaP,EAAS3C,KAAK2C,QAAQQ,YAChDnD,KAAKuC,MAAMM,WAAWmF,iBACvB,EAEAkvB,EAAcz3B,UAAUioB,OAAS,SAAU/kB,GAC1CA,EAAQsE,WAAWrB,YAAYjD,GAC/B3C,KAAKy3B,YACN,EAEAP,EAAcz3B,UAAUg4B,WAAa,SAAUhqB,GAC9C,IAAKzN,KAAK2C,QAAQQ,YAAcsK,EAAO,CACtC,IAAKzN,KAAKopB,SAAU,CACnBppB,KAAK2C,QAAQsE,WAAWrB,YAAY5F,KAAK2C,QAC5C,CACE3C,KAAKsJ,OAAS,KAChB,CAGA,EAEA4tB,EAAcz3B,UAAU+3B,SAAW,SAAUltB,GAC5C,IAAKtK,KAAKsJ,OAAQ,CACjBtJ,KAAKsJ,OAAS,KACd,IAAKtJ,KAAKopB,SAAU,CACnBppB,KAAKuC,MAAMI,QAAQyE,YAAYpH,KAAK8D,cACpC9D,KAAKuC,MAAMI,QAAQ0B,MAAMoV,QAAU,EACtC,CACA,CAEC,GAAInP,EAAQ,CACXtK,KAAKm3B,MAAM5xB,KAAK+E,EAClB,CACA,EAEA4sB,EAAcz3B,UAAU4G,OAAS,WAChCrG,KAAKm3B,MAAM3xB,SAAQ,SAAUkyB,GAC5BA,EAAKC,cACP,GACA,EAEA,IAAIjqB,EAAY,SAASA,EAAU/K,EAASc,GAE3CzD,KAAKyD,QAAU,GAEfzD,KAAK0K,cAAgB,KACrB1K,KAAK6C,WAAa,KAClB7C,KAAK+N,cAAgB,KACrB/N,KAAKmG,QAAU,KAGfnG,KAAK2pB,QAAU,GACf3pB,KAAK43B,YAAc,MACnB53B,KAAK63B,cAAgB,MACrB73B,KAAK8qB,IAAM,MAEX9qB,KAAKwE,QAAU,GAEf,GAAIxE,KAAK83B,kBAAkBn1B,GAAU,CACpC3C,KAAK+3B,kBAAkBt0B,GAAW,IAClCzD,KAAKg4B,SACP,CAECtqB,EAAUjO,UAAUw4B,MAAMC,SAASl4B,KACpC,EAGA0N,EAAUjO,UAAU04B,eAAiB,CAEpCxwB,OAAQ,MACRD,UAAW,MACX2hB,UAAW,MAEXjc,OAAQ,UACR4Y,uBAAwB,MAExBhZ,eAAgB,GAChB6J,eAAgB,MAChB9O,sBAAuB,MACvBqwB,gBAAiB,MAEjBlkB,iBAAkB,KAClBoc,cAAe,MACf9G,WAAY,KAEZ1mB,QAAS,GAETkU,aAAc,GACdC,cAAe,GACfE,eAAgB,GAGhBxS,KAAM,GAEN8a,YAAa,MACb3a,uBAAwB,MAExBkb,aAAc,MAEdlN,qBAAsB,IAEtBiE,SAAU,MACVrD,eAAgB,MAChBmhB,sBAAuB,OAEvBwD,YAAa,MACbC,cAAe,MACfC,oBAAqB,MAErBC,sBAAuB,KAEvBC,iBAAkB,MAElBC,WAAY,KACZC,mBAAoB,MACpBC,kBAAmB,sCAEnBvB,cAAe,MAEfr1B,MAAO,KAEP62B,cAAe,OAEfC,YAAa,GAEbC,aAAc,MAEdloB,sBAAuB,KAEvBmoB,UAAW,MACXC,oBAAqB,KACrBC,oBAAqB,MACrBC,uBAAwB,MACxBC,sBAAuB,SACvBC,qBAAsB,QACtBC,qBAAsB,SAEtBC,gBAAiB,SAASA,IAAkB,EAC5CC,gBAAiB,SAASA,IAAkB,EAC5CC,oBAAqB,SAASA,IAAsB,EAEpDC,sBAAuB,MACvBC,cAAe,SAASA,EAAch1B,EAAMi1B,GAC3C,OAAOA,CACT,EACCC,iBAAkB,MAClBC,eAAgB,GAChBC,iBAAkB,SAElB7uB,SAAU,MACV8uB,eAAgB,KAChBC,aAAc,KACdC,sBAAuB,MACvBC,sBAAuB,KACvBC,oBAAqB,EACrBC,mBAAoB,YACpBC,wBAAyB,MACzBC,sBAAuB,MACvBC,sBAAuB,MACvBC,oBAAqB,SAASA,IAAsB,EACpDC,qBAAsB,SAASA,IAAuB,EACtDC,yBAA0B,MAC1BC,wBAAyB,MAEzBC,YAAa,MACbC,eAAgB,MAChBC,YAAa,MACbC,YAAa,MACbC,eAAgB,KAChBC,YAAa,KACbC,iBAAkB,KAClBC,cAAe,UACfC,YAAa,GAEb1Z,UAAW,SAEXuD,WAAY,YACZoW,oBAAqB,OACrBC,2BAA4B,KAC5BpW,sBAAuB,KACvBqW,gBAAiB,SAASA,EAAgB72B,EAAMI,GAC/C,OAAO,IACT,EAEC02B,4BAA6B,IAC7BnnB,wBAAyB,MAEzB5Q,cAAe,KAEfkc,QAAS,MAET8b,OAAQ,MACRC,MAAO,GAEP5U,WAAY,KACZuC,iBAAkB,EAClBpjB,cAAe,MAEf01B,iBAAkB,MAClBC,eAAgB,MAChBC,iBAAkB,MAClBC,cAAe,GACfC,gBAAiB,KACjBC,sBAAuB,MACvBC,sBAAuB,MAEvBvxB,YAAa,MAEb1E,iBAAkB,MAClBk2B,kCAAmC,KACnCC,sCAAuC,KACvCC,kCAAmC,MAEnC/c,WAAY,MACZgd,eAAgB,MAChBC,sBAAuB,EACvBC,sBAAuB,EACvBC,uBAAwB,MACxBC,kBAAmB,MACnBC,mBAAoB,GACpBC,uBAAwB,GACxB/a,iBAAkB,OAElBgb,QAAS,MACTC,iBAAkB,MAClBC,WAAY,GACZC,WAAY,MACZC,gBAAiB,OACjBC,gBAAiB,MACjBC,WAAY,KACZC,kBAAmB,MACnBC,gBAAiB,MACjBjZ,cAAe,MACfJ,YAAa,MACblG,oBAAqB,MACrBwf,yBAA0B,EAC1BC,gCAAiC,EAEjC/f,QAAS,MACTggB,eAAgB,KAChBC,YAAa,MACbjM,sBAAuB,MAEvBkM,YAAa,MACbC,iBAAkB,KAClBC,qBAAsB,KACtBC,sBAAuB,KACvBC,oBAAqB,KAErBC,iBAAkB,MAElBvpB,eAAgB,MAEhBlC,YAAa,MACb0rB,2BAA4B,MAC5BC,6BAA8B,MAC9BC,kBAAmB,MACnBC,oBAAqB,SACrBC,wBAAyB,SAASA,IAA0B,EAC5DC,gBAAiB,SAASA,IAAkB,EAC5CC,sBAAuB,SAASA,IAAwB,EACxDC,uBAAwB,SAASA,IAAyB,EAC1DC,0BAA2B,SAASA,IAA4B,EAChEC,oBAAqB,SAASA,IAAsB,EACpDC,0BAA2B,SAASA,IAA4B,EAChEC,yBAA0B,SAASA,IAA2B,EAC9DC,uBAAwB,SAASA,IAAyB,EAE1D/f,oBAAqB,MACrBC,qBAAsB,KAEtB9S,uBAAwB,OACxBC,wBAAyB,KAEzBokB,aAAc,MACdwO,kBAAmB,KACnBC,sBAAuB,KACvBC,uBAAwB,KAExB5X,YAAa,MAGb6X,cAAe,SAASA,IAAgB,EACxCC,WAAY,SAASA,IAAa,EAGlCjY,cAAe,SAASA,IAAgB,EACxCI,eAAgB,SAASA,IAAiB,EAG1CmI,SAAU,MACVC,YAAa,MACbC,WAAY,MACZM,OAAQ,MACRC,UAAW,MACXC,WAAY,MACZP,cAAe,MACfC,cAAe,MACfC,aAAc,MACdC,YAAa,MACbC,aAAc,MACdT,eAAgB,MAChBC,aAAc,MACdnN,SAAU,SAASA,IAAW,EAC9BrB,WAAY,SAASA,IAAa,EAClCyB,SAAU,SAASA,IAAW,EAC9BoP,WAAY,SAASA,IAAa,EAClCuN,oBAAqB,SAASA,IAAsB,EACpDC,YAAa,SAASA,IAAc,EACpCC,cAAe,SAASA,IAAgB,EACxCC,WAAY,SAASA,IAAa,EAIlCruB,UAAW,MACXC,aAAc,MACdC,YAAa,MACbC,QAAS,MACTC,WAAY,MACZC,YAAa,MACbC,eAAgB,MAChBC,eAAgB,MAChBC,cAAe,MACfC,aAAc,MACdC,cAAe,MACfgE,YAAa,SAASA,IAAc,EACpCD,WAAY,SAASA,IAAa,EAClCE,kBAAmB,SAASA,IAAoB,EAGhDlL,YAAa,MACb60B,cAAe,SAASA,IAAgB,EACxC9nB,mBAAoB,SAASA,IAAqB,EAClD8B,wBAAyB,SAASA,IAA0B,EAG5DimB,cAAe,SAASA,IAAgB,EACxCC,aAAc,SAASA,IAAe,EAGtC9f,YAAa,SAASA,IAAc,EACpCS,WAAY,SAASA,IAAa,EAClCsf,WAAY,MACZ1e,YAAa,MAGb2e,eAAgB,SAASA,IAAiB,EAC1CC,aAAc,MACdC,UAAW,SAASA,IAAY,EAGhCC,cAAe,MACfC,aAAc,MAGdC,YAAa,SAASA,IAAc,EACpCC,WAAY,SAASA,IAAa,EAGlCC,mBAAoB,QACpBC,qBAAsB,MACtBC,aAAc,SAASA,IAAe,EACtCC,YAAa,MACbC,uBAAwB,SAASA,IAAyB,EAC1DC,WAAY,MACZC,cAAe,MACfC,aAAc,MACdC,iBAAkB,MAClBC,eAAgB,MAChBC,SAAU,MACVC,YAAa,MACbC,aAAc,MAEd12B,YAAa,KAGb22B,WAAY,SAASA,IAAa,EAGlCC,UAAW,SAASA,IAAY,EAGhCC,eAAgB,WAChBC,iBAAkB,SAASA,IAAmB,EAG9CC,YAAa,SAASA,IAAc,EACpCC,YAAa,SAASA,IAAc,EAGpCn9B,iBAAkB,SAASA,IAAmB,EAC9C6Z,eAAgB,SAASA,IAAiB,GAG3CnQ,EAAUjO,UAAUs4B,kBAAoB,SAAUt0B,GAGjD,GAAIA,EAAQoN,wBAA0B,MAAO,CAC5C,IAAK,IAAI5L,KAAOxB,EAAS,CACxB,UAAWzD,KAAKm4B,eAAelzB,KAAS,YAAa,CACpDoH,QAAQC,KAAK,oCAAqCrH,EACtD,CACA,CACA,CAGC,IAAK,IAAIA,KAAOjF,KAAKm4B,eAAgB,CACpC,GAAIlzB,KAAOxB,EAAS,CACnBzD,KAAKyD,QAAQwB,GAAOxB,EAAQwB,EAC/B,KAAS,CACN,GAAIvF,MAAM2F,QAAQrF,KAAKm4B,eAAelzB,IAAO,CAC5CjF,KAAKyD,QAAQwB,GAAOrF,OAAOgC,OAAO,GAAI5B,KAAKm4B,eAAelzB,GAC9D,MAAU,GAAI7F,EAAQY,KAAKm4B,eAAelzB,MAAU,UAAYjF,KAAKm4B,eAAelzB,KAAS,KAAM,CAC/FjF,KAAKyD,QAAQwB,GAAOrF,OAAOgC,OAAO,GAAI5B,KAAKm4B,eAAelzB,GAC9D,KAAU,CACNjF,KAAKyD,QAAQwB,GAAOjF,KAAKm4B,eAAelzB,EAC5C,CACA,CACA,CACA,EAEAyI,EAAUjO,UAAUq4B,kBAAoB,SAAUn1B,GAEjD,UAAW0F,cAAgB,aAAe1F,aAAmB0F,YAAa,CACzErI,KAAK2C,QAAUA,EACf,OAAO,IACT,MAAQ,UAAWA,IAAY,SAAU,CACvC3C,KAAK2C,QAAUU,SAASi0B,cAAc30B,GAEtC,GAAI3C,KAAK2C,QAAS,CACjB,OAAO,IACV,KAAS,CACN0J,QAAQ+T,MAAM,kEAAmEzd,GACjF,OAAO,KACV,CACA,KAAQ,CACN0J,QAAQ+T,MAAM,uDAAwDzd,GACtE,OAAO,KACT,CACA,EAEA+K,EAAUjO,UAAU2hC,SAAW,WAC9B,IAAI/8B,EAAQqmB,OAAO2W,iBAAiBrhC,KAAK2C,SAEzC,OAAQ3C,KAAKyD,QAAQo1B,eACpB,IAAK,OACJ,GAAIx0B,EAAMi9B,YAAc,MAAO,CAC9B,KACJ,CAEE,IAAK,MACJthC,KAAK2C,QAAQY,UAAUC,IAAI,iBAC3BxD,KAAK8qB,IAAM,KACX,MAED,IAAK,MACJ9qB,KAAK2C,QAAQY,UAAUC,IAAI,iBAE5B,QACCxD,KAAK8qB,IAAM,MAEd,EAGApd,EAAUjO,UAAUwS,4BAA8B,WAGjD,GAAIjS,KAAKyD,QAAQm4B,kBAAoB57B,KAAKyD,QAAQo4B,gBAAkB77B,KAAKyD,QAAQq4B,iBAAkB,CAClG,IAAK97B,KAAKyD,QAAQkH,YAAa,CAC9B3K,KAAKyD,QAAQkH,YAAc,EAC9B,CACA,CAEC,GAAI3K,KAAKyD,QAAQg8B,WAAY,CAC5BpzB,QAAQC,KAAK,0GACbtM,KAAKyD,QAAQsd,YAAc/gB,KAAKyD,QAAQg8B,UAC1C,CAEC,GAAIz/B,KAAKyD,QAAQi2B,sBAAuB,CACvCrtB,QAAQC,KAAK,yEACf,CAEC,UAAWtM,KAAKyD,QAAQ89B,sBAAwB,YAAa,CAC5DvhC,KAAKyD,QAAQ+9B,cAAgBxhC,KAAKyD,QAAQ89B,oBAC1Cl1B,QAAQC,KAAK,gJACf,CAEC,GAAItM,KAAKyD,QAAQ03B,mBAAqB,KAAM,CAC3C9uB,QAAQC,KAAK,sFAEbtM,KAAKyD,QAAQkH,YAAYywB,cAAgB,QAC3C,CAEC,GAAIp7B,KAAKyD,QAAQw3B,iBAAmB,KAAM,CACzC5uB,QAAQC,KAAK,kFAEbtM,KAAKyD,QAAQkH,YAAYuwB,YAAcl7B,KAAKyD,QAAQw3B,cACtD,CAEC,GAAIj7B,KAAKyD,QAAQm4B,iBAAkB,CAClCvvB,QAAQC,KAAK,oFAEb,GAAItM,KAAKyD,QAAQkH,cAAgB,aAAe3K,KAAKyD,QAAQkH,YAAY7H,UAAY,YAAa,CACjG9C,KAAKyD,QAAQkH,YAAY7H,QAAU,IACtC,CACA,CAEC,GAAI9C,KAAKyD,QAAQo4B,eAAgB,CAChCxvB,QAAQC,KAAK,kFAEb,GAAItM,KAAKyD,QAAQkH,cAAgB,aAAe3K,KAAKyD,QAAQkH,YAAYkL,OAAS,YAAa,CAC9F7V,KAAKyD,QAAQkH,YAAYkL,KAAO,IACnC,CACA,CAEC,GAAI7V,KAAKyD,QAAQq4B,iBAAkB,CAClCzvB,QAAQC,KAAK,oFAEb,GAAItM,KAAKyD,QAAQkH,cAAgB,aAAe3K,KAAKyD,QAAQkH,YAAYmE,SAAW,YAAa,CAChG9O,KAAKyD,QAAQkH,YAAYmE,OAAS,IACrC,CACA,CAEC,GAAI9O,KAAKyD,QAAQ20B,gBAAiB,CACjC/rB,QAAQC,KAAK,6FAEbtM,KAAKyD,QAAQsE,sBAAwB/H,KAAKyD,QAAQ20B,eACpD,CACA,EAEA1qB,EAAUjO,UAAUgiC,gBAAkB,WAErCzhC,KAAK2C,QAAQY,UAAUC,IAAI,0BAE3B,GAAIknB,OAAOgL,aAAc,CACxB,GAAIhL,OAAOgL,eAAegM,MAAO,CAEhChX,OAAOgL,eAAegM,OACzB,MAAS,GAAIhX,OAAOgL,eAAeG,gBAAiB,CAEjDnL,OAAOgL,eAAeG,iBACzB,CACA,MAAQ,GAAIxyB,SAASgyB,UAAW,CAE9BhyB,SAASgyB,UAAUqM,OACrB,CAEC1hC,KAAK2C,QAAQY,UAAUmkB,OAAO,yBAC/B,EAGAha,EAAUjO,UAAUu4B,QAAU,WAC7Bh4B,KAAK2hC,uBAEL3hC,KAAKiS,8BAELjS,KAAK4hC,cAEL5hC,KAAKohC,WAEL,GAAIphC,KAAK2C,QAAQk/B,UAAY,QAAS,CACrC,GAAI7hC,KAAKuE,UAAU,kBAAmB,MAAO,CAC5CvE,KAAKwE,QAAQs9B,gBAAgBC,YAChC,CACA,CAEC/hC,KAAK0K,cAAgB,IAAIpI,EAActC,MACvCA,KAAK6C,WAAa,IAAI2Y,EAAWxb,MACjCA,KAAK+N,cAAgB,IAAImpB,EAAcl3B,MAEvCA,KAAK0K,cAAc9G,cAAc5D,KAAK6C,YACtC7C,KAAK6C,WAAWya,iBAAiBtd,KAAK0K,eAEtC,GAAI1K,KAAKyD,QAAQyC,cAAe,CAC/BlG,KAAKmG,QAAU,IAAI8jB,EAAQjqB,KAC7B,CAECA,KAAKgiC,gBAELhiC,KAAKiiC,kBACN,EAGAv0B,EAAUjO,UAAUkiC,qBAAuB,WAC1C3hC,KAAKyD,QAAQX,QAAU9C,KAAKyD,QAAQX,QAAQuiB,MAAM,GAElD,IAAKrlB,KAAKyD,QAAQuc,aAAc,CAC/BhgB,KAAKyD,QAAQkB,KAAO3E,KAAKyD,QAAQkB,KAAK0gB,MAAM,EAC9C,CACA,EAGA3X,EAAUjO,UAAUuiC,cAAgB,WACnC,IAAIE,EAAUliC,KAEd,IAAI2C,EAAU3C,KAAK2C,QACfw/B,EAAMniC,KAAKwE,QACXf,EAAUzD,KAAKyD,QAEnBA,EAAQu7B,cAAcv+B,KAAKT,MAE3B2C,EAAQY,UAAUC,IAAI,aACtBb,EAAQgQ,aAAa,OAAQ,QAG7B,MAAOhQ,EAAQQ,WAAY,CAC1BR,EAAQiD,YAAYjD,EAAQQ,WAC9B,CACC,GAAIM,EAAQkE,OAAQ,CACnBlE,EAAQkE,OAAShG,MAAM8B,EAAQkE,QAAUlE,EAAQkE,OAASlE,EAAQkE,OAAS,KAC3EhF,EAAQ0B,MAAMsD,OAASlE,EAAQkE,MACjC,CAGC,GAAIlE,EAAQiE,YAAc,MAAO,CAChCjE,EAAQiE,UAAY/F,MAAM8B,EAAQiE,WAAajE,EAAQiE,UAAYjE,EAAQiE,UAAY,KACvF/E,EAAQ0B,MAAMqD,UAAYjE,EAAQiE,SACpC,CAGC,GAAIjE,EAAQ4lB,YAAc,MAAO,CAChC5lB,EAAQ4lB,UAAY1nB,MAAM8B,EAAQ4lB,WAAa5lB,EAAQ4lB,UAAY5lB,EAAQ4lB,UAAY,KACvF1mB,EAAQ0B,MAAMglB,UAAY5lB,EAAQ4lB,SACpC,CAECrpB,KAAK0K,cAAc/G,aACnB3D,KAAK6C,WAAWc,aAEhB3D,KAAKoiC,iBAEL,GAAIpiC,KAAKuE,UAAU,SAAU,MAAO,CACnC49B,EAAI/0B,OAAOzJ,WAAWF,EAAQ2J,OAChC,CAIC+0B,EAAIxuB,SAAShQ,aAEb,GAAIF,EAAQ6Q,0BAA4B,MAAO,CAC9C6tB,EAAIxuB,SAAS0uB,2BAA2B5+B,EAAQ6Q,wBAClD,CAEC,IAAK,IAAIonB,KAAUj4B,EAAQk4B,MAAO,CACjCwG,EAAIxuB,SAAS2uB,YAAY5G,EAAQj4B,EAAQk4B,MAAMD,GACjD,CAECyG,EAAIxuB,SAAS4uB,UAAU9+B,EAAQi4B,QAG/B,UAAWj4B,EAAQ0jB,aAAe,SAAU,CAE3C,IAAI/jB,EAAKC,SAASC,cAAc,OAChCF,EAAGG,UAAUC,IAAI,yBAEjB,IAAIg/B,EAAOn/B,SAASC,cAAc,QAClCk/B,EAAKlqB,UAAY7U,EAAQ0jB,YAEzB/jB,EAAGgE,YAAYo7B,GAEf/+B,EAAQ0jB,YAAc/jB,CACxB,CAGCT,EAAQyE,YAAYpH,KAAK0K,cAAc5G,cACvCnB,EAAQyE,YAAYpH,KAAK6C,WAAWiB,cAEpC,GAAIL,EAAQ4zB,cAAe,CAC1Br3B,KAAK+N,cAAcypB,UACrB,CAEC,GAAI/zB,EAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,MAAO,CAC/D49B,EAAIx3B,YAAYhH,YAClB,CAEC,GAAIF,EAAQ6O,aAAetS,KAAKuE,UAAU,WAAY,CACrD49B,EAAI5vB,QAAQ5O,YACd,CAEC,GAAIF,EAAQgc,aAAezf,KAAKyD,QAAQkB,KAAM,CAC7C3E,KAAK0K,cAAchG,2BAA2B1E,KAAKyD,QAAQkB,KAC7D,CAEC,GAAI3E,KAAKuE,UAAU,eAAgB,CAClC49B,EAAIh4B,YAAYxG,YAClB,CAEC3D,KAAK0K,cAAchF,WAAWjC,EAAQX,SAEtC,GAAIW,EAAQyH,UAAYlL,KAAKuE,UAAU,WAAY,MAAO,CACzD49B,EAAIj3B,SAASvH,YACf,CAEC,GAAI3D,KAAKuE,UAAU,cAAe,CACjCvE,KAAKwE,QAAQ+gB,WAAW5hB,YAC1B,CAEC,IAAKF,EAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAAS49B,EAAIx3B,YAAYC,OAAOiL,MAAQpS,EAAQ40B,cAAgBr4B,KAAKuE,UAAU,OAAQ,MAAO,CACvJ,IAAI0f,EAAU,GAEd,GAAIxgB,EAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAAS49B,EAAIx3B,YAAYC,OAAOiL,KAAM,CAC9FoO,EAAUke,EAAIx3B,YAAY83B,KAAK,QAE/B,GAAIxe,IAAY,OAASxgB,EAAQ40B,YAAa,CAC7CpU,EAAUxgB,EAAQ40B,WACtB,CACA,MAAS,GAAI50B,EAAQ40B,YAAa,CAC/BpU,EAAUxgB,EAAQ40B,WACrB,CAEE8J,EAAItsB,KAAK6sB,QAAQze,EACnB,CAEC,IAAKxgB,EAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAAS49B,EAAIx3B,YAAYC,OAAOkE,QAAUrL,EAAQ60B,gBAAkBt4B,KAAKuE,UAAU,SAAU,MAAO,CAC7J,IAAI8f,EAAU,GAEd,GAAI5gB,EAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAAS49B,EAAIx3B,YAAYC,OAAOkE,OAAQ,CAChGuV,EAAU8d,EAAIx3B,YAAY83B,KAAK,UAE/B,GAAIpe,IAAY,OAAS5gB,EAAQ60B,cAAe,CAC/CjU,EAAU5gB,EAAQ60B,aACtB,CACA,MAAS,GAAI70B,EAAQ60B,cAAe,CACjCjU,EAAU5gB,EAAQ60B,aACrB,CAEE6J,EAAIrzB,OAAO6zB,UAAUte,EACvB,CAEC,GAAI5gB,EAAQ80B,qBAAuBv4B,KAAKuE,UAAU,SAAU,MAAO,CAClEd,EAAQ80B,oBAAoB/yB,SAAQ,SAAUkc,GAE7C,IAAIjb,EAASy7B,EAAQx3B,cAAczC,WAAWyZ,EAAKvc,OAEnD,GAAIsB,EAAQ,CACX07B,EAAIrzB,OAAOI,qBAAqBzI,EAAQib,EAAK5hB,MACjD,KAAU,CACNuM,QAAQC,KAAK,kDAAmDoV,EAAKvc,OACrE,OAAO,KACX,CACA,GACA,CAEC,GAAInF,KAAKuE,UAAU,QAAS,CAC3B49B,EAAIpkB,KAAKpa,YACX,CAEC,GAAIF,EAAQ6b,YAActf,KAAKuE,UAAU,OAAQ,MAAO,CACvD49B,EAAIrgB,KAAKne,YACX,CAEC,GAAIF,EAAQ+Z,SAAWxd,KAAKuE,UAAU,YAAa,MAAO,CACzD49B,EAAI1kB,UAAU9Z,YAChB,CAEC,GAAI3D,KAAKuE,UAAU,eAAgB,CAClC49B,EAAIrJ,YAAYn1B,YAClB,CAEC,GAAI3D,KAAKuE,UAAU,aAAc,CAChC49B,EAAIriB,UAAUC,mBAAmB,KACnC,CAEC,GAAItc,EAAQ+lB,YAAcxpB,KAAKuE,UAAU,eAAgB,CACxD49B,EAAI5Y,YAAY5lB,YAClB,CAEC,GAAI3D,KAAKuE,UAAU,aAAc,CAChC49B,EAAInJ,UAAUr1B,YAChB,CAEC,GAAIF,EAAQo3B,aAAe76B,KAAKuE,UAAU,SAAU,CACnD49B,EAAIS,MAAMj/B,YACZ,CAECF,EAAQw7B,WAAWx+B,KAAKT,KACzB,EAEA0N,EAAUjO,UAAUwiC,iBAAmB,WACtC,IAAIt8B,EAAO3F,KAEX,GAAI2F,EAAKlC,QAAQ6b,YAAc3Z,EAAKpB,UAAU,QAAS,CACtDoB,EAAKnB,QAAQsd,KAAKjc,MAAM,KAAM,MAE9B,GAAIF,EAAKlC,QAAQ6b,YAAc,QAAS,CACvC,GAAI3Z,EAAKlC,QAAQkB,KAAKvE,OAAQ,CAC7BuF,EAAK9C,WAAWqc,QAAQvZ,EAAKlC,QAAQkB,KAAM,MAAO,KACtD,KAAU,CACN,IAAKgB,EAAKlC,QAAQo5B,SAAWl3B,EAAKlC,QAAQq5B,mBAAqBn3B,EAAKpB,UAAU,QAAS,CACtFoB,EAAKnB,QAAQuZ,KAAK4G,SAAS,MAAO,MAAMvJ,MAAK,WAAY,IAAIC,OAAM,WAClE,GAAI1V,EAAKlC,QAAQ84B,sBAAuB,CACvC52B,EAAKnB,QAAQsd,KAAK4C,QAAQ/e,EAAKlC,QAAQ84B,sBAC9C,CACA,IAEK,MACL,KAAW,CACN52B,EAAK9C,WAAWqc,QAAQvZ,EAAKlC,QAAQkB,KAAM,MAAO,KACvD,CACA,CAEG,GAAIgB,EAAKlC,QAAQ84B,sBAAuB,CACvC52B,EAAKnB,QAAQsd,KAAK4C,QAAQ/e,EAAKlC,QAAQ84B,sBAC3C,CACA,KAAS,CACN,GAAI52B,EAAKlC,QAAQo5B,QAAS,CACzBl3B,EAAKnB,QAAQsd,KAAK4C,QAAQ/e,EAAKlC,QAAQ84B,uBAAuBnhB,MAAK,WAAY,IAAIC,OAAM,WAAY,GACzG,KAAU,CACN1V,EAAK9C,WAAWqc,QAAQ,GAAI,MAAO,KACvC,CACA,CACA,KAAQ,CACN,GAAIvZ,EAAKlC,QAAQkB,KAAKvE,OAAQ,CAC7BuF,EAAK9C,WAAWqc,QAAQvZ,EAAKlC,QAAQkB,KACxC,KAAS,CACN,IAAKgB,EAAKlC,QAAQo5B,SAAWl3B,EAAKlC,QAAQq5B,mBAAqBn3B,EAAKpB,UAAU,QAAS,CACtFoB,EAAKnB,QAAQuZ,KAAK4G,SAAS,MAAO,MAAMvJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACnF,KAAU,CACN1V,EAAK9C,WAAWqc,QAAQvZ,EAAKlC,QAAQkB,KAAM,MAAO,KACtD,CACA,CACA,CACA,EAGA+I,EAAUjO,UAAUojC,QAAU,WAC7B,IAAIlgC,EAAU3C,KAAK2C,QAEnB+K,EAAUjO,UAAUw4B,MAAM6K,WAAW9iC,MAErC,GAAIA,KAAKyD,QAAQuc,cAAgBhgB,KAAKuE,UAAU,eAAgB,MAAO,CACtEvE,KAAKwE,QAAQwb,aAAa+iB,aAC5B,CAGC/iC,KAAK6C,WAAWoI,KAAKzF,SAAQ,SAAUT,GACtCA,EAAIsb,MACN,IAECrgB,KAAK6C,WAAWoI,KAAO,GACvBjL,KAAK6C,WAAWwH,WAAa,GAC7BrK,KAAK6C,WAAWoZ,YAAc,GAG9B,GAAIjc,KAAKyD,QAAQ+lB,YAAcxpB,KAAKuE,UAAU,eAAgB,CAC7DvE,KAAKwE,QAAQ+kB,YAAYyZ,eAC3B,CAEC,GAAIhjC,KAAKuE,UAAU,eAAgB,CAClCvE,KAAKwE,QAAQs0B,YAAYkK,eAC3B,CAGC,MAAOrgC,EAAQQ,WAAY,CAC1BR,EAAQiD,YAAYjD,EAAQQ,WAC9B,CAAER,EAAQY,UAAUmkB,OAAO,YAC3B,EAEAha,EAAUjO,UAAU2iC,eAAiB,WACpC,IAAIa,EAAKC,UAAUC,WAAaD,UAAUE,QAAU1Y,OAAO2Y,MAE3D,GAAIJ,EAAGhiC,QAAQ,YAAc,EAAG,CAC/BjB,KAAK2pB,QAAU,KACf3pB,KAAK43B,YAAc,IACrB,MAAQ,GAAIqL,EAAGhiC,QAAQ,SAAW,EAAG,CACnCjB,KAAK2pB,QAAU,OACf3pB,KAAK43B,YAAc,IACrB,MAAQ,GAAIqL,EAAGhiC,QAAQ,YAAc,EAAG,CACtCjB,KAAK2pB,QAAU,UACf3pB,KAAK43B,YAAc,KACrB,KAAQ,CACN53B,KAAK2pB,QAAU,QACf3pB,KAAK43B,YAAc,KACrB,CAEC53B,KAAK63B,cAAgB,sVAAsVyL,KAAKL,IAAO,0kDAA0kDK,KAAKL,EAAGM,OAAO,EAAG,GACp9D,EAKA71B,EAAUjO,UAAU8gB,YAAc,WACjC,OAAOvgB,KAAK6C,WAAW0d,aACxB,EAGA7S,EAAUjO,UAAUgqB,cAAgB,WACnC,OAAOzpB,KAAK6C,WAAW4mB,eACxB,EAGA/b,EAAUjO,UAAU+jC,qBAAuB,SAAUC,GACpD,IAAIC,EAAU1jC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAI43B,EAAQtgC,SAASC,cAAc,SACnCqgC,EAAM11B,KAAO,OACb01B,EAAMC,OAASH,GAAc,yBAE7BE,EAAMhvB,iBAAiB,UAAU,SAAUC,GAC1C,IAAIivB,EAAOF,EAAMG,MAAM,GACnBC,EAAS,IAAIC,WACbr/B,EAEJo/B,EAAOE,WAAWJ,GAElBE,EAAOG,OAAS,SAAUtvB,GAEzB,IACCjQ,EAAOusB,KAAKC,MAAM4S,EAAOj0B,OAC9B,CAAM,MAAO8E,GACRvI,QAAQC,KAAK,kDAAmDsI,GAChE7I,EAAO6I,GACP,MACL,CAEI8uB,EAAQxkB,QAAQva,GAAMyW,MAAK,SAAUzW,GACpCmH,EAAQnH,EACb,IAAO0W,OAAM,SAAUC,GAClBxP,EAAQwP,EACb,GACA,EAEGyoB,EAAOI,QAAU,SAAUvvB,GAC1BvI,QAAQC,KAAK,yCACbP,GACJ,CACA,IAEE43B,EAAMS,OACR,GACA,EAGA12B,EAAUjO,UAAUyf,QAAU,SAAUva,EAAMmT,EAAQlN,GACrD,GAAI5K,KAAKuE,UAAU,QAAS,CAC3BvE,KAAKwE,QAAQuZ,KAAKsmB,oBACpB,CAEC,OAAOrkC,KAAKskC,SAAS3/B,EAAMmT,EAAQlN,EAAQ,MAAO,KACnD,EAEA8C,EAAUjO,UAAU6kC,SAAW,SAAU3/B,EAAMmT,EAAQlN,EAAQ25B,EAAYnlB,GAC1E,IAAIzZ,EAAO3F,KAEX,UAAW2E,IAAS,SAAU,CAC7B,GAAIA,EAAK1D,QAAQ,MAAQ,GAAK0D,EAAK1D,QAAQ,MAAQ,EAAG,CAErD,OAAO0E,EAAK9C,WAAWqc,QAAQgS,KAAKC,MAAMxsB,GAAO4/B,EAAYnlB,EAChE,KAAS,CAEN,GAAIzZ,EAAKpB,UAAU,OAAQ,MAAO,CACjC,GAAIuT,EAAQ,CACXnS,EAAKnB,QAAQuZ,KAAKwG,UAAUzM,EACjC,CAEI,GAAIlN,EAAQ,CACXjF,EAAKnB,QAAQuZ,KAAKymB,UAAU55B,EACjC,CAEIjF,EAAKnB,QAAQuZ,KAAK0mB,OAAO9/B,GAEzB,GAAIgB,EAAKlC,QAAQ6b,YAAc,UAAY3Z,EAAKpB,UAAU,OAAQ,MAAO,CACxEoB,EAAKnB,QAAQsd,KAAKjc,MAAM,KAAM,MAC9B,OAAOF,EAAKnB,QAAQsd,KAAK4C,QAAQ,EACtC,KAAW,CAEN,OAAO/e,EAAKnB,QAAQuZ,KAAK4G,SAAS4f,EAAYnlB,EACnD,CACA,CACA,CACA,KAAQ,CACN,GAAIza,EAAM,CAET,OAAOgB,EAAK9C,WAAWqc,QAAQva,EAAM4/B,EAAYnlB,EACpD,KAAS,CAGN,GAAIzZ,EAAKpB,UAAU,UAAYoB,EAAKnB,QAAQuZ,KAAK2mB,QAAU/+B,EAAKlC,QAAQq5B,kBAAmB,CAE1F,GAAIn3B,EAAKlC,QAAQ6b,YAAc,UAAY3Z,EAAKpB,UAAU,OAAQ,MAAO,CACxEoB,EAAKnB,QAAQsd,KAAKjc,MAAM,KAAM,MAC9B,OAAOF,EAAKnB,QAAQsd,KAAK4C,QAAQ,EACtC,KAAW,CACN,OAAO/e,EAAKnB,QAAQuZ,KAAK4G,SAAS4f,EAAYnlB,EACnD,CACA,KAAU,CAEN,OAAOzZ,EAAK9C,WAAWqc,QAAQ,GAAIqlB,EAAYnlB,EACnD,CACA,CACA,CACA,EAGA1R,EAAUjO,UAAUyjB,UAAY,WAC/B,GAAIljB,KAAKuE,UAAU,QAAS,CAC3BvE,KAAKwE,QAAQuZ,KAAKsmB,oBACpB,CAECrkC,KAAK6C,WAAWqgB,WACjB,EAGAxV,EAAUjO,UAAUuhB,QAAU,SAAU1X,GAEvC,GAAIA,IAAW,KAAM,CACpB+C,QAAQC,KAAK,oGACbhD,EAAS,QACX,CAEC,OAAOtJ,KAAK6C,WAAWme,QAAQ1X,EAChC,EAGAoE,EAAUjO,UAAUokB,aAAe,SAAUva,GAE5C,GAAIA,IAAW,KAAM,CACpB+C,QAAQC,KAAK,yGACbhD,EAAS,QACX,CAEC,OAAOtJ,KAAK6C,WAAWghB,aAAava,EACrC,EAGAoE,EAAUjO,UAAUklC,WAAa,SAAUx/B,EAAO8I,EAAMnO,GACvD,GAAIE,KAAKuE,UAAU,SAAU,MAAO,CACnC,OAAOvE,KAAKwE,QAAQsK,OAAOhO,OAAO,OAAQqE,EAAO8I,EAAMnO,EACzD,CACA,EAGA4N,EAAUjO,UAAUmlC,WAAa,SAAUz/B,EAAO8I,EAAMnO,GACvD,GAAIE,KAAKuE,UAAU,SAAU,MAAO,CACnC,OAAOvE,KAAKwE,QAAQsK,OAAOhO,OAAO,OAAQqE,EAAO8I,EAAMnO,EACzD,CACA,EAGA4N,EAAUjO,UAAUolC,QAAU,SAAU77B,EAAS3E,EAAOuG,GACvD,GAAI5K,KAAKuE,UAAU,SAAU,MAAO,CACnC,OAAOvE,KAAKwE,QAAQsgC,OAAOD,QAAQ77B,EAAS3E,EAAOuG,EACrD,CACA,EAGA8C,EAAUjO,UAAUmjC,MAAQ,SAAU55B,EAAS3E,EAAOuG,GACrD,GAAI5K,KAAKuE,UAAU,QAAS,MAAO,CAClC,OAAOvE,KAAKwE,QAAQo+B,MAAMmC,gBAAgB/7B,EAAS3E,EAAOuG,EAC5D,CACA,EAGA8C,EAAUjO,UAAUulC,WAAa,WAChC,GAAIhlC,KAAKuE,UAAU,OAAQ,MAAO,CACjC,OAAOvE,KAAKwE,QAAQuZ,KAAK2mB,QAC3B,CACA,EAGAh3B,EAAUjO,UAAUwlC,YAAc,SAAUtgC,EAAMmT,EAAQlN,GACzD,GAAI5K,KAAKuE,UAAU,QAAS,CAC3BvE,KAAKwE,QAAQuZ,KAAKsmB,oBACpB,CAEC,OAAOrkC,KAAKskC,SAAS3/B,EAAMmT,EAAQlN,EAAQ,KAC5C,EAGA8C,EAAUjO,UAAU8tB,WAAa,SAAU5oB,GAC1C,IAAIugC,EAAUllC,KAEd,IAAI2F,EAAO3F,KACX,IAAImlC,EAAY,EAEhB,OAAO,IAAIt5B,SAAQ,SAAUC,EAASC,GACrC,GAAIm5B,EAAQ3gC,UAAU,QAAS,CAC9B2gC,EAAQ1gC,QAAQuZ,KAAKsmB,oBACxB,CAEE,UAAW1/B,IAAS,SAAU,CAC7BA,EAAOusB,KAAKC,MAAMxsB,EACrB,CAEE,GAAIA,EAAM,CACTA,EAAKa,SAAQ,SAAUkc,GACtB,IAAI3c,EAAMY,EAAK9C,WAAWob,QAAQyD,EAAK/b,EAAKlC,QAAQzB,QAEpD,GAAI+C,EAAK,CACRogC,IAEApgC,EAAIwoB,WAAW7L,GAAMtG,MAAK,WACzB+pB,IAEA,IAAKA,EAAW,CACfr5B,GACP,CACA,GACA,CACA,GACA,KAAS,CACNO,QAAQC,KAAK,mCACbP,EAAO,kCACV,CACA,GACA,EAEA2B,EAAUjO,UAAU2lC,QAAU,SAAUzgC,EAAMwc,EAAKnf,GAClD,IAAIqjC,EAAUrlC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,GAAIs5B,EAAQ9gC,UAAU,QAAS,CAC9B8gC,EAAQ7gC,QAAQuZ,KAAKsmB,oBACxB,CAEE,UAAW1/B,IAAS,SAAU,CAC7BA,EAAOusB,KAAKC,MAAMxsB,EACrB,CAEE,GAAIA,EAAM,CACT0gC,EAAQxiC,WAAWye,QAAQ3c,EAAMwc,EAAKnf,GAAOoZ,MAAK,SAAUnQ,GAC3D,IAAI1B,EAAS,GAEb0B,EAAKzF,SAAQ,SAAUT,GACtBwE,EAAOhE,KAAKR,EAAI6E,eACrB,IAEIkC,EAAQvC,EACZ,GACA,KAAS,CACN8C,QAAQC,KAAK,mCACbP,EAAO,kCACV,CACA,GACA,EAGA2B,EAAUjO,UAAU6lC,gBAAkB,SAAU3gC,GAC/C,IAAI4gC,EAAUvlC,KAEd,IAAI2F,EAAO3F,KACPiL,EAAO,GACPk6B,EAAY,EAEhB,OAAO,IAAIt5B,SAAQ,SAAUC,EAASC,GACrC,GAAIw5B,EAAQhhC,UAAU,QAAS,CAC9BghC,EAAQ/gC,QAAQuZ,KAAKsmB,oBACxB,CAEE,UAAW1/B,IAAS,SAAU,CAC7BA,EAAOusB,KAAKC,MAAMxsB,EACrB,CAEE,GAAIA,EAAM,CACTA,EAAKa,SAAQ,SAAUkc,GACtB,IAAI3c,EAAMY,EAAK9C,WAAWob,QAAQyD,EAAK/b,EAAKlC,QAAQzB,QAEpDmjC,IAEA,GAAIpgC,EAAK,CACRA,EAAIwoB,WAAW7L,GAAMtG,MAAK,WACzB+pB,IACAl6B,EAAK1F,KAAKR,EAAI6E,gBAEd,IAAKu7B,EAAW,CACfr5B,EAAQb,EACf,CACA,GACA,KAAW,CACNtF,EAAK9C,WAAWye,QAAQI,GAAMtG,MAAK,SAAUoqB,GAC5CL,IACAl6B,EAAK1F,KAAKigC,EAAQ,GAAG57B,gBAErB,IAAKu7B,EAAW,CACfr5B,EAAQb,EACf,CACA,GACA,CACA,GACA,KAAS,CACNoB,QAAQC,KAAK,mCACbP,EAAO,kCACV,CACA,GACA,EAGA2B,EAAUjO,UAAUyzB,OAAS,SAAUlxB,GACtC,IAAI+C,EAAM/E,KAAK6C,WAAWob,QAAQjc,GAElC,GAAI+C,EAAK,CACR,OAAOA,EAAI6E,cACb,KAAQ,CACNyC,QAAQC,KAAK,sCAAuCtK,GACpD,OAAO,KACT,CACA,EAGA0L,EAAUjO,UAAU6e,mBAAqB,SAAU9S,EAAUlC,GAC5D,IAAIvE,EAAM/E,KAAK6C,WAAWyb,mBAAmB9S,EAAUlC,GAEvD,GAAIvE,EAAK,CACR,OAAOA,EAAI6E,cACb,KAAQ,CACNyC,QAAQC,KAAK,sCAAuCd,GACpD,OAAO,KACT,CACA,EAGAkC,EAAUjO,UAAU6gB,UAAY,SAAUte,GACzC,IAAIyjC,EAAUzlC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAIpG,EAAO8/B,EACPC,EAAQ,EACRC,EAAe,EACfC,EAAY,GAEhB,SAASC,IACRH,IAEA,GAAIA,GAAS1jC,EAAM5B,OAAQ,CAC1B,GAAIulC,EAAc,CACjBhgC,EAAK9C,WAAW2c,qBAChB1T,GACL,CACA,CACA,CAEE,IAAKpM,MAAM2F,QAAQrD,GAAQ,CAC1BA,EAAQ,CAACA,EACZ,CAGEA,EAAMwD,SAAQ,SAAUkc,GACvB,IAAI3c,EAAM0gC,EAAQ5iC,WAAWob,QAAQyD,EAAM,MAE3C,GAAI3c,EAAK,CACR6gC,EAAUrgC,KAAKR,EACnB,KAAU,CACNsH,QAAQC,KAAK,wCAAyCoV,GACtD3V,EAAO,wCACP85B,GACJ,CACA,IAGED,EAAU/vB,MAAK,SAAUiwB,EAAGC,GAC3B,OAAON,EAAQ5iC,WAAWoI,KAAKhK,QAAQ6kC,GAAKL,EAAQ5iC,WAAWoI,KAAKhK,QAAQ8kC,GAAK,GAAK,CACzF,IAEEH,EAAUpgC,SAAQ,SAAUT,GAC3BA,EAAIyJ,SAAS4M,MAAK,WACjBuqB,IACAE,GACJ,IAAMxqB,OAAM,SAAUC,GAClBuqB,IACA95B,EAAOuP,EACX,GACA,GACA,GACA,EAGA5N,EAAUjO,UAAUyhB,OAAS,SAAUvc,EAAMwc,EAAKnf,GACjD,IAAIgkC,EAAUhmC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,UAAWpH,IAAS,SAAU,CAC7BA,EAAOusB,KAAKC,MAAMxsB,EACrB,CAEEqhC,EAAQnjC,WAAWye,QAAQ3c,EAAMwc,EAAKnf,GAAOoZ,MAAK,SAAUnQ,GAE3D,GAAI+6B,EAAQzhC,UAAU,eAAgB,CACrCyhC,EAAQxhC,QAAQ2F,YAAYC,OAAO47B,EAAQnjC,WAAWwH,WAC1D,CAEGyB,EAAQb,EAAK,GAAGrB,eACnB,GACA,GACA,EAGA8D,EAAUjO,UAAUwmC,eAAiB,SAAUjkC,EAAO2C,GACrD,IAAIuhC,EAAUlmC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAIhH,EAAMmhC,EAAQrjC,WAAWob,QAAQjc,GAErC,UAAW2C,IAAS,SAAU,CAC7BA,EAAOusB,KAAKC,MAAMxsB,EACrB,CAEE,GAAII,EAAK,CACRA,EAAIwoB,WAAW5oB,GAAMyW,MAAK,WAEzB,GAAI8qB,EAAQ3hC,UAAU,eAAgB,CACrC2hC,EAAQ1hC,QAAQ2F,YAAYC,OAAO87B,EAAQrjC,WAAWwH,WAC3D,CAEIyB,EAAQ/G,EAAI6E,eAChB,IAAMyR,OAAM,SAAUC,GAClBvP,EAAOuP,EACX,GACA,KAAS,CACNvW,EAAMmhC,EAAQrjC,WAAWye,QAAQ3c,GAAMyW,MAAK,SAAUnQ,GAErD,GAAIi7B,EAAQ3hC,UAAU,eAAgB,CACrC2hC,EAAQ1hC,QAAQ2F,YAAYC,OAAO87B,EAAQrjC,WAAWwH,WAC3D,CAEIyB,EAAQb,EAAK,GAAGrB,eACpB,IAAMyR,OAAM,SAAUC,GAClBvP,EAAOuP,EACX,GACA,CACA,GACA,EAGA5N,EAAUjO,UAAU0mC,UAAY,SAAUnkC,EAAO2C,GAChD,IAAIyhC,EAAUpmC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAIhH,EAAMqhC,EAAQvjC,WAAWob,QAAQjc,GAErC,UAAW2C,IAAS,SAAU,CAC7BA,EAAOusB,KAAKC,MAAMxsB,EACrB,CAEE,GAAII,EAAK,CACRA,EAAIwoB,WAAW5oB,GAAMyW,MAAK,WACzBtP,EAAQ/G,EAAI6E,eAChB,IAAMyR,OAAM,SAAUC,GAClBvP,EAAOuP,EACX,GACA,KAAS,CACNjP,QAAQC,KAAK,wCAAyCtK,GACtD+J,EAAO,uCACV,CACA,GACA,EAGA2B,EAAUjO,UAAU8e,YAAc,SAAUvc,EAAOwJ,EAAUC,GAC5D,IAAI46B,EAAUrmC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAIhH,EAAMshC,EAAQxjC,WAAWob,QAAQjc,GAErC,GAAI+C,EAAK,CACRshC,EAAQxjC,WAAW0b,YAAYxZ,EAAKyG,EAAUC,GAAW2P,MAAK,WAC7DtP,GACJ,IAAMuP,OAAM,SAAUC,GAClBvP,EAAOuP,EACX,GACA,KAAS,CACNjP,QAAQC,KAAK,wCAAyCtK,GACtD+J,EAAO,uCACV,CACA,GACA,EAEA2B,EAAUjO,UAAU8S,QAAU,SAAUvI,EAAMjI,EAAIkI,GACjD,IAAIq8B,EAAUtmC,KAAK6C,WAAWob,QAAQjU,GAEtC,GAAIs8B,EAAS,CACZA,EAAQhZ,UAAUvrB,EAAIkI,EACxB,KAAQ,CACNoC,QAAQC,KAAK,sCAAuCtC,EACtD,CACA,EAEA0D,EAAUjO,UAAUmkB,QAAU,SAAUta,GAEvC,GAAIA,IAAW,KAAM,CACpB+C,QAAQC,KAAK,oGACbhD,EAAS,QACX,CAEC,OAAOtJ,KAAK6C,WAAW6G,cAAcJ,EACtC,EAGAoE,EAAUjO,UAAU4d,eAAiB,SAAUrb,EAAOsH,GACrD,IAAIvE,EAAM/E,KAAK6C,WAAWob,QAAQjc,GAElC,GAAI+C,EAAK,CACR,OAAO/E,KAAK6C,WAAWwa,eAAetY,EAAKuE,EAC7C,KAAQ,CACN+C,QAAQC,KAAK,0CAA2CtK,GACxD,OAAO,KACT,CACA,EAGA0L,EAAUjO,UAAU8mC,gBAAkB,SAAUC,GAC/C,GAAIxmC,KAAKuE,UAAU,YAAa,MAAO,CACtCvE,KAAKwE,QAAQw0B,UAAUyN,KAAKD,EAC9B,CACA,EAIA94B,EAAUjO,UAAUiG,WAAa,SAAUY,GAC1CtG,KAAK0K,cAAchF,WAAWY,EAC/B,EAEAoH,EAAUjO,UAAUwJ,WAAa,SAAUU,GAC1C,OAAO3J,KAAK0K,cAAchB,cAAcC,EACzC,EAEA+D,EAAUjO,UAAU0zB,UAAY,SAAUhuB,GACzC,IAAID,EAAMlF,KAAK0K,cAAczC,WAAW9C,GAExC,GAAID,EAAK,CACR,OAAOA,EAAI0E,cACb,KAAQ,CACNyC,QAAQC,KAAK,yCAA0CnH,GACvD,OAAO,KACT,CACA,EAEAuI,EAAUjO,UAAUinC,qBAAuB,WAC1C,OAAO1mC,KAAK0K,cAAcjB,mBAC3B,EAEAiE,EAAUjO,UAAUknC,gBAAkB,WACrC,GAAI3mC,KAAKuE,UAAU,cAAe,MAAO,CACxC,OAAOvE,KAAKwE,QAAQmG,YAAYi8B,aAAa5mC,KAAK0K,cAAczB,aAClE,CACA,EAEAyE,EAAUjO,UAAUonC,gBAAkB,SAAUz5B,GAC/C,GAAIpN,KAAKuE,UAAU,cAAe,MAAO,CACxCvE,KAAK0K,cAAchF,WAAW1F,KAAKwE,QAAQmG,YAAYm8B,gBAAgB9mC,KAAKyD,QAAQX,QAASsK,IAC7F,OAAO,IACT,CACC,OAAO,KACR,EAEAM,EAAUjO,UAAUsnC,WAAa,SAAU5hC,GAC1C,IAAIsB,EAASzG,KAAK0K,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXA,EAAO4H,OAEP,GAAIrO,KAAKyD,QAAQwC,kBAAoBjG,KAAKuE,UAAU,mBAAoB,MAAO,CAC9EvE,KAAKwE,QAAQyB,iBAAiB6H,QACjC,CACA,KAAQ,CACNzB,QAAQC,KAAK,gDAAiDnH,GAC9D,OAAO,KACT,CACA,EAEAuI,EAAUjO,UAAUunC,WAAa,SAAU7hC,GAC1C,IAAIsB,EAASzG,KAAK0K,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXA,EAAO6H,OAEP,GAAItO,KAAKyD,QAAQwC,kBAAoBjG,KAAKuE,UAAU,mBAAoB,MAAO,CAC9EvE,KAAKwE,QAAQyB,iBAAiB6H,QACjC,CACA,KAAQ,CACNzB,QAAQC,KAAK,gDAAiDnH,GAC9D,OAAO,KACT,CACA,EAEAuI,EAAUjO,UAAUwnC,aAAe,SAAU9hC,GAC5C,IAAIsB,EAASzG,KAAK0K,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACX,GAAIA,EAAOuC,QAAS,CACnBvC,EAAO6H,MACV,KAAS,CACN7H,EAAO4H,MACV,CACA,KAAQ,CACNhC,QAAQC,KAAK,6DAA8DnH,GAC3E,OAAO,KACT,CACA,EAEAuI,EAAUjO,UAAUyN,UAAY,SAAU5G,EAAYC,EAAQpB,GAC7D,IAAI+hC,EAAUlnC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAASygC,EAAQx8B,cAAczC,WAAW9C,GAE9C+hC,EAAQx8B,cAAcwC,UAAU5G,EAAYC,EAAQE,GAAQ2U,MAAK,SAAU3U,GAC1EqF,EAAQrF,EAAOmD,eAClB,IAAKyR,OAAM,SAAUC,GAClBvP,EAAOuP,EACV,GACA,GACA,EAEA5N,EAAUjO,UAAU0nC,aAAe,SAAUhiC,GAC5C,IAAIiiC,EAAUpnC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAAS2gC,EAAQ18B,cAAczC,WAAW9C,GAE9C,GAAIsB,EAAQ,CACXA,EAAO+H,SAAS4M,MAAK,WACpBtP,GACJ,IAAMuP,OAAM,SAAUC,GAClBvP,EAAOuP,EACX,GACA,KAAS,CACNjP,QAAQC,KAAK,kDAAmDnH,GAChE4G,GACH,CACA,GACA,EAEA2B,EAAUjO,UAAU4nC,uBAAyB,SAAUliC,EAAOmB,GAC7D,IAAIghC,EAAUtnC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAAS6gC,EAAQ58B,cAAczC,WAAW9C,GAE9C,GAAIsB,EAAQ,CACXA,EAAOkJ,iBAAiBrJ,GAAY8U,MAAK,SAAUlW,GAClD4G,EAAQ5G,EACZ,IAAMmW,OAAM,SAAUC,GAClBvP,EAAOuP,EACX,GACA,KAAS,CACNjP,QAAQC,KAAK,kDAAmDnH,GAChE4G,GACH,CACA,GACA,EAEA2B,EAAUjO,UAAUsK,WAAa,SAAUC,EAAMjI,EAAIkI,GACpD,IAAIs9B,EAAavnC,KAAK0K,cAAczC,WAAW+B,GAC/C,IAAIoF,EAAWpP,KAAK0K,cAAczC,WAAWlG,GAE7C,GAAIwlC,EAAY,CACf,GAAIn4B,EAAU,CACbpP,KAAK0K,cAAcX,WAAWw9B,EAAYn4B,EAAUnF,EACvD,KAAS,CACNoC,QAAQC,KAAK,yCAA0C8C,EAC1D,CACA,KAAQ,CACN/C,QAAQC,KAAK,yCAA0CtC,EACzD,CACA,EAGA0D,EAAUjO,UAAU8L,eAAiB,SAAUpG,EAAOqG,EAAUC,GAC/D,IAAI+7B,EAAUxnC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,IAAItF,EAAS+gC,EAAQ98B,cAAczC,WAAW9C,GAE9C,GAAIsB,EAAQ,CACX+gC,EAAQ98B,cAAca,eAAe9E,EAAQ+E,EAAUC,GAAW2P,MAAK,WACtEtP,GACJ,IAAMuP,OAAM,SAAUC,GAClBvP,EAAOuP,EACX,GACA,KAAS,CACNjP,QAAQC,KAAK,2CAA4CnH,GACzD4G,EAAO,0CACV,CACA,GACA,EAGA2B,EAAUjO,UAAU8iC,UAAY,SAAU7G,GACzC17B,KAAKwE,QAAQmP,SAAS4uB,UAAU7G,EACjC,EAEAhuB,EAAUjO,UAAUgoC,UAAY,WAC/B,OAAOznC,KAAKwE,QAAQmP,SAAS8zB,WAC9B,EAEA/5B,EAAUjO,UAAUioC,QAAU,SAAUhM,GACvC,OAAO17B,KAAKwE,QAAQmP,SAAS+zB,QAAQhM,EACtC,EAKAhuB,EAAUjO,UAAU4G,OAAS,SAAUoH,GACtCzN,KAAK0K,cAAcrE,OAAOoH,GAC1BzN,KAAK6C,WAAWwD,OAAOoH,EACxB,EAEAC,EAAUjO,UAAUixB,UAAY,SAAU/oB,GAEzC,GAAI3H,KAAK6C,WAAWiZ,aAAe,UAAW,CAC7C9b,KAAKyD,QAAQkE,OAAShG,MAAMgG,GAAUA,EAASA,EAAS,KACxD3H,KAAK2C,QAAQ0B,MAAMsD,OAAS3H,KAAKyD,QAAQkE,OACzC3H,KAAK6C,WAAW0a,gBAChBvd,KAAK6C,WAAWwD,QAClB,KAAQ,CACNgG,QAAQC,KAAK,6DACf,CACA,EAKAoB,EAAUjO,UAAUijC,QAAU,SAAUiF,EAAU/pB,GACjD,GAAI5d,KAAKuE,UAAU,OAAQ,MAAO,CACjCvE,KAAKwE,QAAQqR,KAAK6sB,QAAQiF,EAAU/pB,GACpC5d,KAAK6C,WAAW+hB,eAClB,CACA,EAEAlX,EAAUjO,UAAUmoC,WAAa,WAChC,GAAI5nC,KAAKuE,UAAU,OAAQ,MAAO,CACjC,OAAOvE,KAAKwE,QAAQqR,KAAKqO,SAC3B,CACA,EAEAxW,EAAUjO,UAAUooC,UAAY,WAC/B,GAAI7nC,KAAKuE,UAAU,OAAQ,MAAO,CACjCvE,KAAKwE,QAAQqR,KAAKgK,QAClB7f,KAAK6C,WAAW+hB,eAClB,CACA,EAKAlX,EAAUjO,UAAUkjC,UAAY,SAAUx9B,EAAO8I,EAAMnO,EAAOgY,GAC7D,GAAI9X,KAAKuE,UAAU,SAAU,MAAO,CACnCvE,KAAKwE,QAAQsK,OAAO6zB,UAAUx9B,EAAO8I,EAAMnO,EAAOgY,GAClD9X,KAAK6C,WAAW4hB,eAClB,CACA,EAGA/W,EAAUjO,UAAUqoC,cAAgB,WACnC,GAAI9nC,KAAKuE,UAAU,SAAU,MAAO,CACnCvE,KAAK6C,WAAW4hB,eAClB,CACA,EAGA/W,EAAUjO,UAAUsoC,UAAY,SAAU5iC,EAAO8I,EAAMnO,EAAOgY,GAC7D,GAAI9X,KAAKuE,UAAU,SAAU,MAAO,CACnCvE,KAAKwE,QAAQsK,OAAOi5B,UAAU5iC,EAAO8I,EAAMnO,EAAOgY,GAClD9X,KAAK6C,WAAW4hB,eAClB,CACA,EAGA/W,EAAUjO,UAAU6kB,WAAa,SAAU0jB,GAC1C,GAAIhoC,KAAKuE,UAAU,SAAU,MAAO,CACnC,OAAOvE,KAAKwE,QAAQsK,OAAOwV,WAAW0jB,EACxC,CACA,EAEAt6B,EAAUjO,UAAUsP,qBAAuB,SAAU5J,GACpD,GAAInF,KAAKuE,UAAU,SAAU,MAAO,CACnC,IAAIkC,EAASzG,KAAK0K,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXzG,KAAKwE,QAAQsK,OAAOC,qBAAqBtI,EAC5C,KAAS,CACN4F,QAAQC,KAAK,wDAAyDnH,GACtE,OAAO,KACV,CACA,CACA,EAEAuI,EAAUjO,UAAUwP,qBAAuB,SAAU9J,GACpD,GAAInF,KAAKuE,UAAU,SAAU,MAAO,CACnC,IAAIkC,EAASzG,KAAK0K,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACX,OAAOzG,KAAKwE,QAAQsK,OAAOG,qBAAqBxI,EACnD,KAAS,CACN4F,QAAQC,KAAK,kDAAmDnH,EACnE,CACA,CACA,EAEAuI,EAAUjO,UAAUyP,qBAAuB,SAAU/J,EAAOrF,GAC3D,GAAIE,KAAKuE,UAAU,SAAU,MAAO,CACnC,IAAIkC,EAASzG,KAAK0K,cAAczC,WAAW9C,GAE3C,GAAIsB,EAAQ,CACXzG,KAAKwE,QAAQsK,OAAOI,qBAAqBzI,EAAQ3G,EACpD,KAAS,CACNuM,QAAQC,KAAK,kDAAmDnH,GAChE,OAAO,KACV,CACA,CACA,EAEAuI,EAAUjO,UAAUwoC,iBAAmB,WACtC,GAAIjoC,KAAKuE,UAAU,SAAU,MAAO,CACnC,OAAOvE,KAAKwE,QAAQsK,OAAOm5B,kBAC7B,CACA,EAGAv6B,EAAUjO,UAAUyoC,aAAe,SAAU/iC,EAAO8I,EAAMnO,GACzD,GAAIE,KAAKuE,UAAU,SAAU,MAAO,CACnCvE,KAAKwE,QAAQsK,OAAOo5B,aAAa/iC,EAAO8I,EAAMnO,GAC9CE,KAAK6C,WAAW4hB,eAClB,CACA,EAGA/W,EAAUjO,UAAU0oC,YAAc,SAAUH,GAC3C,GAAIhoC,KAAKuE,UAAU,SAAU,MAAO,CACnCvE,KAAKwE,QAAQsK,OAAOq5B,YAAYH,GAChChoC,KAAK6C,WAAW4hB,eAClB,CACA,EAGA/W,EAAUjO,UAAU2oC,kBAAoB,WACvC,GAAIpoC,KAAKuE,UAAU,SAAU,MAAO,CACnCvE,KAAKwE,QAAQsK,OAAOs5B,oBACpBpoC,KAAK6C,WAAW4hB,eAClB,CACA,EAGA/W,EAAUjO,UAAUqgB,UAAY,SAAU7U,GACzC,GAAIjL,KAAKuE,UAAU,YAAa,MAAO,CACtC,GAAI0G,IAAS,KAAM,CAClBoB,QAAQC,KAAK,+GACbrB,EAAO,QACV,CACEjL,KAAKwE,QAAQsb,UAAU2N,WAAWxiB,EACpC,CACA,EAEAyC,EAAUjO,UAAU4oC,YAAc,SAAUp9B,GAC3C,GAAIjL,KAAKuE,UAAU,YAAa,MAAO,CACtCvE,KAAKwE,QAAQsb,UAAUsF,aAAana,EACtC,CACA,EAEAyC,EAAUjO,UAAU6oC,gBAAkB,SAAUvjC,GAC/C,GAAI/E,KAAKuE,UAAU,YAAa,MAAO,CACtCvE,KAAKwE,QAAQsb,UAAU8N,UAAU7oB,EACnC,CACA,EAEA2I,EAAUjO,UAAU8oC,gBAAkB,WACrC,GAAIvoC,KAAKuE,UAAU,YAAa,MAAO,CACtC,OAAOvE,KAAKwE,QAAQsb,UAAUyoB,iBAChC,CACA,EAEA76B,EAAUjO,UAAU+oC,gBAAkB,WACrC,GAAIxoC,KAAKuE,UAAU,YAAa,MAAO,CACtC,OAAOvE,KAAKwE,QAAQsb,UAAU0oB,iBAChC,CACA,EAGA96B,EAAUjO,UAAUgpC,gBAAkB,WACrC,GAAIzoC,KAAKuE,UAAU,WAAY,MAAO,CACrC,OAAOvE,KAAKwE,QAAQuL,SAAS04B,iBAC/B,CACA,EAEA/6B,EAAUjO,UAAUipC,oBAAsB,SAAUr9B,GACnD,IAAIs9B,EAAU3oC,KAEd,GAAIA,KAAKuE,UAAU,WAAY,MAAO,CAErC,IAAK8G,EAAO,CACXA,EAAQrL,KAAKwE,QAAQuL,SAAS04B,iBACjC,CAEE,IAAK/oC,MAAM2F,QAAQgG,GAAQ,CAC1BA,EAAQ,CAACA,EACZ,CAEEA,EAAM7F,SAAQ,SAAU8F,GACvBq9B,EAAQnkC,QAAQuL,SAAS8jB,gBAAgBvoB,EAAKlD,WACjD,GACA,CACA,EAEAsF,EAAUjO,UAAUsQ,SAAW,SAAU1E,GACxC,IAAI9B,EAAS,GAGbvJ,KAAK6C,WAAWoI,KAAKzF,SAAQ,SAAUT,GACtC,IAAI4xB,EAAQ5xB,EAAIgL,WAEhB,GAAI4mB,IAAU,KAAM,CACnBptB,EAASA,EAAO4B,OAAOwrB,EAC1B,CACA,IAEC,OAAOptB,EAAOnJ,OAASmJ,EAAS,IACjC,EAIAmE,EAAUjO,UAAUmpC,WAAa,SAAUtnC,GAC1C,GAAItB,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,QAAS,CACtDvE,KAAKwE,QAAQsd,KAAK8mB,WAAWtnC,EAC/B,KAAQ,CACN,OAAO,KACT,CACA,EAEAoM,EAAUjO,UAAUilB,QAAU,SAAU5C,GACvC,GAAI9hB,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,QAAS,CACtD,OAAOvE,KAAKwE,QAAQsd,KAAK4C,QAAQ5C,EACnC,KAAQ,CACN,OAAO,IAAIjW,SAAQ,SAAUC,EAASC,GACrCA,GACH,GACA,CACA,EAEA2B,EAAUjO,UAAU4tB,aAAe,SAAUtoB,GAC5C,IAAI8jC,EAAU7oC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,GAAI88B,EAAQplC,QAAQ6b,YAAcupB,EAAQtkC,UAAU,QAAS,CAC5DQ,EAAM8jC,EAAQhmC,WAAWob,QAAQlZ,GAEjC,GAAIA,EAAK,CACR8jC,EAAQrkC,QAAQsd,KAAKuL,aAAatoB,GAAKqW,MAAK,WAC3CtP,GACL,IAAOuP,OAAM,WACRtP,GACL,GACA,KAAU,CACNA,GACJ,CACA,KAAS,CACNA,GACH,CACA,GACA,EAEA2B,EAAUjO,UAAUqpC,YAAc,SAAUC,GAC3C,GAAI/oC,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,QAAS,CACtDvE,KAAKwE,QAAQsd,KAAKgnB,YAAYC,GAC9B/oC,KAAKwE,QAAQsd,KAAK4C,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACtE,KAAQ,CACN,OAAO,KACT,CACA,EAEA3N,EAAUjO,UAAUsiB,YAAc,WACjC,GAAI/hB,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,OAAQ,MAAO,CAC5D,OAAOvE,KAAKwE,QAAQsd,KAAKC,aAC3B,CACA,EAEArU,EAAUjO,UAAUupC,aAAe,WAClC,GAAIhpC,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,QAAS,CACtDvE,KAAKwE,QAAQsd,KAAKknB,cACpB,KAAQ,CACN,OAAO,KACT,CACA,EAEAt7B,EAAUjO,UAAUue,SAAW,WAC9B,GAAIhe,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,QAAS,CACtDvE,KAAKwE,QAAQsd,KAAK9D,UACpB,KAAQ,CACN,OAAO,KACT,CACA,EAEAtQ,EAAUjO,UAAUwpC,QAAU,WAC7B,GAAIjpC,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,QAAS,CACtD,OAAOvE,KAAKwE,QAAQsd,KAAKmnB,SAC3B,KAAQ,CACN,OAAO,KACT,CACA,EAEAv7B,EAAUjO,UAAUypC,WAAa,WAChC,GAAIlpC,KAAKyD,QAAQ6b,YAActf,KAAKuE,UAAU,QAAS,CACtD,OAAOvE,KAAKwE,QAAQsd,KAAKonB,YAC3B,KAAQ,CACN,OAAO,KACT,CACA,EAIAx7B,EAAUjO,UAAU0pC,WAAa,SAAUC,GAC1C,GAAIppC,KAAKuE,UAAU,YAAa,MAAO,CACtCvE,KAAKyD,QAAQ+Z,QAAU4rB,EACvBppC,KAAKwE,QAAQiZ,UAAU9Z,aACvB3D,KAAK6C,WAAWqd,kBAAkB,WAElC,GAAIlgB,KAAKyD,QAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAASvE,KAAKwE,QAAQmG,YAAYC,OAAOygB,MAAO,CAC7GrrB,KAAKwE,QAAQmG,YAAYE,KAAK,QACjC,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEA6C,EAAUjO,UAAU4pC,eAAiB,SAAU5L,GAC9C,GAAIz9B,KAAKuE,UAAU,YAAa,MAAO,CACtCvE,KAAKyD,QAAQg6B,YAAcA,EAC3Bz9B,KAAKwE,QAAQiZ,UAAU9Z,aACvB3D,KAAK6C,WAAWqd,kBAAkB,WAElC,GAAIlgB,KAAKyD,QAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAASvE,KAAKwE,QAAQmG,YAAYC,OAAOygB,MAAO,CAC7GrrB,KAAKwE,QAAQmG,YAAYE,KAAK,QACjC,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEA6C,EAAUjO,UAAU6pC,kBAAoB,SAAUC,GACjD,GAAIvpC,KAAKuE,UAAU,YAAa,MAAO,CACtCvE,KAAKyD,QAAQ+5B,eAAiB+L,EAC9BvpC,KAAKwE,QAAQiZ,UAAU9Z,aACvB,GAAI3D,KAAKyD,QAAQ+Z,QAAS,CACzBxd,KAAK6C,WAAWqd,kBAAkB,SAElC,GAAIlgB,KAAKyD,QAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAASvE,KAAKwE,QAAQmG,YAAYC,OAAOygB,MAAO,CAC7GrrB,KAAKwE,QAAQmG,YAAYE,KAAK,QAClC,CACA,KAAS,CACNwB,QAAQC,KAAK,+DAChB,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEAoB,EAAUjO,UAAU+pC,eAAiB,SAAUD,GAC9C,GAAIvpC,KAAKuE,UAAU,YAAa,MAAO,CACtCvE,KAAKyD,QAAQi6B,YAAc6L,EAC3BvpC,KAAKwE,QAAQiZ,UAAU9Z,aACvB,GAAI3D,KAAKyD,QAAQ+Z,QAAS,CACzBxd,KAAK6C,WAAWqd,kBAAkB,SAElC,GAAIlgB,KAAKyD,QAAQkH,aAAe3K,KAAKuE,UAAU,cAAe,OAASvE,KAAKwE,QAAQmG,YAAYC,OAAOygB,MAAO,CAC7GrrB,KAAKwE,QAAQmG,YAAYE,KAAK,QAClC,CACA,KAAS,CACNwB,QAAQC,KAAK,+DAChB,CACA,KAAQ,CACN,OAAO,KACT,CACA,EAEAoB,EAAUjO,UAAU6rB,UAAY,SAAUie,GACzC,GAAIvpC,KAAKuE,UAAU,YAAa,MAAO,CACtC,OAAOvE,KAAKwE,QAAQiZ,UAAU6N,UAAU,KAC1C,KAAQ,CACN,OAAO,KACT,CACA,EAGA5d,EAAUjO,UAAUgqC,eAAiB,WACpC,GAAIzpC,KAAKuE,UAAU,YAAa,MAAO,CACtC,OAAOvE,KAAKyD,QAAQ+Z,QAAUxd,KAAKwE,QAAQiZ,UAAUgsB,iBAAmBzpC,KAAKghB,SAC/E,CACA,EAEAtT,EAAUjO,UAAUiqC,eAAiB,WACpC,GAAI1pC,KAAKuE,UAAU,OAAQ,MAAO,CACjC,OAAOvE,KAAKwE,QAAQ6R,KAAKqzB,gBAC3B,CACA,EAEAh8B,EAAUjO,UAAUkqC,gBAAkB,SAAUt+B,GAC/C,IAAIu+B,EAAU5pC,KAEd,GAAIA,KAAKuE,UAAU,OAAQ,MAAO,CAEjC,IAAK8G,EAAO,CACXA,EAAQrL,KAAKwE,QAAQ6R,KAAKqzB,gBAC7B,CAEE,IAAKhqC,MAAM2F,QAAQgG,GAAQ,CAC1BA,EAAQ,CAACA,EACZ,CAEEA,EAAM7F,SAAQ,SAAU8F,GACvBs+B,EAAQplC,QAAQ6R,KAAKsd,YAAYroB,EAAKlD,WACzC,GACA,CACA,EAGAsF,EAAUjO,UAAUoqC,eAAiB,WACpC,GAAI7pC,KAAKuE,UAAU,cAAe,MAAO,CACxC,OAAOvE,KAAKwE,QAAQ2F,YAAY2/B,YAClC,KAAQ,CACN,OAAO,KACT,CACA,EAEAp8B,EAAUjO,UAAU2K,OAAS,WAC5B,GAAIpK,KAAKuE,UAAU,cAAe,MAAO,CACxCvE,KAAKwE,QAAQ2F,YAAY4/B,UAAU/pC,KAAK6C,WAAWwH,WACrD,CACA,EAIAqD,EAAUjO,UAAUuqC,aAAe,WAClC,IAAI1+B,EAAO,MAEX,GAAItL,KAAKuE,UAAU,OAAQ,MAAO,CACjC+G,EAAOtL,KAAKwE,QAAQ6R,KAAKkE,YAEzB,GAAIjP,EAAM,CACT,OAAOA,EAAKwoB,MAAMiD,MACrB,CACA,CAEC,OAAO,KACR,EAEArpB,EAAUjO,UAAUwqC,aAAe,WAClC,IAAI3+B,EAAO,MAEX,GAAItL,KAAKuE,UAAU,OAAQ,MAAO,CACjC+G,EAAOtL,KAAKwE,QAAQ6R,KAAKkE,YAEzB,GAAIjP,EAAM,CACT,OAAOA,EAAKwoB,MAAMgD,MACrB,CACA,CAEC,OAAO,KACR,EAEAppB,EAAUjO,UAAUyqC,aAAe,WAClC,IAAI5+B,EAAO,MAEX,GAAItL,KAAKuE,UAAU,OAAQ,MAAO,CACjC+G,EAAOtL,KAAKwE,QAAQ6R,KAAKkE,YAEzB,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF,OAAO9pB,EAAKwoB,MAAM7vB,MACrB,CACA,CAEC,OAAO,KACR,EAEAyJ,EAAUjO,UAAU0qC,cAAgB,WACnC,IAAI7+B,EAAO,MAEX,GAAItL,KAAKuE,UAAU,OAAQ,MAAO,CACjC+G,EAAOtL,KAAKwE,QAAQ6R,KAAKkE,YAEzB,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF,OAAO9pB,EAAKwoB,MAAMU,OACrB,CACA,CAEC,OAAO,KACR,EAEA9mB,EAAUjO,UAAU2qC,WAAa,WAChC,IAAI9+B,EAAO,MAEX,GAAItL,KAAKuE,UAAU,OAAQ,MAAO,CACjC+G,EAAOtL,KAAKwE,QAAQ6R,KAAKkE,YAEzB,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF,OAAO9pB,EAAKwoB,MAAMkD,IACrB,CACA,CAEC,OAAO,KACR,EAEAtpB,EAAUjO,UAAU4qC,aAAe,WAClC,IAAI/+B,EAAO,MAEX,GAAItL,KAAKuE,UAAU,OAAQ,MAAO,CACjC+G,EAAOtL,KAAKwE,QAAQ6R,KAAKkE,YAEzB,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF,OAAO9pB,EAAKwoB,MAAMmD,MACrB,CACA,CAEC,OAAO,KACR,EAGAvpB,EAAUjO,UAAU6qC,KAAO,WAC1B,GAAItqC,KAAKyD,QAAQmc,SAAW5f,KAAKuE,UAAU,UAAW,MAAO,CAC5D,OAAOvE,KAAKwE,QAAQob,QAAQ0qB,MAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA58B,EAAUjO,UAAU8qC,KAAO,WAC1B,GAAIvqC,KAAKyD,QAAQmc,SAAW5f,KAAKuE,UAAU,UAAW,MAAO,CAC5D,OAAOvE,KAAKwE,QAAQob,QAAQ2qB,MAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA78B,EAAUjO,UAAU+qC,mBAAqB,WACxC,GAAIxqC,KAAKyD,QAAQmc,SAAW5f,KAAKuE,UAAU,UAAW,MAAO,CAC5D,OAAOvE,KAAKwE,QAAQob,QAAQ4qB,oBAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA98B,EAAUjO,UAAUgrC,mBAAqB,WACxC,GAAIzqC,KAAKyD,QAAQmc,SAAW5f,KAAKuE,UAAU,UAAW,MAAO,CAC5D,OAAOvE,KAAKwE,QAAQob,QAAQ6qB,oBAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAEA/8B,EAAUjO,UAAUirC,aAAe,WAClC,GAAI1qC,KAAKyD,QAAQmc,SAAW5f,KAAKuE,UAAU,UAAW,MAAO,CAC5D,OAAOvE,KAAKwE,QAAQob,QAAQC,OAC9B,KAAQ,CACN,OAAO,KACT,CACA,EAIAnS,EAAUjO,UAAUkrC,SAAW,SAAU18B,EAAM28B,EAAUnnC,EAAS6F,GACjE,GAAItJ,KAAKuE,UAAU,WAAY,MAAO,CACrCvE,KAAKwE,QAAQmmC,SAASA,SAAS18B,EAAM28B,EAAUnnC,EAAS6F,EAC1D,CACA,EAEAoE,EAAUjO,UAAUorC,cAAgB,SAAU58B,EAAM28B,EAAUnnC,EAAS6F,GACtE,GAAItJ,KAAKuE,UAAU,WAAY,MAAO,CACrCvE,KAAKwE,QAAQmmC,SAASA,SAAS18B,EAAM28B,EAAUnnC,EAAS6F,EAAQ,KAClE,CACA,EAIAoE,EAAUjO,UAAUqrC,WAAa,SAAUvoC,EAAOwoC,EAAQ1pB,EAAQ1c,GACjE3E,KAAKwE,QAAQyzB,MAAM+S,QAAQzoC,EAAOwoC,EAAQ1pB,EAAQ1c,EACnD,EAKA+I,EAAUjO,UAAUwrC,eAAiB,GAGrCv9B,EAAUjO,UAAUyrC,aAAe,SAAUC,EAAMC,EAAU7B,GAE5D,GAAI77B,EAAUjO,UAAUwrC,eAAeE,GAAO,CAC7C,IAAIE,EAAS39B,EAAUjO,UAAUwrC,eAAeE,GAAM1rC,UAAU2rC,GAEhE,GAAIC,EAAQ,CACX,WAAY9B,IAAW,YAAc,YAAcnqC,EAAQmqC,KAAY,SAAU,CAChF,IAAK,IAAItkC,KAAOskC,EAAQ,CACvB8B,EAAOpmC,GAAOskC,EAAOtkC,EAC1B,CACA,KAAU,CACNoH,QAAQC,KAAK,0DACjB,CACA,KAAS,CACND,QAAQC,KAAK,0CAA2C8+B,EAC3D,CACA,KAAQ,CACN/+B,QAAQC,KAAK,wCAAyC6+B,EACxD,CACA,EAGAz9B,EAAUjO,UAAU6rC,eAAiB,SAAUH,EAAMJ,GAEpDr9B,EAAUjO,UAAUwrC,eAAeE,GAAQJ,CAC5C,EAGAr9B,EAAUjO,UAAUmiC,YAAc,WACjC5hC,KAAKwE,QAAU,GAEf,IAAK,IAAI2mC,KAAQz9B,EAAUjO,UAAUwrC,eAAgB,CACpDjrC,KAAKwE,QAAQ2mC,GAAQ,IAAIz9B,EAAUjO,UAAUwrC,eAAeE,GAAMnrC,KACpE,CACA,EAGA0N,EAAUjO,UAAU8E,UAAY,SAAUgnC,EAAQC,GACjD,GAAIxrC,KAAKwE,QAAQ+mC,GAAS,CACzB,OAAO,IACT,KAAQ,CACN,GAAIC,EAAU,CACbn/B,QAAQ+T,MAAM,mCAAqCmrB,EACtD,CACE,OAAO,KACT,CACA,EAEA79B,EAAUjO,UAAUkO,QAAU,CAE7BC,UAAW,SAASA,EAAUxK,GAC7B,QAASA,EAAG+I,aAAe,GAAK/I,EAAG2V,cAAgB,EACrD,EAECgG,SAAU,SAASA,EAAS3b,GAC3B,IAAIqoC,EAAMroC,EAAG+lB,wBAEb,MAAO,CACNxL,IAAK8tB,EAAI9tB,IAAM+M,OAAOghB,YAAcroC,SAASsoC,gBAAgBC,UAC7D3nC,KAAMwnC,EAAIxnC,KAAOymB,OAAOmhB,YAAcxoC,SAASsoC,gBAAgBG,WAElE,EAECC,UAAW,SAASA,EAAUxsC,GAC7B,IAAIysC,EAAQpsC,OAAOgC,OAAOlC,MAAM2F,QAAQ9F,GAAO,GAAK,GAAIA,GAExD,IAAK,IAAIuG,KAAKvG,EAAK,CAClB,GAAIA,EAAIuG,IAAM,MAAQ1G,EAAQG,EAAIuG,MAAQ,SAAU,CACnD,GAAIvG,EAAIuG,aAAcmmC,KAAM,CAC3BD,EAAMlmC,GAAK,IAAImmC,KAAK1sC,EAAIuG,GAC7B,KAAW,CACNkmC,EAAMlmC,GAAK9F,KAAK+rC,UAAUxsC,EAAIuG,GACnC,CACA,CACA,CACE,OAAOkmC,CACT,GAGAt+B,EAAUjO,UAAUw4B,MAAQ,CAC3BiU,OAAQ,GACRhU,SAAU,SAASA,EAAS31B,GAC3BmL,EAAUjO,UAAUw4B,MAAMiU,OAAO3mC,KAAKhD,EACxC,EACCugC,WAAY,SAASA,EAAWvgC,GAC/B,IAAIP,EAAQ0L,EAAUjO,UAAUw4B,MAAMiU,OAAOjrC,QAAQsB,GAErD,GAAIP,GAAS,EAAG,CACf0L,EAAUjO,UAAUw4B,MAAMiU,OAAOllC,OAAOhF,EAAO,EAClD,CACA,EACCmqC,YAAa,SAASA,EAAYC,EAAO7yB,GACxC,IAAI8yB,EAAU,GACV3jC,EACApD,EAEJ,UAAW8mC,IAAU,SAAU,CAC9B1jC,EAAUrF,SAASipC,iBAAiBF,GAEpC,GAAI1jC,EAAQtI,OAAQ,CACnB,IAAK,IAAI0F,EAAI,EAAGA,EAAI4C,EAAQtI,OAAQ0F,IAAK,CACxCR,EAAQoI,EAAUjO,UAAUw4B,MAAMsU,aAAa7jC,EAAQ5C,IAEvD,GAAIR,EAAO,CACV+mC,EAAQ9mC,KAAKD,EACnB,CACA,CACA,CACA,MAAS,UAAW+C,cAAgB,aAAe+jC,aAAiB/jC,aAAe+jC,aAAiB1+B,EAAW,CAC5GpI,EAAQoI,EAAUjO,UAAUw4B,MAAMsU,aAAaH,GAE/C,GAAI9mC,EAAO,CACV+mC,EAAQ9mC,KAAKD,EACjB,CACA,MAAS,GAAI5F,MAAM2F,QAAQ+mC,GAAQ,CAChCA,EAAM5mC,SAAQ,SAAUkc,GACvB2qB,EAAUA,EAAQlhC,OAAOuC,EAAUjO,UAAUw4B,MAAMkU,YAAYzqB,GACnE,GACA,KAAS,CACN,IAAKnI,EAAQ,CACZlN,QAAQC,KAAK,4CAA6C8/B,EAC9D,CACA,CAEE,OAAOC,CACT,EACCE,aAAc,SAASA,EAAa5pC,GACnC,OAAO+K,EAAUjO,UAAUw4B,MAAMiU,OAAOxrC,MAAK,SAAU6B,GACtD,OAAOI,aAAmB+K,EAAYnL,IAAUI,EAAUJ,EAAMI,UAAYA,CAC/E,GACA,GAGA+K,EAAUjO,UAAU+sC,UAAY,SAAUJ,GACzC,IAAIC,EAAU3+B,EAAUjO,UAAUw4B,MAAMkU,YAAYC,EAAO,MAC3D,OAAO1sC,MAAM2F,QAAQgnC,KAAaA,EAAQjsC,OAAS,MAAQisC,CAC5D,EAEA,IAAII,EAAS,SAASA,EAAOlqC,GAE5BvC,KAAKuC,MAAQA,EAEbvC,KAAK0sC,KAAO,IACb,EAIAD,EAAOhtC,UAAUkE,WAAa,SAAUyJ,GAEvC,GAAIpN,KAAK2sC,MAAMv/B,GAAS,CAEvBpN,KAAK0sC,KAAOt/B,CACd,KAAQ,CAENf,QAAQC,KAAK,8DAAgEc,GAE7EpN,KAAK0sC,KAAO,SACd,CAEC1sC,KAAKuC,MAAMI,QAAQgQ,aAAa,mBAAoB3S,KAAK0sC,KAC1D,EAEAD,EAAOhtC,UAAU4N,QAAU,WAE1B,OAAOrN,KAAK0sC,IACb,EAIAD,EAAOhtC,UAAU2N,OAAS,WAEzBpN,KAAK2sC,MAAM3sC,KAAK0sC,MAAMjsC,KAAKT,KAAMA,KAAKuC,MAAMmI,cAAc3H,gBAE1D,GAAI/C,KAAK0sC,KAAKzrC,QAAQ,aAAe,GAAKjB,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAO9H,QAAS,CAEvK9C,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,UACtC,CACA,EAIA4hC,EAAOhtC,UAAUktC,MAAQ,CAIxBC,QAAW,SAASA,EAAQ9pC,GAE3B,GAAI9C,KAAKuC,MAAMkB,QAAQyC,cAAe,CAErClG,KAAKuC,MAAM4D,QAAQolB,uBACtB,KAAS,CAENzoB,EAAQ0C,SAAQ,SAAUiB,GAEzBA,EAAO6G,mBACX,GACA,CAEE,GAAItN,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiB6H,QACvC,CACA,EAIC++B,YAAe,SAASA,EAAY/pC,GAEnCA,EAAQ0C,SAAQ,SAAUiB,GAEzBA,EAAO6G,mBACV,IAEE,GAAItN,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiB6H,QACvC,CACA,EAICg/B,aAAgB,SAASA,EAAahqC,GAErCA,EAAQ0C,SAAQ,SAAUiB,GAEzBA,EAAO6G,mBACV,IAEE,GAAItN,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiB6H,QACvC,CACA,EAICi/B,eAAkB,SAASA,EAAejqC,GACzC,IAAIkqC,EAAUhtC,KAEd,IAAIitC,EAAY,EACZvjB,EAAa1pB,KAAKuC,MAAMM,WAAWF,QAAQyB,YAC3C8oC,EAAM,EACNC,EAAU,MAEdrqC,EAAQ0C,SAAQ,SAAUiB,EAAQX,GAEjC,IAAKW,EAAOsL,WAAY,CAEvBtL,EAAO6G,mBACX,CAEG,GAAI0/B,EAAQzqC,MAAMkB,QAAQwC,iBAAmBQ,EAAOjC,QAAQ4oC,WAAWpkC,QAAUvC,EAAOuC,QAAS,CAEhGmkC,EAAU1mC,CACd,CAEG,GAAIA,EAAOuC,QAAS,CAEnBikC,GAAaxmC,EAAOoD,UACxB,CACA,IAEE,GAAIsjC,EAAS,CAEZD,EAAMxjB,EAAaujB,EAAYE,EAAQtjC,WAEvC,GAAI7J,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1F4oC,EAAQt9B,SAAS,GAEjB7P,KAAKuC,MAAMiC,QAAQyB,iBAAiB6H,QACxC,CAEG,GAAIo/B,EAAM,EAAG,CAEZC,EAAQt9B,SAASq9B,EACrB,KAAU,CAENC,EAAQ7/B,mBACZ,CACA,KAAS,CAEN,GAAItN,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiB6H,QACxC,CACA,CACA,EAICu/B,WAAc,SAASA,EAAWvqC,GAEjC,IAAI6C,EAAO3F,KAEX,IAAI0M,EAAa/G,EAAKpD,MAAMI,QAAQyB,YAEpC,IAAIuI,EAAa,EAEjB,IAAI2gC,EAAY,EAEhB,IAAIC,EAAgB,EAEpB,IAAIC,EAAe,EAEnB,IAAIC,EAAc,GAElB,IAAIC,EAAqB,GAEzB,IAAIC,EAAkB,EAEtB,IAAIC,EAAgB,EAEpB,IAAIC,EAAU,EAGd,SAASC,EAAUhkC,GAElB,IAAIiD,EAEJ,UAAWjD,GAAS,SAAU,CAE7B,GAAIA,EAAM7I,QAAQ,MAAQ,EAAG,CAE5B8L,EAAWL,EAAa,IAAMO,SAASnD,EAC5C,KAAW,CAENiD,EAAWE,SAASnD,EACzB,CACA,KAAU,CAENiD,EAAWjD,CACf,CAEG,OAAOiD,CACV,CAIE,SAASghC,EAAajrC,EAASkrC,EAAWjhC,EAAUkhC,GAEnD,IAAIC,EAAe,GACfC,EAAgB,EAChBC,EAAiB,EACjBC,EAAe,EACfC,EAAyBf,EACzBL,EAAM,EACNqB,EAAc,EACdC,EAAgB,GAEpB,SAASC,EAASvpC,GAEjB,OAAO6H,GAAY7H,EAAIuB,OAAOH,WAAWooC,WAAa,EAC1D,CAEG,SAASC,EAAWzpC,GAEnB,OAAO4oC,EAAU5oC,EAAI4E,OAASiD,GAAY7H,EAAIuB,OAAOH,WAAWsoC,aAAe,EACnF,CAEG9rC,EAAQ0C,SAAQ,SAAUN,EAAKY,GAE9B,IAAIgE,EAAQmkC,EAAaU,EAAWzpC,GAAOupC,EAASvpC,GAEpD,GAAIA,EAAIuB,OAAOqG,UAAYhD,EAAO,CAEjCokC,EAAa3oC,KAAKL,EACvB,KAAW,CAEN,GAAIA,EAAIuB,OAAOmL,UAAY1M,EAAIuB,OAAOmL,SAAW9H,EAAO,CAEvD5E,EAAI4E,MAAQ5E,EAAIuB,OAAOmL,SAEvBo8B,GAAa9oC,EAAIuB,OAAOmL,SAExB08B,GAA0BL,EAAa/oC,EAAIuB,OAAOH,WAAWsoC,aAAe,EAAI1pC,EAAIuB,OAAOH,WAAWooC,WAAa,EAEnH,GAAIJ,EAAwB,CAE3BvhC,EAAW1L,KAAK0Y,MAAMi0B,EAAYM,EACzC,CACA,KAAY,CAENE,EAAcjpC,KAAKL,GAEnBqpC,GAAeN,EAAa/oC,EAAIuB,OAAOH,WAAWsoC,aAAe,EAAI1pC,EAAIuB,OAAOH,WAAWooC,WAAa,CAC9G,CACA,CACA,IAEG,GAAIR,EAAa9tC,OAAQ,CAExB8tC,EAAa1oC,SAAQ,SAAUN,GAE9BipC,GAAiBF,EAAa/oC,EAAI4E,MAAQ5E,EAAIuB,OAAOqG,SAAW5H,EAAIuB,OAAOqG,SAE3E5H,EAAI4E,MAAQ5E,EAAIuB,OAAOqG,QAC5B,IAEIshC,EAAiBJ,EAAYG,EAE7BE,EAAeE,EAAcltC,KAAK0Y,MAAMq0B,EAAiBG,GAAeH,EAExElB,EAAMkB,EAAiBC,EAAeE,EAEtCrB,GAAOa,EAAaS,EAAeJ,EAAgBC,EAAcJ,EACrE,KAAU,CAENf,EAAMqB,EAAcP,EAAY3sC,KAAK0Y,MAAMi0B,EAAYO,GAAeA,EAAcP,EAEpFQ,EAAchpC,SAAQ,SAAUiB,GAE/BA,EAAOqD,MAAQmkC,EAAaU,EAAWloC,GAAUgoC,EAAShoC,EAC/D,GACA,CAEG,OAAOymC,CACV,CAEE,GAAIltC,KAAKuC,MAAMkB,QAAQwC,kBAAoBjG,KAAKuC,MAAMgC,UAAU,mBAAoB,MAAO,CAE1FvE,KAAKuC,MAAMiC,QAAQyB,iBAAiB6H,QACvC,CAIE,GAAI9N,KAAKuC,MAAMM,WAAWF,QAAQiK,aAAe5M,KAAKuC,MAAMM,WAAWF,QAAQkK,aAAc,CAE5FH,GAAc1M,KAAKuC,MAAMM,WAAWF,QAAQwJ,YAAcnM,KAAKuC,MAAMM,WAAWF,QAAQyB,WAC3F,CAEEtB,EAAQ0C,SAAQ,SAAUiB,GAEzB,IAAIqD,EAAOgD,EAAUC,EAErB,GAAItG,EAAOuC,QAAS,CAEnBc,EAAQrD,EAAOH,WAAWwD,MAE1BgD,EAAWG,SAASxG,EAAOqG,UAE3B,GAAIhD,EAAO,CAEViD,EAAW+gC,EAAUhkC,GAErB6C,GAAcI,EAAWD,EAAWC,EAAWD,EAE/C,GAAIrG,EAAOH,WAAWsoC,YAAa,CAElClB,EAAmBnoC,KAAK,CAEvBkB,OAAQA,EAERqD,MAAOiD,EAAWD,EAAWC,EAAWD,IAIzC6gC,GAAmBlnC,EAAOH,WAAWsoC,WAC3C,CACA,KAAW,CAENnB,EAAYloC,KAAK,CAEhBkB,OAAQA,EAERqD,MAAO,IAIRyjC,GAAiB9mC,EAAOH,WAAWooC,WAAa,CACrD,CACA,CACA,IAIEpB,EAAY5gC,EAAaC,EAIzB6gC,EAAensC,KAAK0Y,MAAMuzB,EAAYC,GAItC,IAAIM,EAAUE,EAAaN,EAAaH,EAAWE,EAAc,OAIjE,GAAIC,EAAYrtC,QAAUytC,EAAU,EAAG,CAEtCJ,EAAYA,EAAYrtC,OAAS,GAAG0J,QAAU+jC,CACjD,CAIEJ,EAAYjoC,SAAQ,SAAUN,GAE7BooC,GAAapoC,EAAI4E,KACpB,IAEE8jC,EAAgBvsC,KAAKE,IAAIssC,GAAWP,EAIpC,GAAIM,EAAgB,GAAKD,EAAiB,CAEzCE,EAAUE,EAAaL,EAAoBE,EAAevsC,KAAK0Y,MAAM6zB,EAAgBD,GAAkB,KAC1G,CAIE,GAAID,EAAmBttC,OAAQ,CAE9BstC,EAAmBA,EAAmBttC,OAAS,GAAG0J,OAAS+jC,CAC9D,CAEEJ,EAAYjoC,SAAQ,SAAUN,GAE7BA,EAAIuB,OAAOoJ,SAAS3K,EAAI4E,MAC3B,IAEE4jC,EAAmBloC,SAAQ,SAAUN,GAEpCA,EAAIuB,OAAOoJ,SAAS3K,EAAI4E,MAC3B,GACA,GAIA4D,EAAUjO,UAAU6rC,eAAe,SAAUmB,GAC7C,IAAIoC,EAAW,SAASA,EAAStsC,GAChCvC,KAAKuC,MAAQA,EACbvC,KAAK07B,OAAS,UACd17B,KAAK8uC,KAAO,MACZ9uC,KAAK+uC,SAAW,GAChB/uC,KAAKgvC,SAAW,EACjB,EAEAH,EAASpvC,UAAUkE,WAAa,WAC/B3D,KAAKgvC,SAAWthC,EAAUjO,UAAUkO,QAAQo+B,UAAU/rC,KAAK27B,MAC5D,EAGAkT,EAASpvC,UAAU4iC,2BAA6B,SAAUlb,GACzDnnB,KAAKgvC,SAASC,QAAQC,cAAcD,QAAU9nB,CAC/C,EAGA0nB,EAASpvC,UAAU8U,iCAAmC,SAAU9N,EAAQ0gB,GACvEnnB,KAAKgvC,SAASC,QAAQC,cAAcpsC,QAAQ2D,GAAU0gB,EAEtD,GAAInnB,KAAK8uC,OAAS9uC,KAAK8uC,KAAKI,cAAcpsC,QAAQ2D,GAAS,CAC1DzG,KAAK8uC,KAAKI,cAAcpsC,QAAQ2D,GAAU0gB,CAC5C,CACA,EAGA0nB,EAASpvC,UAAU6iC,YAAc,SAAU5G,EAAQoT,GAClD,GAAI9uC,KAAKgvC,SAAStT,GAAS,CAC1B17B,KAAKmvC,aAAanvC,KAAKgvC,SAAStT,GAASoT,EAC3C,KAAQ,CACN9uC,KAAKgvC,SAAStT,GAAUoT,CAC1B,CACA,EAEAD,EAASpvC,UAAU0vC,aAAe,SAAUL,EAAMvF,GACjD,IAAK,IAAItkC,KAAOskC,EAAQ,CACvB,GAAIuF,EAAK7pC,IAAQ7F,EAAQ0vC,EAAK7pC,KAAS,SAAU,CAChDjF,KAAKmvC,aAAaL,EAAK7pC,GAAMskC,EAAOtkC,GACvC,KAAS,CACN6pC,EAAK7pC,GAAOskC,EAAOtkC,EACtB,CACA,CACA,EAGA4pC,EAASpvC,UAAU8iC,UAAY,SAAU6M,GACxC,IAAIzpC,EAAO3F,KAEXovC,EAAgBA,GAAiB,UAGjC,SAASC,EAAaC,EAAOC,GAC5B,IAAK,IAAIC,KAAQF,EAAO,CACvB,GAAIlwC,EAAQkwC,EAAME,KAAU,SAAU,CACrC,IAAKD,EAAKC,GAAO,CAChBD,EAAKC,GAAQ,EAClB,CACIH,EAAaC,EAAME,GAAOD,EAAKC,GACnC,KAAU,CACND,EAAKC,GAAQF,EAAME,EACvB,CACA,CACA,CAGC,GAAIJ,IAAkB,MAAQlM,UAAUuM,SAAU,CAEjDL,EAAgBlM,UAAUuM,SAASC,aACrC,CAEC,GAAIN,EAAe,CAGlB,IAAKzpC,EAAKqpC,SAASI,GAAgB,CAClC,IAAIO,EAASP,EAAcvmC,MAAM,KAAK,GAEtC,GAAIlD,EAAKqpC,SAASW,GAAS,CAC1BtjC,QAAQC,KAAK,8EAA+E8iC,EAAeO,GAC3GP,EAAgBO,CACpB,KAAU,CACNtjC,QAAQC,KAAK,kEAAmE8iC,GAChFA,EAAgB,SACpB,CACA,CACA,CAECzpC,EAAK+1B,OAAS0T,EAGdzpC,EAAKmpC,KAAOphC,EAAUjO,UAAUkO,QAAQo+B,UAAUpmC,EAAKqpC,SAASC,SAAW,IAE3E,GAAIG,GAAiB,UAAW,CAC/BC,EAAa1pC,EAAKqpC,SAASI,GAAgBzpC,EAAKmpC,KAClD,CAECnpC,EAAKpD,MAAMkB,QAAQs9B,UAAUtgC,KAAKkF,EAAKpD,MAAOoD,EAAK+1B,OAAQ/1B,EAAKmpC,MAEhEnpC,EAAKiqC,kBACN,EAGAf,EAASpvC,UAAUgoC,UAAY,SAAU/L,GACxC,OAAO/1B,KAAK+1B,MACb,EAGAmT,EAASpvC,UAAUioC,QAAU,SAAUhM,GACtC,OAAOA,EAAS17B,KAAKgvC,SAAStT,GAAU17B,KAAK8uC,IAC9C,EAGAD,EAASpvC,UAAUowC,QAAU,SAAUN,EAAMzvC,GAC5C,IAAIyvC,EAAOzvC,EAAQyvC,EAAO,IAAMzvC,EAAQyvC,EACpCO,EAAYP,EAAK1mC,MAAM,KACvB4O,EAAOzX,KAAK+vC,gBAAgBD,EAAW9vC,KAAK07B,QAMhD,OAAOjkB,GAAQ,EAChB,EAGAo3B,EAASpvC,UAAUswC,gBAAkB,SAAUR,EAAM7T,GACpD,IAAI/1B,EAAO3F,KACX,IAAIwI,EAAO7C,EAAKmpC,KAEhBS,EAAK/pC,SAAQ,SAAUwqC,GACtB,IAAIC,EAEJ,GAAIznC,EAAM,CACTynC,EAAWznC,EAAKwnC,GAEhB,UAAWC,GAAY,YAAa,CACnCznC,EAAOynC,CACX,KAAU,CACNznC,EAAO,KACX,CACA,CACA,IAEC,OAAOA,CACR,EAGAqmC,EAASpvC,UAAUmU,KAAO,SAAU27B,EAAMnmC,GACzC,IAAKpJ,KAAK+uC,SAASQ,GAAO,CACzBvvC,KAAK+uC,SAASQ,GAAQ,EACxB,CAECvvC,KAAK+uC,SAASQ,GAAMhqC,KAAK6D,GAEzBA,EAASpJ,KAAK6vC,QAAQN,GAAOvvC,KAAK8uC,KACnC,EAGAD,EAASpvC,UAAUmwC,iBAAmB,WACrC,IAAIjqC,EAAO3F,KAEX,IAAIkwC,EAAQ,SAASA,EAAMX,GAC1B5pC,EAAKopC,SAASQ,GAAM/pC,SAAQ,SAAU2qC,GACrCA,EAAQxqC,EAAKkqC,QAAQN,GAAO5pC,EAAKmpC,KACpC,GACA,EAEC,IAAK,IAAIS,KAAQ5pC,EAAKopC,SAAU,CAC/BmB,EAAMX,EACR,CACA,EAGAV,EAASpvC,UAAUk8B,MAAQ,CAC1BsT,QAAW,CACV7F,OAAU,CACT1nB,KAAQ,OACR0uB,MAAS,SAEVttC,QAAW,GACXib,KAAQ,CACPsyB,QAAW,UACXjwB,MAAS,SAEVd,WAAc,CACbgxB,UAAa,YACbC,WAAc,YACdC,MAAS,QACTC,YAAe,aACfC,KAAQ,OACRC,WAAc,YACd5Z,KAAQ,OACR6Z,WAAc,YACd9Z,KAAQ,OACR+Z,WAAc,YACd7I,IAAO,OAERkH,cAAiB,CAChBD,QAAW,mBACXnsC,QAAW,MAKd4K,EAAUjO,UAAU6rC,eAAe,WAAYuD,GAC/C,IAAIiC,EAAQ,SAASA,EAAMvuC,GAC1BvC,KAAKuC,MAAQA,CACd,EAEAuuC,EAAMrxC,UAAUsxC,eAAiB,SAAUC,GAC1C,IAAIrrC,EAAO3F,KACPixC,EAAc,GACdC,EAEJA,EAAaxjC,EAAUjO,UAAUw4B,MAAMkU,YAAY6E,GAEnDE,EAAW1rC,SAAQ,SAAU2rC,GAC5B,GAAIxrC,EAAKpD,QAAU4uC,EAAK,CACvBF,EAAY1rC,KAAK4rC,EACpB,CACA,IAEC,OAAOF,CACR,EAEAH,EAAMrxC,UAAU2xC,KAAO,SAAUJ,EAAWjG,EAAQ1pB,EAAQ1c,GAC3D,IAAIgB,EAAO3F,KACPixC,EAAcjxC,KAAK+wC,eAAeC,GAEtCC,EAAYzrC,SAAQ,SAAU0rC,GAC7BA,EAAWpG,WAAWnlC,EAAKpD,MAAMI,QAASooC,EAAQ1pB,EAAQ1c,EAC5D,IAEC,IAAKssC,EAAY7wC,QAAU4wC,EAAW,CACrC3kC,QAAQC,KAAK,6DAA8D0kC,EAC7E,CACA,EAEAF,EAAMrxC,UAAUurC,QAAU,SAAUzoC,EAAOwoC,EAAQ1pB,EAAQ1c,GAC1D,GAAI3E,KAAKuC,MAAMgC,UAAUwmC,GAAS,CACjC,OAAO/qC,KAAKuC,MAAMiC,QAAQumC,GAAQsG,cAAc9uC,EAAO8e,EAAQ1c,EACjE,KAAQ,CACN0H,QAAQC,KAAK,4CAA6Cy+B,EAC5D,CACA,EAEAr9B,EAAUjO,UAAU6rC,eAAe,QAASwF,GAE5C,IAAIQ,EAAW,SAASA,EAAS/uC,GAChCvC,KAAKuC,MAAQA,EACbvC,KAAKuxC,aAAe,CAAC,GAAI,OAAQ,WAAY,YAAa,QAAS,aACpE,EAGAD,EAAS7xC,UAAU2U,iBAAmB,SAAU3N,GAC/C,IAAId,EAAO3F,KACPsF,EAAQ,MACRsF,EAAS,GAEb5K,KAAKuxC,aAAa/rC,SAAQ,SAAUyI,GACnC,IAAIhJ,EAAM,YAAcgJ,EAAKujC,OAAO,GAAGC,cAAgBxjC,EAAKoX,MAAM,IAC9D7O,EAEJ,GAAI/P,EAAOH,WAAWrB,GAAM,CAC3BuR,EAAW7Q,EAAK+rC,eAAejrC,EAAOH,WAAWrB,IAEjD,GAAIuR,EAAU,CACblR,EAAQ,KAERsF,EAAO3F,GAAO,CACbuR,SAAUA,EACVsB,OAAQrR,EAAOH,WAAWrB,EAAM,WAAa,GAElD,CACA,CACA,IAEC,GAAIK,EAAO,CACVmB,EAAOjC,QAAQgS,SAAW5L,CAC5B,CACA,EAEA0mC,EAAS7xC,UAAUiyC,eAAiB,SAAU5xC,GAC7C,IAAI0W,EAAW,MAGf,cAAe1W,IAAU,YAAc,YAAcV,EAAQU,IAC5D,IAAK,SACJ,GAAIE,KAAK2xC,UAAU7xC,GAAQ,CAC1B0W,EAAWxW,KAAK2xC,UAAU7xC,EAC9B,KAAU,CACNuM,QAAQC,KAAK,sDAAuDxM,EACxE,CACG,MAED,IAAK,WACJ0W,EAAW1W,EACX,MAGF,OAAO0W,CACR,EAGA86B,EAAS7xC,UAAUmxB,aAAe,SAAU7rB,EAAKkJ,GAChD,IAAIhJ,EAAM,YAAcgJ,EAAKujC,OAAO,GAAGC,cAAgBxjC,EAAKoX,MAAM,IAC9DusB,EAAe7sC,EAAI6E,eAGvB,IAAIjF,EAAO+I,EAAUjO,UAAUkO,QAAQo+B,UAAUhnC,EAAIJ,MAAQ,IAE7D3E,KAAKuC,MAAMmI,cAAcvB,UAAS,SAAU1C,GAC3C,IAAI3G,EAAO0W,EAAUsB,EAAQ+5B,EAE7B,GAAIprC,EAAOjC,QAAQgS,SAAU,CAE5BA,EAAW/P,EAAOjC,QAAQgS,SAASvR,IAAQwB,EAAOjC,QAAQgS,SAASA,UAAY,MAE/E,GAAIA,EAAU,CACb1W,EAAQ2G,EAAOgK,cAAc9L,GAE7B,GAAI7E,GAAS,YAAa,CACzB+xC,EAAcprC,EAAOmD,eACrBkO,SAAgBtB,EAASsB,SAAW,WAAatB,EAASsB,OAAOhY,EAAO6E,EAAMsJ,EAAM4jC,EAAaD,GAAgBp7B,EAASsB,OAC1HrR,EAAOiK,cAAc/L,EAAM6R,EAASA,SAAS1W,EAAO6E,EAAMsJ,EAAM6J,EAAQ+5B,EAAaD,GAC1F,CACA,CACA,CACA,IAEC,OAAOjtC,CACR,EAGA2sC,EAAS7xC,UAAUkyC,UAAY,GAE/BjkC,EAAUjO,UAAU6rC,eAAe,WAAYgG,GAC/C,IAAIQ,EAAO,SAASA,EAAKvvC,GAExBvC,KAAKuC,MAAQA,EACbvC,KAAK4K,OAAS,MACd5K,KAAK+xC,IAAM,GACX/xC,KAAKgyC,aAAe,MACpBhyC,KAAK8X,OAAS,MAEd9X,KAAKiyC,cAAgBjyC,KAAKkyC,sBAC1BlyC,KAAKmyC,WAAanyC,KAAKoyC,mBACvBpyC,KAAKqyC,eAAiB,MACtBryC,KAAKsyC,aAAe,MACpBtyC,KAAKuyC,cAAgB,MAErBvyC,KAAK8kB,gBAAkB,MACvB9kB,KAAKqwC,QAAU,MAEfrwC,KAAKwyC,aAAe,CACrB,EAGAV,EAAKryC,UAAUkE,WAAa,WAC3B,IAAI8uC,EAEJzyC,KAAKiyC,cAAc7qC,YAAYpH,KAAKmyC,YAEpC,GAAInyC,KAAKuC,MAAMkB,QAAQ25B,kBAAmB,CACzC,UAAWp9B,KAAKuC,MAAMkB,QAAQ25B,mBAAqB,SAAU,CAC5DqV,EAAWpvC,SAASC,cAAc,YAClCmvC,EAASn6B,UAAYtY,KAAKuC,MAAMkB,QAAQ25B,kBAAkBsV,OAC1D1yC,KAAKqyC,eAAiBI,EAASE,QAAQxvC,UAC1C,KAAS,CACNnD,KAAKqyC,eAAiBryC,KAAKuC,MAAMkB,QAAQ25B,iBAC5C,CACA,CAECp9B,KAAKuyC,cAAgBvyC,KAAKuC,MAAMkB,QAAQy5B,iBAAmBl9B,KAAK4yC,qBAEhE5yC,KAAKgyC,aAAehyC,KAAKuC,MAAMkB,QAAQq5B,kBAAoB98B,KAAK6yC,oBAEhE,GAAI7yC,KAAKuC,MAAMkB,QAAQ45B,gBAAiB,CACvC,UAAWr9B,KAAKuC,MAAMkB,QAAQ45B,iBAAmB,SAAU,CAC1DoV,EAAWpvC,SAASC,cAAc,YAClCmvC,EAASn6B,UAAYtY,KAAKuC,MAAMkB,QAAQ45B,gBAAgBqV,OACxD1yC,KAAKsyC,aAAeG,EAASE,QAAQxvC,UACxC,KAAS,CACNnD,KAAKsyC,aAAetyC,KAAKuC,MAAMkB,QAAQ45B,eAC1C,CACA,CAEC,GAAIr9B,KAAKuC,MAAMkB,QAAQs5B,WAAY,CAClC/8B,KAAKukB,UAAUvkB,KAAKuC,MAAMkB,QAAQs5B,WACpC,CAEC,GAAI/8B,KAAKuC,MAAMkB,QAAQu5B,WAAY,CAClCh9B,KAAKwkC,UAAUxkC,KAAKuC,MAAMkB,QAAQu5B,WACpC,CAEC,GAAIh9B,KAAKuC,MAAMkB,QAAQo5B,QAAS,CAC/B78B,KAAKykC,OAAOzkC,KAAKuC,MAAMkB,QAAQo5B,QACjC,CAEC,GAAI78B,KAAKuC,MAAMkB,QAAQqa,oBAAqB,CAC3C,GAAI9d,KAAKuC,MAAMkB,QAAQ6b,WAAY,CAClCtf,KAAK8kB,gBAAkB,MACvBzY,QAAQ+T,MAAM,2FACjB,KAAS,CACN,GAAIpgB,KAAKuC,MAAMgC,UAAU,QAAS,CACjCvE,KAAK8kB,gBAAkB9kB,KAAKuC,MAAMkB,QAAQqa,oBAC1C9d,KAAKuC,MAAMiC,QAAQsd,KAAKgxB,sBAAsB9yC,KAAK8kB,gBACvD,KAAU,CACNzY,QAAQ+T,MAAM,6DAClB,CACA,CACA,CACA,EAEA0xB,EAAKryC,UAAUyyC,oBAAsB,WACpC,IAAI9uC,EAAKC,SAASC,cAAc,OAChCF,EAAGG,UAAUC,IAAI,oBACjB,OAAOJ,CACR,EAEA0uC,EAAKryC,UAAU2yC,iBAAmB,WACjC,IAAIhvC,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,wBACjBJ,EAAGuP,aAAa,OAAQ,SAExB,OAAOvP,CACR,EAGA0uC,EAAKryC,UAAU8kB,UAAY,SAAUzM,EAAQhK,GAC5C,GAAIA,EAAQ,CACX9N,KAAK8X,OAAS9X,KAAK8X,QAAU,GAE7B,IAAK,IAAI7S,KAAO6S,EAAQ,CACvB9X,KAAK8X,OAAO7S,GAAO6S,EAAO7S,EAC7B,CACA,KAAQ,CACNjF,KAAK8X,OAASA,CAChB,CACA,EAEAg6B,EAAKryC,UAAUszC,UAAY,WAC1B,OAAO/yC,KAAK8X,QAAU,EACvB,EAGAg6B,EAAKryC,UAAU+kC,UAAY,SAAU55B,GACpC5K,KAAKgzC,qBAEL,UAAWpoC,GAAU,SAAU,CAC9B5K,KAAK4K,OAAOqoC,OAASroC,CACvB,KAAQ,CACN,IAAK,IAAI3F,KAAO2F,EAAQ,CACvB5K,KAAK4K,OAAO3F,GAAO2F,EAAO3F,EAC7B,CACA,CACA,EAGA6sC,EAAKryC,UAAUuzC,mBAAqB,SAAUvlC,GAC7C,IAAI9H,EAAO3F,KACX,IAAK2F,EAAKiF,QAAU6C,EAAO,CAE1B9H,EAAKiF,OAAS,GAGd,IAAK,IAAI3F,KAAOU,EAAKutC,cAAe,CACnCvtC,EAAKiF,OAAO3F,GAAOU,EAAKutC,cAAcjuC,EACzC,CACA,CACA,EAGA6sC,EAAKryC,UAAUglC,OAAS,SAAUsN,GACjC/xC,KAAK+xC,IAAMA,CACZ,EAGAD,EAAKryC,UAAUilC,OAAS,WACvB,OAAO1kC,KAAK+xC,GACb,EAGAD,EAAKryC,UAAUklB,SAAW,SAAU4f,EAAYnlB,GAG/C,GAAIpf,KAAK8kB,gBAAiB,CACzB,OAAO9kB,KAAKmzC,sBACd,KAAQ,CACN,OAAOnzC,KAAKozC,kBAAkB7O,EAAYnlB,EAC5C,CACA,EAEA0yB,EAAKryC,UAAUue,SAAW,SAAU8I,GACnC,IAAI0B,EAEJ,IAAKxoB,KAAKqwC,QAAS,CAElB7nB,EAASxoB,KAAKuC,MAAMkB,QAAQ85B,iCAAmCv9B,KAAKuC,MAAMM,WAAWiB,aAAa+I,aAAe,EAEjH,GAAIia,EAAO0B,EAAQ,CAClBxoB,KAAKuC,MAAMiC,QAAQsd,KAAK9D,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC7E,CACA,CACA,EAEAy2B,EAAKryC,UAAU4kC,mBAAqB,WACnCrkC,KAAKwyC,cACN,EAEAV,EAAKryC,UAAU0zC,qBAAuB,WACrCnzC,KAAKuC,MAAMM,WAAWqc,QAAQ,IAC9B,OAAOlf,KAAKuC,MAAMiC,QAAQsd,KAAK4C,QAAQ,EACxC,EAEAotB,EAAKryC,UAAU2zC,kBAAoB,SAAU7O,EAAYnlB,GACxD,IAAIi0B,EAAUrzC,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrCsnC,EAAQ7uB,YAAY+f,GAAYnpB,MAAK,SAAUzW,GAC9C0uC,EAAQ9wC,MAAMM,WAAWqc,QAAQva,EAAM4/B,EAAYnlB,GAAgBhE,MAAK,WACvEtP,GACJ,IAAMuP,OAAM,SAAUzG,GAClB7I,EAAO6I,EACX,GACA,IAAKyG,OAAM,SAAUzG,GAClB7I,EAAO6I,EACV,GACA,GACA,EAEAk9B,EAAKryC,UAAU6zC,mBAAqB,SAAU3uC,EAAMgrC,GACnD,IAAIhqC,EAAO3F,KACPuJ,EAAS,GAEbomC,EAASA,GAAU,GAEnB,GAAIjwC,MAAM2F,QAAQV,GAAO,CACxBA,EAAKa,SAAQ,SAAUkc,EAAM5b,GAC5ByD,EAASA,EAAO4B,OAAOxF,EAAK2tC,mBAAmB5xB,EAAMiuB,EAASA,EAAS,IAAM7pC,EAAI,IAAMA,GAC1F,GACA,MAAQ,WAAYnB,IAAS,YAAc,YAAcvF,EAAQuF,MAAW,SAAU,CACpF,IAAK,IAAIM,KAAON,EAAM,CACrB4E,EAASA,EAAO4B,OAAOxF,EAAK2tC,mBAAmB3uC,EAAKM,GAAM0qC,EAASA,EAAS,IAAM1qC,EAAM,IAAMA,GACjG,CACA,KAAQ,CACNsE,EAAOhE,KAAK,CAAEN,IAAK0qC,EAAQ7vC,MAAO6E,GACpC,CAEC,OAAO4E,CACR,EAEAuoC,EAAKryC,UAAU8zC,gBAAkB,SAAUz7B,GAC1C,IAAIvO,EAASvJ,KAAKszC,mBAAmBx7B,GACjC07B,EAAU,GAEdjqC,EAAO/D,SAAQ,SAAUkc,GACxB8xB,EAAQjuC,KAAKkuC,mBAAmB/xB,EAAKzc,KAAO,IAAMwuC,mBAAmB/xB,EAAK5hB,OAC5E,IAEC,OAAO0zC,EAAQE,KAAK,IACrB,EAGA5B,EAAKryC,UAAU+kB,YAAc,SAAUjL,GACtC,IAAIo6B,EAAU3zC,KAEX,IAAC2F,EAAO3F,KACP+xC,EAAMpsC,EAAKosC,IACX6B,EAIJjuC,EAAK6sC,eACLoB,EAAYjuC,EAAK6sC,aAEjB7sC,EAAKqtC,qBAEL,OAAO,IAAInnC,SAAQ,SAAUC,EAASC,GACrC,GAAIpG,EAAKpD,MAAMkB,QAAQi8B,eAAej/B,KAAKkzC,EAAQpxC,MAAOoD,EAAKosC,IAAKpsC,EAAKmS,UAAY,MAAO,CAE3FnS,EAAK0qC,QAAU,KAEf,IAAK92B,EAAQ,CACZ5T,EAAKkuC,YACT,CAEGF,EAAQpB,cAAcR,EAAKpsC,EAAKiF,OAAQjF,EAAKmS,QAAQsD,MAAK,SAAUzW,GACnE,GAAIivC,IAAcjuC,EAAK6sC,aAAc,CACpC,GAAI7sC,EAAKpD,MAAMkB,QAAQk8B,aAAc,CACpCh7B,EAAOgB,EAAKpD,MAAMkB,QAAQk8B,aAAal/B,KAAKkF,EAAKpD,MAAOoD,EAAKosC,IAAKpsC,EAAKmS,OAAQnT,EACrF,CACKmH,EAAQnH,GAERgB,EAAKmuC,aACLnuC,EAAK0qC,QAAU,KACpB,KAAW,CACNhkC,QAAQC,KAAK,iIAClB,CACA,IAAM+O,OAAM,SAAU+E,GAClB/T,QAAQ+T,MAAM,oBAAqBA,GACnCza,EAAKpD,MAAMkB,QAAQm8B,UAAUn/B,KAAKkF,EAAKpD,MAAO6d,GAE9Cza,EAAKouC,YAELx+B,YAAW,WACV5P,EAAKmuC,YACV,GAAO,KAEHnuC,EAAK0qC,QAAU,MAEftkC,EAAOqU,EACX,GACA,KAAS,CACNrU,GACH,CACA,GACA,EAEA+lC,EAAKryC,UAAUo0C,WAAa,WAC3B,IAAIG,SAAoBh0C,KAAKuC,MAAMkB,QAAQ05B,aAAe,WAAan9B,KAAKuC,MAAMkB,QAAQ05B,aAAen9B,KAAKuC,MAAMkB,QAAQ05B,WAE5H,GAAI6W,EAAY,CAEfh0C,KAAK8zC,aAEL,MAAO9zC,KAAKmyC,WAAWhvC,WAAY,CAClCnD,KAAKmyC,WAAWvsC,YAAY5F,KAAKmyC,WAAWhvC,WAC/C,CAAGnD,KAAKmyC,WAAW5uC,UAAUmkB,OAAO,mBAClC1nB,KAAKmyC,WAAW5uC,UAAUC,IAAI,qBAE9B,GAAIxD,KAAKqyC,eAAgB,CACxBryC,KAAKmyC,WAAW/qC,YAAYpH,KAAKqyC,eACpC,KAAS,CACNryC,KAAKmyC,WAAW75B,UAAYtY,KAAKuC,MAAMiC,QAAQmP,SAASk8B,QAAQ,eACnE,CAEE7vC,KAAKuC,MAAMI,QAAQyE,YAAYpH,KAAKiyC,cACtC,CACA,EAEAH,EAAKryC,UAAUs0C,UAAY,WAC1B/zC,KAAK8zC,aAEL,MAAO9zC,KAAKmyC,WAAWhvC,WAAY,CAClCnD,KAAKmyC,WAAWvsC,YAAY5F,KAAKmyC,WAAWhvC,WAC9C,CAAEnD,KAAKmyC,WAAW5uC,UAAUmkB,OAAO,qBAClC1nB,KAAKmyC,WAAW5uC,UAAUC,IAAI,mBAE9B,GAAIxD,KAAKsyC,aAAc,CACtBtyC,KAAKmyC,WAAW/qC,YAAYpH,KAAKsyC,aACnC,KAAQ,CACNtyC,KAAKmyC,WAAW75B,UAAYtY,KAAKuC,MAAMiC,QAAQmP,SAASk8B,QAAQ,aAClE,CAEC7vC,KAAKuC,MAAMI,QAAQyE,YAAYpH,KAAKiyC,cACrC,EAEAH,EAAKryC,UAAUq0C,WAAa,WAC3B,GAAI9zC,KAAKiyC,cAAchrC,WAAY,CAClCjH,KAAKiyC,cAAchrC,WAAWrB,YAAY5F,KAAKiyC,cACjD,CACA,EAGAH,EAAKryC,UAAUyzC,cAAgB,CAC9BD,OAAQ,OAGTnB,EAAKryC,UAAUozC,oBAAsB,SAAUd,EAAKnnC,EAAQkN,GAE3D,GAAIi6B,EAAK,CACR,GAAIj6B,GAAUlY,OAAO+I,KAAKmP,GAAQ1X,OAAQ,CACzC,IAAKwK,EAAOqoC,QAAUroC,EAAOqoC,OAAOvD,eAAiB,MAAO,CAC3D9kC,EAAOqoC,OAAS,MAEhBlB,IAAQA,EAAIlxC,SAAS,KAAO,IAAM,KAAOb,KAAKwE,QAAQuZ,KAAKw1B,gBAAgBz7B,EAC/E,CACA,CACA,CAEC,OAAOi6B,CACR,EAEAD,EAAKryC,UAAUmzC,qBAAuB,SAAUb,EAAKnnC,EAAQkN,GAC5D,IAAInS,EAAO3F,KACPi0C,EAEJ,OAAO,IAAIpoC,SAAQ,SAAUC,EAASC,GAGrCgmC,EAAMpsC,EAAKqsC,aAAavxC,KAAKkF,EAAKpD,MAAOwvC,EAAKnnC,EAAQkN,GAGtD,GAAIlN,EAAOqoC,OAAOxB,eAAiB,MAAO,CACzCwC,EAAc70C,EAAQuG,EAAKpD,MAAMkB,QAAQw5B,mBAAqB,SAAWt3B,EAAKpD,MAAMkB,QAAQw5B,gBAAkBt3B,EAAKuuC,sBAAsBvuC,EAAKpD,MAAMkB,QAAQw5B,iBAC5J,GAAIgX,EAAa,CAEhB,IAAK,IAAIhvC,KAAOgvC,EAAYE,QAAS,CACpC,IAAKvpC,EAAOupC,QAAS,CACpBvpC,EAAOupC,QAAU,EACvB,CAEK,UAAWvpC,EAAOupC,QAAQlvC,KAAS,YAAa,CAC/C2F,EAAOupC,QAAQlvC,GAAOgvC,EAAYE,QAAQlvC,EAChD,CACA,CAEI2F,EAAO2qB,KAAO0e,EAAY1e,KAAK90B,KAAKkF,EAAMosC,EAAKnnC,EAAQkN,EAC3D,KAAU,CACNzL,QAAQC,KAAK,8CAA+C3G,EAAKpD,MAAMkB,QAAQw5B,gBACnF,CACA,CAEE,GAAI8U,EAAK,CAGR,UAAWnnC,EAAOupC,UAAY,YAAa,CAC1CvpC,EAAOupC,QAAU,EACrB,CAEG,UAAWvpC,EAAOupC,QAAQC,SAAW,YAAa,CACjDxpC,EAAOupC,QAAQC,OAAS,kBAC5B,CAEG,UAAWxpC,EAAOupC,QAAQ,sBAAwB,YAAa,CAC9DvpC,EAAOupC,QAAQ,oBAAsB,gBACzC,CAEG,UAAWvpC,EAAO8hC,OAAS,YAAa,CACvC9hC,EAAO8hC,KAAO,MAClB,CAEG,GAAI9hC,EAAO8hC,MAAQ,OAAQ,CAE1B,UAAW9hC,EAAOupC,QAAQ,iCAAmC,YAAa,CACzEvpC,EAAOupC,QAAQ,+BAAiCzpB,OAAO2pB,SAASC,MACrE,CAEI,UAAW1pC,EAAO2pC,cAAgB,YAAa,CAC9C3pC,EAAO2pC,YAAc,aAC1B,CACA,KAAU,CACN,UAAW3pC,EAAO2pC,cAAgB,YAAa,CAC9C3pC,EAAO2pC,YAAc,SAC1B,CACA,CAGGC,MAAMzC,EAAKnnC,GAAQwQ,MAAK,SAAUq5B,GACjC,GAAIA,EAAS5pB,GAAI,CAChB4pB,EAASC,OAAOt5B,MAAK,SAAUzW,GAC9BmH,EAAQnH,EACd,IAAQ0W,OAAM,SAAU+E,GAClBrU,EAAOqU,GACP/T,QAAQC,KAAK,0CAA2C8T,EAC9D,GACA,KAAW,CACN/T,QAAQ+T,MAAM,uCAAyCq0B,EAASE,OAAQF,EAASG,YACjF7oC,EAAO0oC,EACZ,CACA,IAAMp5B,OAAM,SAAU+E,GAClB/T,QAAQ+T,MAAM,uCAAwCA,GACtDrU,EAAOqU,EACX,GACA,KAAS,CACN/T,QAAQC,KAAK,gCACbR,EAAQ,GACX,CACA,GACA,EAEAgmC,EAAKryC,UAAUy0C,sBAAwB,CACtCQ,KAAQ,CACPP,QAAS,CACR,eAAgB,oBAEjB5e,KAAM,SAASA,EAAKwc,EAAKnnC,EAAQkN,GAChC,OAAOoZ,KAAK2jB,UAAU/8B,EACzB,GAECg9B,KAAQ,CACPX,QAAS,GACT5e,KAAM,SAASA,EAAKwc,EAAKnnC,EAAQkN,GAChC,IAAIvO,EAASvJ,KAAKszC,mBAAmBx7B,GACjCg9B,EAAO,IAAIC,SAEfxrC,EAAO/D,SAAQ,SAAUkc,GACxBozB,EAAKvd,OAAO7V,EAAKzc,IAAKyc,EAAK5hB,MAC/B,IAEG,OAAOg1C,CACV,IAIApnC,EAAUjO,UAAU6rC,eAAe,OAAQwG,GAG3C,IAAIkD,EAAgB,SAASA,EAAcjwC,GAC1C/E,KAAKitB,KAAOloB,CACb,EAEAiwC,EAAcv1C,UAAUuhB,QAAU,SAAU2C,GAC3C,OAAO3jB,KAAKitB,KAAKjM,QAAQ2C,EAC1B,EAEAqxB,EAAcv1C,UAAUqE,WAAa,WACpC,OAAO9D,KAAKitB,KAAKnpB,YAClB,EAEAkxC,EAAcv1C,UAAUmP,SAAW,WAClC,OAAO5O,KAAKitB,KAAK1qB,KAClB,EAEAyyC,EAAcv1C,UAAUyO,SAAW,WAClC,IAAI7C,EAAQ,GAEZrL,KAAKitB,KAAK/e,WAAW1I,SAAQ,SAAU8F,GACtCD,EAAM9F,KAAK+F,EAAK1B,eAClB,IAEC,OAAOyB,CACR,EAEA2pC,EAAcv1C,UAAUymB,QAAU,SAAUzf,GAC3C,IAAI6E,EAAOtL,KAAKitB,KAAK/G,QAAQzf,GAC7B,OAAO6E,EAAOA,EAAK1B,eAAiB,KACrC,EAEAorC,EAAcv1C,UAAU2I,SAAW,WAClC,OAAOpI,KAAKitB,IACb,EAEA,IAAIgoB,EAAc,SAASA,EAAY1yC,GACtCvC,KAAKuC,MAAQA,EACbvC,KAAKk1C,SAAW,GAChBl1C,KAAKm1C,SAAW,GAChBn1C,KAAKo1C,UAAY,MACjBp1C,KAAKq1C,WAAar1C,KAAKsD,gBACvBtD,KAAKs1C,WAAat1C,KAAKsD,gBACvBtD,KAAKymB,OAAS,MACdzmB,KAAKu1C,OAAS,MACdv1C,KAAKw1C,eAAiB,MACtBx1C,KAAKy1C,eAAiB,MAEtBz1C,KAAK2D,YACN,EAEAsxC,EAAYx1C,UAAU6D,cAAgB,WACrC,IAAIF,EAAKC,SAASC,cAAc,OAChCF,EAAGG,UAAUC,IAAI,0BACjB,OAAOJ,CACR,EAEA6xC,EAAYx1C,UAAUkE,WAAa,WAClC3D,KAAKo1C,UAAY,IAAI1uC,EAAO,CAAEvB,MAAO,SAAWnF,KACjD,EAGAi1C,EAAYx1C,UAAU6H,oBAAsB,WAAY,EAGxD2tC,EAAYx1C,UAAU2U,iBAAmB,SAAU3N,GAClD,IAAIhB,EAAMgB,EAAOH,WAEjB,IAAIsE,EAAS,CACZ8qC,cAAejwC,EAAIiwC,eAAiB,GACpCC,cAAelwC,EAAImwC,kBAAoB,IAGxC,GAAInwC,EAAIgP,QAAS,CAEhB,OAAQrV,EAAQqG,EAAIgP,UACnB,IAAK,SACJ,GAAIzU,KAAK61C,aAAapwC,EAAIgP,SAAU,CACnC7J,EAAO6J,QAAUzU,KAAK61C,aAAapwC,EAAIgP,QAC5C,KAAW,CACNpI,QAAQC,KAAK,4DAA6D7G,EAAIgP,QACnF,CACI,MAED,IAAK,WACJ7J,EAAO6J,QAAUhP,EAAIgP,QACrB,MAIF,GAAI7J,EAAO6J,QAAS,CACnBhO,EAAOjC,QAAQ2F,YAAcS,EAC7B5K,KAAKk1C,SAAS3vC,KAAKkB,GAEnB,GAAIzG,KAAKuC,MAAMkB,QAAQ0G,aAAe,QAAS,CAC9CnK,KAAK81C,kBACT,CACA,CACA,CAEC,GAAIrwC,EAAIiP,WAAY,CACnB,OAAQtV,EAAQqG,EAAIiP,aACnB,IAAK,SACJ,GAAI1U,KAAK61C,aAAapwC,EAAIiP,YAAa,CACtC9J,EAAOmrC,QAAU/1C,KAAK61C,aAAapwC,EAAIiP,WAC5C,KAAW,CACNrI,QAAQC,KAAK,4DAA6D7G,EAAIiP,WACnF,CACI,MAED,IAAK,WACJ9J,EAAOmrC,QAAUtwC,EAAIiP,WACrB,MAIF,GAAI9J,EAAOmrC,QAAS,CACnBtvC,EAAOjC,QAAQ2F,YAAcS,EAC7B5K,KAAKm1C,SAAS5vC,KAAKkB,GAEnB,GAAIzG,KAAKuC,MAAMkB,QAAQ0G,aAAe,QAAS,CAC9CnK,KAAKg2C,qBACT,CACA,CACA,CACA,EAEAf,EAAYx1C,UAAUw2C,YAAc,WACnC,IAAI9f,EAAU,MAEd,GAAIn2B,KAAKw1C,eAAgB,CACxBx1C,KAAKw1C,eAAiB,MACtBx1C,KAAKq1C,WAAWpuC,WAAWrB,YAAY5F,KAAKq1C,YAC5Clf,EAAU,IACZ,CAEC,GAAIn2B,KAAKy1C,eAAgB,CACxBz1C,KAAKy1C,eAAiB,MACtBz1C,KAAKuC,MAAMwL,cAAc2Z,OAAO1nB,KAAKs1C,YACrCnf,EAAU,IACZ,CAEC,GAAIA,EAAS,CACZn2B,KAAKuC,MAAMM,WAAWmF,iBACxB,CACA,EAEAitC,EAAYx1C,UAAUq2C,iBAAmB,WACxC,IAAK91C,KAAKw1C,eAAgB,CACzBx1C,KAAKuC,MAAMmI,cAAc5G,aAAaZ,aAAalD,KAAKq1C,WAAYr1C,KAAKuC,MAAMmI,cAAcjI,eAAeyE,aAC5GlH,KAAKw1C,eAAiB,IACxB,CACA,EAEAP,EAAYx1C,UAAUu2C,oBAAsB,WAC3C,IAAKh2C,KAAKy1C,eAAgB,CACzBz1C,KAAKuC,MAAMwL,cAAc+e,QAAQ9sB,KAAKs1C,YACtCt1C,KAAKy1C,eAAiB,IACxB,CACA,EAEAR,EAAYx1C,UAAUuE,iBAAmB,SAAUC,GAClD,GAAIjE,KAAKy1C,gBAAkBz1C,KAAKu1C,OAAQ,CACvCv1C,KAAKu1C,OAAOzxC,aAAaO,MAAMC,YAAcL,EAAO,IACtD,CACA,EAEAgxC,EAAYx1C,UAAU2K,OAAS,SAAUa,GACrC,IAAOlG,EAEV,GAAI/E,KAAKw1C,gBAAkBx1C,KAAKy1C,eAAgB,CACxCz1C,KAAKk2C,WAAWjrC,GAEvB,GAAIjL,KAAKw1C,eAAgB,CACxB,GAAIx1C,KAAKymB,OAAQ,CAChBzmB,KAAKymB,OAAO0J,aAChB,CAEGprB,EAAM/E,KAAKm2C,YAAY,MAAOn2C,KAAKk2C,WAAWjrC,IAC9CjL,KAAKymB,OAAS1hB,EACd,MAAO/E,KAAKq1C,WAAWlyC,WAAY,CAClCnD,KAAKq1C,WAAWzvC,YAAY5F,KAAKq1C,WAAWlyC,WAChD,CAAInD,KAAKq1C,WAAWjuC,YAAYrC,EAAIjB,cACjCiB,EAAIpB,WAAW,KAClB,CAEE,GAAI3D,KAAKy1C,eAAgB,CACxB,GAAIz1C,KAAKu1C,OAAQ,CAChBv1C,KAAKu1C,OAAOplB,aAChB,CAEGprB,EAAM/E,KAAKm2C,YAAY,SAAUn2C,KAAKk2C,WAAWjrC,IACjDjL,KAAKu1C,OAASxwC,EACd,MAAO/E,KAAKs1C,WAAWnyC,WAAY,CAClCnD,KAAKs1C,WAAW1vC,YAAY5F,KAAKs1C,WAAWnyC,WAChD,CAAInD,KAAKs1C,WAAWluC,YAAYrC,EAAIjB,cACjCiB,EAAIpB,WAAW,KAClB,CAEE3D,KAAKuC,MAAMM,WAAWmF,kBAGtB,GAAIhI,KAAKuC,MAAMgC,UAAU,iBAAkB,CAC1CvE,KAAKuC,MAAMiC,QAAQC,cAAc2I,QACpC,CACA,CACA,EAEA6nC,EAAYx1C,UAAUgzB,eAAiB,SAAU1tB,GAChD/E,KAAKo2C,YAAYp2C,KAAKuC,MAAMiC,QAAQiZ,UAAU44B,YAAYtxC,GAC3D,EAEAkwC,EAAYx1C,UAAUsqC,UAAY,WACjC,IAAIuM,EAAUt2C,KAEd,GAAIA,KAAKk1C,SAAS90C,QAAUJ,KAAKm1C,SAAS/0C,OAAQ,CACjD,GAAIJ,KAAKuC,MAAMkB,QAAQ0G,cAAgB,QAAS,CAC/CnK,KAAKoK,OAAOpK,KAAKuC,MAAMM,WAAWwH,WACrC,CAEE,GAAIrK,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMkB,QAAQ0G,cAAgB,QAAS,CAE7E,IAAIi/B,EAAS7mC,MAAMiC,QAAQiZ,UAAU84B,iBAErCnN,EAAO5jC,SAAQ,SAAU6lB,GACxBirB,EAAQF,YAAY/qB,EACxB,GACA,CACA,CACA,EAEA4pB,EAAYx1C,UAAU22C,YAAc,SAAU/qB,GAC7C,IAAI1mB,EAAM6xC,EAEV,GAAInrB,EAAO,CACV,GAAIA,EAAMwL,MAAO,CAChB,GAAIxL,EAAMwL,MAAMxC,OAAQ,CACvB1vB,EAAO3E,KAAKk2C,WAAW7qB,EAAMpgB,MAC7BurC,EAAUx2C,KAAKy2C,gBAAgB,SAAU9xC,GAEzC0mB,EAAMwL,MAAMxC,OAAO9G,WAAWipB,GAC9BnrB,EAAMwL,MAAMxC,OAAOjuB,cACvB,CAEG,GAAIilB,EAAMwL,MAAMlZ,IAAK,CACpBhZ,EAAO3E,KAAKk2C,WAAW7qB,EAAMpgB,MAC7BurC,EAAUx2C,KAAKy2C,gBAAgB,MAAO9xC,GAEtC0mB,EAAMwL,MAAMlZ,IAAI4P,WAAWipB,GAC3BnrB,EAAMwL,MAAMlZ,IAAIvX,cACpB,CACA,CACA,CACA,EAGA6uC,EAAYx1C,UAAUi3C,eAAiB,SAAUzrC,GAChD,OAAOjL,KAAKm2C,YAAY,MAAOn2C,KAAKk2C,WAAWjrC,GAChD,EAEAgqC,EAAYx1C,UAAUk3C,kBAAoB,SAAU1rC,GACnD,OAAOjL,KAAKm2C,YAAY,SAAUn2C,KAAKk2C,WAAWjrC,GACnD,EAEAgqC,EAAYx1C,UAAUy2C,WAAa,SAAUjrC,GAC5C,IAAI2rC,EAAU52C,KAEd,IAAI2E,EAAO,GAEXsG,EAAKzF,SAAQ,SAAUT,GACtBJ,EAAKY,KAAKR,EAAIic,WAEd,GAAI41B,EAAQr0C,MAAMkB,QAAQyH,UAAY0rC,EAAQr0C,MAAMkB,QAAQk3B,yBAA0B,CACrF,GAAI51B,EAAIP,QAAQ0G,SAAS2rC,KAAM,CAC9B,IAAIpmB,EAAWmmB,EAAQV,WAAWU,EAAQr0C,MAAMiC,QAAQ0G,SAAS4rC,wBAAwB/xC,IACzFJ,EAAOA,EAAKwG,OAAOslB,EACvB,CACA,CACA,IAEC,OAAO9rB,CACR,EAGAswC,EAAYx1C,UAAU02C,YAAc,SAAUh1B,EAAKxc,GAClD,IAAIgB,EAAO3F,KACPw2C,EAAUx2C,KAAKy2C,gBAAgBt1B,EAAKxc,GACpCI,EAEJ,GAAIY,EAAKpD,MAAMgC,UAAU,WAAY,CACpCoB,EAAKpD,MAAMiC,QAAQ+R,QAAQwgC,SAC7B,CAEChyC,EAAM,IAAImZ,EAAIs4B,EAASx2C,KAAM,QAE7B,GAAI2F,EAAKpD,MAAMgC,UAAU,WAAY,CACpCoB,EAAKpD,MAAMiC,QAAQ+R,QAAQygC,QAC7B,CAECjyC,EAAIjB,aAAaP,UAAUC,IAAI,kBAAmB,mBAAqB2d,GAEvEpc,EAAIiN,UAAY,MAEhBjN,EAAI6E,aAAe,WAClB,IAAK5J,KAAKgS,UAAW,CACpBhS,KAAKgS,UAAY,IAAIgjC,EAAch1C,KACtC,CAEE,OAAOA,KAAKgS,SACd,EAECjN,EAAIwH,cAAgB,WAEnB,IAAIlB,EAAQ,GAEZ1F,EAAKpD,MAAMmI,cAAc3H,eAAeyC,SAAQ,SAAUiB,GAGzDd,EAAKyvC,UAAUxkC,SAASnK,EAAO+G,YAC/B7H,EAAKyvC,UAAU9kC,SAAW7J,EAAO6J,SAEjC,GAAI7J,EAAOH,WAAW6a,EAAM,kBAAoBxb,EAAKpD,MAAMgC,UAAU,UAAW,CAC/EoB,EAAKyvC,UAAU5wC,QAAQ2R,OAAS,CAC/ByB,UAAWjS,EAAKpD,MAAMiC,QAAQ2R,OAAO+B,aAAazR,EAAOH,WAAW6a,EAAM,kBAC1ErJ,OAAQrR,EAAOH,WAAW6a,EAAM,wBAA0B,GAE/D,KAAU,CACNxb,EAAKyvC,UAAU5wC,QAAQ2R,OAAS,CAC/ByB,UAAWjS,EAAKpD,MAAMiC,QAAQ2R,OAAO+B,aAAa,aAClDJ,OAAQ,GAEb,CAGGnS,EAAKyvC,UAAU9uC,WAAWmQ,SAAWhQ,EAAOH,WAAWmQ,SAGvD,IAAInL,EAAO,IAAIsP,EAAKjV,EAAKyvC,UAAWrwC,GACpCuG,EAAKxH,aACLwH,EAAK7E,OAASA,EACd6E,EAAKuE,WAELpJ,EAAO4E,MAAM9F,KAAK+F,GAClBD,EAAM9F,KAAK+F,GAEX,IAAK7E,EAAOuC,QAAS,CACpBsC,EAAKgD,MACT,CACA,IAEEtO,KAAKqL,MAAQA,CACf,EAEC,OAAOtG,CACR,EAGAkwC,EAAYx1C,UAAUg3C,gBAAkB,SAAUt1B,EAAKxc,GACtD,IAAI6xC,EAAU,GACV3f,EAAQ1V,GAAO,MAAQnhB,KAAKk1C,SAAWl1C,KAAKm1C,SAC5ClnC,EAAOkT,GAAO,MAAQ,UAAY,UAClCrJ,EACAm/B,EAEJpgB,EAAMrxB,SAAQ,SAAUiB,GACvB,IAAI8iC,EAAS,GAEb,GAAI9iC,EAAOjC,QAAQ2F,aAAe1D,EAAOjC,QAAQ2F,YAAY8D,GAAO,CACnEtJ,EAAKa,SAAQ,SAAUkc,GACtB6nB,EAAOhkC,KAAKkB,EAAOgK,cAAciR,GACrC,IAEGu1B,EAAWhpC,EAAO,SAClB6J,SAAgBrR,EAAOjC,QAAQ2F,YAAY8sC,KAAc,WAAaxwC,EAAOjC,QAAQ2F,YAAY8sC,GAAU1N,EAAQ5kC,GAAQ8B,EAAOjC,QAAQ2F,YAAY8sC,GAEtJxwC,EAAOiK,cAAc8lC,EAAS/vC,EAAOjC,QAAQ2F,YAAY8D,GAAMs7B,EAAQ5kC,EAAMmT,GAChF,CACA,IAEC,OAAO0+B,CACR,EAEAvB,EAAYx1C,UAAUy3C,YAAc,WACnC,QAASl3C,KAAKk1C,SAAS90C,MACxB,EAEA60C,EAAYx1C,UAAU03C,eAAiB,WACtC,QAASn3C,KAAKm1C,SAAS/0C,MACxB,EAGA60C,EAAYx1C,UAAU4G,OAAS,WAC9B,GAAIrG,KAAKymB,OAAQ,CAChBzmB,KAAKymB,OAAO0B,gBAAgB,KAC9B,CACC,GAAInoB,KAAKu1C,OAAQ,CAChBv1C,KAAKu1C,OAAOptB,gBAAgB,KAC9B,CACA,EAGA8sB,EAAYx1C,UAAUqqC,WAAa,WAClC,IAAInkC,EAAO3F,KACPqsC,EAAU,GACVjD,EAEJ,GAAIppC,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpE6kC,EAASppC,KAAKuC,MAAMiC,QAAQiZ,UAAU6N,UAAU,MAEhD8d,EAAO5jC,SAAQ,SAAU6lB,GACxBghB,EAAQhhB,EAAM+rB,UAAYzxC,EAAK0xC,gBAAgBhsB,EAClD,GACA,KAAQ,CACNghB,EAAU,CACT1uB,IAAK3d,KAAKymB,OAASzmB,KAAKymB,OAAOzF,UAAY,GAC3CqT,OAAQr0B,KAAKu1C,OAASv1C,KAAKu1C,OAAOv0B,UAAY,GAEjD,CAEC,OAAOqrB,CACR,EAGA4I,EAAYx1C,UAAU43C,gBAAkB,SAAUhsB,GACjD,IAAI1lB,EAAO3F,KACPs3C,EAAWjsB,EAAMjjB,WACjBmvC,EAAYlsB,EAAMmsB,eAClBC,EAAkB,GAClBpL,EAAU,GAEdkL,EAAU/xC,SAAQ,SAAUkyC,GAC3BD,EAAgBC,EAASN,UAAYzxC,EAAK0xC,gBAAgBK,EAC5D,IAECrL,EAAU,CACT1uB,IAAK25B,EAASzgB,MAAMlZ,IAAM25B,EAASzgB,MAAMlZ,IAAIqD,UAAY,GACzDqT,OAAQijB,EAASzgB,MAAMxC,OAASijB,EAASzgB,MAAMxC,OAAOrT,UAAY,GAClEooB,OAAQqO,GAGT,OAAOpL,CACR,EAGA4I,EAAYx1C,UAAUo2C,aAAe,CACpC8B,IAAO,SAASA,EAAIpO,EAAQ5kC,EAAMizC,GACjC,IAAIruC,EAAS,EACTsuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,EAErF,GAAItO,EAAOnpC,OAAQ,CAClBmJ,EAASggC,EAAOuO,QAAO,SAAUC,EAAKj4C,GACrC,OAAOk4C,OAAOD,GAAOC,OAAOl4C,EAChC,IAEGyJ,EAASA,EAASggC,EAAOnpC,OAEzBmJ,EAASsuC,IAAc,MAAQtuC,EAAO0uC,QAAQJ,GAAatuC,CAC9D,CAEE,OAAO2uC,WAAW3uC,GAAQ4uC,UAC5B,EACC72C,IAAO,SAASA,EAAIioC,EAAQ5kC,EAAMizC,GACjC,IAAIruC,EAAS,KACTsuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,MAErFtO,EAAO/jC,SAAQ,SAAU1F,GAExBA,EAAQk4C,OAAOl4C,GAEf,GAAIA,EAAQyJ,GAAUA,IAAW,KAAM,CACtCA,EAASzJ,CACb,CACA,IAEE,OAAOyJ,IAAW,KAAOsuC,IAAc,MAAQtuC,EAAO0uC,QAAQJ,GAAatuC,EAAS,EACtF,EACC6C,IAAO,SAASA,EAAIm9B,EAAQ5kC,EAAMizC,GACjC,IAAIruC,EAAS,KACTsuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,MAErFtO,EAAO/jC,SAAQ,SAAU1F,GAExBA,EAAQk4C,OAAOl4C,GAEf,GAAIA,EAAQyJ,GAAUA,IAAW,KAAM,CACtCA,EAASzJ,CACb,CACA,IAEE,OAAOyJ,IAAW,KAAOsuC,IAAc,MAAQtuC,EAAO0uC,QAAQJ,GAAatuC,EAAS,EACtF,EACCwuC,IAAO,SAASA,EAAIxO,EAAQ5kC,EAAMizC,GACjC,IAAIruC,EAAS,EACTsuC,SAAmBD,EAAWC,YAAc,YAAcD,EAAWC,UAAY,MAErF,GAAItO,EAAOnpC,OAAQ,CAClBmpC,EAAO/jC,SAAQ,SAAU1F,GACxBA,EAAQk4C,OAAOl4C,GAEfyJ,IAAW5H,MAAM7B,GAASk4C,OAAOl4C,GAAS,CAC9C,GACA,CAEE,OAAO+3C,IAAc,MAAQtuC,EAAO0uC,QAAQJ,GAAatuC,CAC3D,EACC4B,OAAU,SAASA,EAAOo+B,EAAQ5kC,EAAMizC,GACvC,IAAIruC,EAAS,EAEb,GAAIggC,EAAOnpC,OAAQ,CAClBmJ,EAASggC,EAAOuO,QAAO,SAAUC,EAAKj4C,GACrC,OAAOc,OAAOm3C,GAAOn3C,OAAOd,EAChC,GACA,CAEE,OAAOyJ,CACT,EACCm8B,MAAS,SAASA,EAAM6D,EAAQ5kC,EAAMizC,GACrC,IAAIruC,EAAS,EAEb,GAAIggC,EAAOnpC,OAAQ,CAClBmpC,EAAO/jC,SAAQ,SAAU1F,GACxB,GAAIA,EAAO,CACVyJ,GACL,CACA,GACA,CAEE,OAAOA,CACT,GAGAmE,EAAUjO,UAAU6rC,eAAe,cAAe2J,GAElD,IAAImD,EAAY,SAASA,EAAU71C,GAClCvC,KAAKuC,MAAQA,EACbvC,KAAK0sC,KAAO,KAEZ1sC,KAAKq4C,YAAc,WAAY,EAC/Br4C,KAAKs4C,YAAc,WAAY,EAC/Bt4C,KAAKu4C,gBAAkB,MACvBv4C,KAAKw4C,SAAW,MAChBx4C,KAAKy4C,QAAU,IAChB,EAEAL,EAAU34C,UAAUkE,WAAa,WAChC,IAAI+0C,EAAU14C,KAEdA,KAAK0sC,KAAO1sC,KAAKuC,MAAMkB,QAAQu1B,UAE/Bh5B,KAAKw4C,SAAWx4C,KAAKuC,MAAMkB,QAAQ21B,sBAEnC,GAAIp5B,KAAK0sC,OAAS,MAAQ1sC,KAAK0sC,OAAS,OAAQ,CAC/C1sC,KAAKuC,MAAMI,QAAQgS,iBAAiB,QAAQ,SAAUC,GACrD,IAAI+jC,EAAOC,EAAMl1B,EAEjB,IAAKg1B,EAAQD,QAAS,CACrB7jC,EAAEwgB,iBAEF,GAAIsjB,EAAQH,gBAAiB,CAC5BI,EAAQD,EAAQH,gBAEhB,GAAIG,EAAQn2C,MAAMkB,QAAQ01B,uBAAwB,CACjDwf,EAAQD,EAAQn2C,MAAMkB,QAAQ01B,uBAAuB,QAASwf,EACpE,CACA,KAAW,CAEN,IAAIj1B,EAAOg1B,EAAQn2C,MAAMiC,QAAQsgC,OAAO+T,mBAAmBH,EAAQn2C,MAAMkB,QAAQy1B,oBAAqBwf,EAAQn2C,MAAMkB,QAAQw1B,oBAAqByf,EAAQF,SAAU,aAEnKI,EAAOF,EAAQn2C,MAAMiC,QAAQsgC,OAAOgU,mBAAmBp1B,GACvDi1B,EAAQC,EAAOF,EAAQK,qBAAqBr1B,GAAQ,GAEpD,GAAIg1B,EAAQn2C,MAAMkB,QAAQ01B,uBAAwB,CACjDwf,EAAQD,EAAQn2C,MAAMkB,QAAQ01B,uBAAuB,QAASwf,GAC9DC,EAAOF,EAAQn2C,MAAMkB,QAAQ01B,uBAAuB,OAAQyf,EAClE,CACA,CAEI,GAAIluB,OAAOsuB,eAAiBtuB,OAAOsuB,cAAc95B,QAAS,CACzDwL,OAAOsuB,cAAc95B,QAAQ,OAAQy5B,EAC1C,MAAW,GAAI/jC,EAAEokC,eAAiBpkC,EAAEokC,cAAc95B,QAAS,CACtDtK,EAAEokC,cAAc95B,QAAQ,aAAcy5B,GACtC,GAAIC,EAAM,CACThkC,EAAEokC,cAAc95B,QAAQ,YAAa05B,EAC3C,CACA,MAAW,GAAIhkC,EAAEqkC,eAAiBrkC,EAAEqkC,cAAcD,cAAc95B,QAAS,CACpEtK,EAAEqkC,cAAcD,cAAc95B,QAAQ,aAAcy5B,GACpD,GAAIC,EAAM,CACThkC,EAAEqkC,cAAcD,cAAc95B,QAAQ,YAAa05B,EACzD,CACA,CAEIF,EAAQn2C,MAAMkB,QAAQ81B,gBAAgB94B,KAAKi4C,EAAQn2C,MAAOo2C,EAAOC,GAEjEF,EAAQ7yC,OACZ,CACA,GACA,CAEC,GAAI7F,KAAK0sC,OAAS,MAAQ1sC,KAAK0sC,OAAS,QAAS,CAChD1sC,KAAKuC,MAAMI,QAAQgS,iBAAiB,SAAS,SAAUC,GACtD8jC,EAAQQ,MAAMtkC,EACjB,GACA,CAEC5U,KAAKm5C,eAAen5C,KAAKuC,MAAMkB,QAAQ41B,sBACvCr5B,KAAKo5C,eAAep5C,KAAKuC,MAAMkB,QAAQ61B,qBACxC,EAEA8e,EAAU34C,UAAUoG,MAAQ,WAC3B7F,KAAKy4C,QAAU,KACfz4C,KAAKu4C,gBAAkB,KACxB,EAEAH,EAAU34C,UAAUs5C,qBAAuB,SAAUr1B,GACpD,IAAIna,EAAS,GAEbma,EAAKle,SAAQ,SAAUT,GACtB,IAAIyxC,EAAU,GAEdzxC,EAAIjC,QAAQ0C,SAAQ,SAAUN,GAC7B,IAAIpF,EAAQ,GAEZ,GAAIoF,EAAK,CAER,GAAIH,EAAIkJ,OAAS,QAAS,CACzB/I,EAAIpF,MAAQoF,EAAI8M,UAAUolC,QAC/B,CAEI,GAAIlyC,EAAIpF,QAAU,KAAM,CACvBA,EAAQ,EACb,KAAW,CACN,OAAQV,EAAQ8F,EAAIpF,QACnB,IAAK,SACJA,EAAQoxB,KAAK2jB,UAAU3vC,EAAIpF,OAC3B,MAED,IAAK,YACJA,EAAQ,GACR,MAED,QACCA,EAAQoF,EAAIpF,MAEnB,CACA,CAEG02C,EAAQjxC,KAAKzF,EAChB,IAEEyJ,EAAOhE,KAAKixC,EAAQ9C,KAAK,MAC3B,IAEC,OAAOnqC,EAAOmqC,KAAK,KACpB,EAEA0E,EAAU34C,UAAUgnC,KAAO,SAAUnR,EAAO+jB,GAC3C,IAAI/jB,EAAOgkB,EAAKC,EAChBv5C,KAAKy4C,QAAU,MACfz4C,KAAKu4C,gBAAkB,MAEvB,GAAIv4C,KAAK0sC,OAAS,MAAQ1sC,KAAK0sC,OAAS,OAAQ,CAE/C1sC,KAAKw4C,SAAWljB,GAASt1B,KAAKuC,MAAMkB,QAAQ21B,sBAE5C,UAAW1O,OAAOgL,cAAgB,oBAAsBryB,SAASsyB,aAAe,YAAa,CAC5FL,EAAQjyB,SAASsyB,cACjBL,EAAMkkB,mBAAmBx5C,KAAKuC,MAAMI,SACpC22C,EAAM5uB,OAAOgL,eAEb,GAAI4jB,EAAInB,YAAckB,EAAU,CAC/Br5C,KAAKu4C,gBAAkBe,EAAInB,UAC/B,CAEGmB,EAAIzjB,kBACJyjB,EAAIxjB,SAASR,EAChB,MAAS,UAAWjyB,SAASgyB,WAAa,oBAAsBhyB,SAASkyB,KAAKC,iBAAmB,YAAa,CAC3G+jB,EAAYl2C,SAASkyB,KAAKC,kBAC1B+jB,EAAU9jB,kBAAkBz1B,KAAKuC,MAAMI,SACvC42C,EAAU/rB,QACb,CAEEnqB,SAASo2C,YAAY,QAErB,GAAIH,EAAK,CACRA,EAAIzjB,iBACP,CACA,CACA,EAIAuiB,EAAU34C,UAAU25C,eAAiB,SAAU/3B,GAE9C,cAAeA,IAAW,YAAc,YAAcjiB,EAAQiiB,IAC7D,IAAK,SACJrhB,KAAKs4C,YAAct4C,KAAK05C,aAAar4B,GAErC,IAAKrhB,KAAKs4C,YAAa,CACtBjsC,QAAQC,KAAK,gDAAiD+U,EAClE,CACG,MAED,IAAK,WACJrhB,KAAKs4C,YAAcj3B,EACnB,MAEH,EAEA+2B,EAAU34C,UAAU05C,eAAiB,SAAUQ,GAC9C,cAAeA,IAAW,YAAc,YAAcv6C,EAAQu6C,IAC7D,IAAK,SACJ35C,KAAKq4C,YAAcr4C,KAAK45C,aAAaD,GAErC,IAAK35C,KAAKq4C,YAAa,CACtBhsC,QAAQC,KAAK,gDAAiDqtC,EAClE,CACG,MAED,IAAK,WACJ35C,KAAKq4C,YAAcsB,EACnB,MAEH,EAEAvB,EAAU34C,UAAUy5C,MAAQ,SAAUtkC,GACrC,IAAIjQ,EAAM6xC,EAASvrC,EAEnB,GAAIjL,KAAK65C,gBAAgBjlC,GAAI,CAE5BjQ,EAAO3E,KAAK85C,aAAallC,GAEzB4hC,EAAUx2C,KAAKq4C,YAAY53C,KAAKT,KAAM2E,GAEtC,GAAI6xC,EAAS,CACZ5hC,EAAEwgB,iBAEF,GAAIp1B,KAAKuC,MAAMgC,UAAU,WAAY,CACpCiyC,EAAUx2C,KAAK+5C,WAAWvD,EAC9B,CAEGvrC,EAAOjL,KAAKs4C,YAAY73C,KAAKT,KAAMw2C,GACnCx2C,KAAKuC,MAAMkB,QAAQ+1B,gBAAgB/4B,KAAKT,KAAKuC,MAAOoC,EAAM6xC,EAASvrC,EACtE,KAAS,CACNjL,KAAKuC,MAAMkB,QAAQg2B,oBAAoBh5B,KAAKT,KAAKuC,MAAOoC,EAC3D,CACA,CACA,EAEAyzC,EAAU34C,UAAUs6C,WAAa,SAAUp1C,GAC1C,IAAIgB,EAAO3F,KACPuJ,EAAS,GAEb,GAAI7J,MAAM2F,QAAQV,GAAO,CACxBA,EAAKa,SAAQ,SAAUT,GACtBwE,EAAOhE,KAAKI,EAAKpD,MAAMiC,QAAQ+R,QAAQqa,aAAa7rB,EAAK,aAC5D,GACA,KAAQ,CACNwE,EAAS5E,CACX,CAEC,OAAO4E,CACR,EAEA6uC,EAAU34C,UAAUo6C,gBAAkB,SAAUjlC,GAC/C,IAAI+hB,EAAQ,KAEZ,GAAI/hB,EAAE/S,OAAOggC,SAAW,OAAS7hC,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAAa,CACrEoc,EAAQ,KACV,CAEC,OAAOA,CACR,EAEAyhB,EAAU34C,UAAUq6C,aAAe,SAAUllC,GAC5C,IAAIjQ,EAEJ,GAAI+lB,OAAOsuB,eAAiBtuB,OAAOsuB,cAAch4B,QAAS,CACzDrc,EAAO+lB,OAAOsuB,cAAch4B,QAAQ,OACtC,MAAQ,GAAIpM,EAAEokC,eAAiBpkC,EAAEokC,cAAch4B,QAAS,CACtDrc,EAAOiQ,EAAEokC,cAAch4B,QAAQ,aACjC,MAAQ,GAAIpM,EAAEqkC,eAAiBrkC,EAAEqkC,cAAcD,cAAch4B,QAAS,CACpErc,EAAOiQ,EAAEqkC,cAAcD,cAAch4B,QAAQ,aAC/C,CAEC,OAAOrc,CACR,EAEAyzC,EAAU34C,UAAUm6C,aAAe,CAClCr3C,MAAO,SAASA,EAAMy2B,GAClB,IAACr0B,EAAO,GAEPq1C,EAAoB,KACpBl3C,EAAU9C,KAAKuC,MAAMmI,cAAc5H,QACnCm3C,EAAY,GACZhvC,EAAO,GAGX+tB,EAAYA,EAAUnwB,MAAM,MAE5BmwB,EAAUxzB,SAAQ,SAAUT,GAC3BJ,EAAKY,KAAKR,EAAI8D,MAAM,MACvB,IAEE,GAAIlE,EAAKvE,UAAYuE,EAAKvE,SAAW,GAAKuE,EAAK,GAAGvE,OAAS,GAAI,CAI9DuE,EAAK,GAAGa,SAAQ,SAAU1F,GACzB,IAAI2G,EAAS3D,EAAQpC,MAAK,SAAU+F,GACnC,OAAO3G,GAAS2G,EAAOH,WAAWlB,OAAStF,EAAM4yC,QAAUjsC,EAAOH,WAAWlB,MAAMstC,SAAW5yC,EAAM4yC,MACzG,IAEI,GAAIjsC,EAAQ,CACXwzC,EAAU10C,KAAKkB,EACpB,KAAW,CACNuzC,EAAoB,KACzB,CACA,IAGG,IAAKA,EAAmB,CACvBA,EAAoB,KACpBC,EAAY,GAEZt1C,EAAK,GAAGa,SAAQ,SAAU1F,GACzB,IAAI2G,EAAS3D,EAAQpC,MAAK,SAAU+F,GACnC,OAAO3G,GAAS2G,EAAOtB,OAASrF,EAAM4yC,QAAUjsC,EAAOtB,MAAMutC,SAAW5yC,EAAM4yC,MACpF,IAEK,GAAIjsC,EAAQ,CACXwzC,EAAU10C,KAAKkB,EACrB,KAAY,CACNuzC,EAAoB,KAC1B,CACA,IAEI,IAAKA,EAAmB,CACvBC,EAAYj6C,KAAKuC,MAAMmI,cAAc3H,cAC1C,CACA,CAGG,GAAIi3C,EAAmB,CACtBr1C,EAAKu1C,OACT,CAEGv1C,EAAKa,SAAQ,SAAUkc,GACtB,IAAI3c,EAAM,GAEV2c,EAAKlc,SAAQ,SAAU1F,EAAOgG,GAC7B,GAAIm0C,EAAUn0C,GAAI,CACjBf,EAAIk1C,EAAUn0C,GAAGX,OAASrF,CAChC,CACA,IAEImL,EAAK1F,KAAKR,EACd,IAEG,OAAOkG,CACV,KAAS,CACN,OAAO,KACV,CACA,GAGAmtC,EAAU34C,UAAUi6C,aAAe,CAClCS,QAAS,SAASA,EAAQlvC,GACzB,OAAOjL,KAAKuC,MAAM2c,QAAQjU,EAC5B,EACC6C,OAAQ,SAASA,EAAO7C,GACvB,OAAOjL,KAAKuC,MAAM+iC,gBAAgBr6B,EACpC,EACCmvC,OAAQ,SAASA,EAAOnvC,GACvB,OAAOjL,KAAKuC,MAAM6iC,QAAQn6B,EAC5B,GAGAyC,EAAUjO,UAAU6rC,eAAe,YAAa8M,GAEhD,IAAIiC,EAAW,SAASA,EAAS93C,GAChCvC,KAAKuC,MAAQA,EACbvC,KAAKs6C,OAAS,GACdt6C,KAAKmF,MAAQ,GACbnF,KAAKu6C,WAAa,KAClBv6C,KAAKw6C,SAAW,KAChBx6C,KAAKy6C,SAAW,KAChBz6C,KAAK06C,aAAe,MAEpB16C,KAAK26C,UAAY,WAAY,EAE7B36C,KAAK4gB,aAAe,CACrB,EAEAy5B,EAAS56C,UAAUkE,WAAa,WAC/B,IAAIi3C,EAAU,KACVC,EAAW76C,KAAKuC,MAAMmI,cAAc3B,yBACpCtF,EAAUzD,KAAKuC,MAAMkB,QAEzBzD,KAAKmF,MAAQ1B,EAAQ42B,mBACrBr6B,KAAKs6C,OAAS72C,EAAQ22B,oBACtBp6B,KAAK06C,aAAej3C,EAAQy2B,wBAA0B2gB,EAAWA,EAAS11C,MAAQ,OAElF,GAAI1B,EAAQ02B,sBAAuB,CAElC,GAAI12B,EAAQ02B,wBAA0B,KAAM,CAC3Cn6B,KAAKy6C,SAAWp3C,SAASC,cAAc,OACvCtD,KAAKy6C,SAASl3C,UAAUC,IAAI,6BAC/B,KAAS,CACN,UAAWC,EAAQ02B,wBAA0B,SAAU,CACtDygB,EAAUv3C,SAASC,cAAc,OACjCs3C,EAAQtiC,UAAY7U,EAAQ02B,sBAC5Bn6B,KAAKy6C,SAAWG,EAAQz3C,UAC5B,KAAU,CACNnD,KAAKy6C,SAAWh3C,EAAQ02B,qBAC5B,CACA,CACA,CAEC,GAAI12B,EAAQ62B,wBAAyB,CACpC,UAAW72B,EAAQ62B,0BAA4B,SAAU,CACxDsgB,EAAUv3C,SAASC,cAAc,OACjCs3C,EAAQtiC,UAAY7U,EAAQ62B,wBAC5Bt6B,KAAKu6C,WAAaK,EAAQz3C,UAC7B,KAAS,CACNnD,KAAKu6C,WAAa92C,EAAQ62B,uBAC7B,CACA,KAAQ,CACNt6B,KAAKu6C,WAAal3C,SAASC,cAAc,OACzCtD,KAAKu6C,WAAWh3C,UAAUC,IAAI,+BAC9BxD,KAAKu6C,WAAWO,SAAW,EAC3B96C,KAAKu6C,WAAWjiC,UAAY,0DAC9B,CAEC,GAAI7U,EAAQ82B,sBAAuB,CAClC,UAAW92B,EAAQ82B,wBAA0B,SAAU,CACtDqgB,EAAUv3C,SAASC,cAAc,OACjCs3C,EAAQtiC,UAAY7U,EAAQ82B,sBAC5Bv6B,KAAKw6C,SAAWI,EAAQz3C,UAC3B,KAAS,CACNnD,KAAKw6C,SAAW/2C,EAAQ82B,qBAC3B,CACA,KAAQ,CACNv6B,KAAKw6C,SAAWn3C,SAASC,cAAc,OACvCtD,KAAKw6C,SAASj3C,UAAUC,IAAI,+BAC5BxD,KAAKw6C,SAASM,SAAW,EACzB96C,KAAKw6C,SAASliC,UAAY,wDAC5B,CAEC,OAAQlZ,EAAQqE,EAAQ+2B,wBACvB,IAAK,UACJx6B,KAAK26C,UAAY,SAAU51C,EAAK/C,GAC/B,OAAOyB,EAAQ+2B,qBACnB,EACG,MAED,IAAK,WACJx6B,KAAK26C,UAAYl3C,EAAQ+2B,sBACzB,MAED,QACCx6B,KAAK26C,UAAY,SAAU51C,EAAK/C,GAC/B,OAAOyB,EAAQ+2B,sBAAsBx4B,EACzC,EACG,MAEH,EAEAq4C,EAAS56C,UAAUstB,cAAgB,SAAUhoB,GAC5C,IAAIg2C,EAAah2C,EAAIic,UAAUhhB,KAAKmF,OACpC,IAAIE,EAAU3F,MAAM2F,QAAQ01C,GAE5B,IAAItqB,EAAWprB,IAAYA,WAAmB01C,IAAe,YAAc,YAAc37C,EAAQ27C,MAAiB,UAAYA,IAAe,KAE7I,IAAKtqB,GAAY1rB,EAAIP,QAAQ0G,UAAYnG,EAAIP,QAAQ0G,SAASuvC,SAAU,CACvE11C,EAAIP,QAAQ0G,SAASuvC,SAASxzC,WAAWrB,YAAYb,EAAIP,QAAQ0G,SAASuvC,SAC5E,CAEC,IAAKhqB,GAAY1rB,EAAIP,QAAQ0G,UAAYnG,EAAIP,QAAQ0G,SAAS8vC,UAAW,CACxEj2C,EAAIP,QAAQ0G,SAAS8vC,UAAU/zC,WAAWrB,YAAYb,EAAIP,QAAQ0G,SAAS8vC,UAC7E,CAECj2C,EAAIP,QAAQ0G,SAAW,CACtBlJ,MAAO+C,EAAIP,QAAQ0G,SAAWnG,EAAIP,QAAQ0G,SAASlJ,MAAQ,EAC3D60C,KAAMpmB,EAAW1rB,EAAIP,QAAQ0G,SAAWnG,EAAIP,QAAQ0G,SAAS2rC,KAAO72C,KAAK26C,UAAU51C,EAAI6E,eAAgB,GAAK,MAC5GoxC,UAAWj2C,EAAIP,QAAQ0G,UAAYulB,EAAW1rB,EAAIP,QAAQ0G,SAAS8vC,UAAY,MAC/EP,SAAU11C,EAAIP,QAAQ0G,UAAYulB,EAAW1rB,EAAIP,QAAQ0G,SAASuvC,SAAW,MAC7EnwC,OAAQvF,EAAIP,QAAQ0G,SAAWnG,EAAIP,QAAQ0G,SAASZ,OAAS,MAC7DmmB,SAAUA,EAEZ,EAEA4pB,EAAS56C,UAAU2wB,UAAY,SAAUrrB,GACxC,IAAIuG,EAAOtL,KAAK06C,aAAe31C,EAAImhB,QAAQlmB,KAAK06C,cAAgB31C,EAAImJ,WAAW,GAC3E9K,EAAKkI,EAAKxH,aACV8G,EAAS7F,EAAIP,QAAQ0G,SAEzB,GAAIN,EAAO6vC,SAAU,CACpB,GAAI7vC,EAAO6vC,SAASxzC,WAAY,CAC/B2D,EAAO6vC,SAASxzC,WAAWrB,YAAYgF,EAAO6vC,SACjD,CACE7vC,EAAO6vC,SAAW,KACpB,CAEC,GAAI7vC,EAAOowC,UAAW,CACrB,GAAIpwC,EAAOowC,UAAU/zC,WAAY,CAChC2D,EAAOowC,UAAU/zC,WAAWrB,YAAYgF,EAAOowC,UAClD,CACEpwC,EAAOowC,UAAY,KACrB,CAECh7C,KAAKi7C,uBAAuBl2C,EAAK3B,GAEjC2B,EAAIjB,aAAaP,UAAUC,IAAI,wBAA0BoH,EAAO5I,OAEhE,GAAI4I,EAAO5I,MAAO,CACjB,GAAIhC,KAAKy6C,SAAU,CAClB7vC,EAAO6vC,SAAWz6C,KAAKy6C,SAASS,UAAU,MAC1C93C,EAAGF,aAAa0H,EAAO6vC,SAAUr3C,EAAGD,YAEpC,GAAInD,KAAKuC,MAAMuoB,IAAK,CACnBlgB,EAAO6vC,SAASp2C,MAAM82C,aAAevwC,EAAO6vC,SAAStuC,YAAcvB,EAAO6vC,SAASp2C,MAAMC,aAAesG,EAAO5I,MAAQ,GAAK4I,EAAO5I,MAAQhC,KAAKs6C,OAAS,IAC7J,KAAU,CACN1vC,EAAO6vC,SAASp2C,MAAMC,YAAcsG,EAAO6vC,SAAStuC,YAAcvB,EAAO6vC,SAASp2C,MAAM82C,cAAgBvwC,EAAO5I,MAAQ,GAAK4I,EAAO5I,MAAQhC,KAAKs6C,OAAS,IAC7J,CACA,KAAS,CAEN,GAAIt6C,KAAKuC,MAAMuoB,IAAK,CACnB1nB,EAAGiB,MAAM0nB,aAAe9e,SAASyd,OAAO2W,iBAAiBj+B,EAAI,MAAMg4C,iBAAiB,kBAAoBxwC,EAAO5I,MAAQhC,KAAKs6C,OAAS,IACzI,KAAU,CACNl3C,EAAGiB,MAAMynB,YAAc7e,SAASyd,OAAO2W,iBAAiBj+B,EAAI,MAAMg4C,iBAAiB,iBAAmBxwC,EAAO5I,MAAQhC,KAAKs6C,OAAS,IACvI,CACA,CACA,CACA,EAEAD,EAAS56C,UAAUw7C,uBAAyB,SAAUl2C,EAAK3B,GAC1D,IAAIi4C,EAAUr7C,KAEd,IAAI4K,EAAS7F,EAAIP,QAAQ0G,SACrB9H,EAAKA,GAAM2B,EAAImJ,WAAW,GAAGpK,aAC7Bw3C,EAAa1wC,EAAOowC,UAExB,GAAIpwC,EAAO6lB,WAAa,MAAO,CAE9B,GAAI7lB,EAAOisC,KAAM,CAChBjsC,EAAOowC,UAAYh7C,KAAKu6C,WAAWW,UAAU,MAC7CtwC,EAAOowC,UAAUrmC,iBAAiB,SAAS,SAAUC,GACpDA,EAAE0C,kBACF+jC,EAAQjtB,YAAYrpB,EACxB,GACA,KAAS,CACN6F,EAAOowC,UAAYh7C,KAAKw6C,SAASU,UAAU,MAC3CtwC,EAAOowC,UAAUrmC,iBAAiB,SAAS,SAAUC,GACpDA,EAAE0C,kBACF+jC,EAAQ/sB,UAAUvpB,EACtB,GACA,CAEE6F,EAAOowC,UAAUrmC,iBAAiB,aAAa,SAAUC,GACxDA,EAAE0C,iBACL,IAEE,GAAIgkC,GAAcA,EAAWr0C,aAAe7D,EAAI,CAC/Ck4C,EAAWr0C,WAAWs0C,aAAa3wC,EAAOowC,UAAWM,EACxD,KAAS,CACNl4C,EAAGF,aAAa0H,EAAOowC,UAAW53C,EAAGD,WACxC,CACA,CACA,EAEAk3C,EAAS56C,UAAUimB,gBAAkB,SAAU1jB,GAC9ChC,KAAK4gB,aAAe5e,CACrB,EAEAq4C,EAAS56C,UAAUgmB,gBAAkB,WACpC,OAAOzlB,KAAK4gB,YACb,EAEAy5B,EAAS56C,UAAUmkB,QAAU,SAAU3Y,GACtC,IAAIuwC,EAAUx7C,KAEd,IAAIuJ,EAAS,GAEb0B,EAAKzF,SAAQ,SAAUT,EAAKe,GAC3B,IAAI8E,EAAQ6lB,EAEZlnB,EAAOhE,KAAKR,GAEZ,GAAIA,aAAemZ,EAAK,CAEvBnZ,EAAImqB,SAEJtkB,EAAS7F,EAAIP,QAAQ0G,SAASulB,SAE9B,IAAK7lB,EAAO5I,OAAS4I,EAAO6lB,WAAa,MAAO,CAC/CA,EAAW+qB,EAAQC,YAAY12C,GAE/B0rB,EAASjrB,SAAQ,SAAUqU,GAC1BA,EAAMqV,SACN3lB,EAAOhE,KAAKsU,EACjB,GACA,CACA,CACA,IAEC,OAAOtQ,CACR,EAEA8wC,EAAS56C,UAAUg8C,YAAc,SAAU12C,EAAK22C,GAC/C,IAAIC,EAAU37C,KAEd,IAAI4K,EAAS7F,EAAIP,QAAQ0G,SACrBulB,EAAW,GACXlnB,EAAS,GAEb,GAAIqB,EAAO6lB,WAAa,QAAU7lB,EAAOisC,MAAQ6E,GAAc,CAC9D,IAAKh8C,MAAM2F,QAAQuF,EAAO6lB,UAAW,CACpC7lB,EAAO6lB,SAAWzwB,KAAK47C,iBAAiB72C,EAC3C,CAEE,GAAI/E,KAAKuC,MAAMgC,UAAU,WAAavE,KAAKuC,MAAMkB,QAAQu2B,eAAgB,CACxEvJ,EAAWzwB,KAAKuC,MAAMiC,QAAQsK,OAAOA,OAAOlE,EAAO6lB,SACtD,KAAS,CACNA,EAAW7lB,EAAO6lB,QACrB,CAEE,GAAIzwB,KAAKuC,MAAMgC,UAAU,SAAWvE,KAAKuC,MAAMkB,QAAQw2B,aAAc,CACpEj6B,KAAKuC,MAAMiC,QAAQqR,KAAKA,KAAK4a,EAChC,CAEEA,EAASjrB,SAAQ,SAAUqU,GAC1BtQ,EAAOhE,KAAKsU,GAEZ,IAAIgiC,EAAcF,EAAQF,YAAY5hC,GAEtCgiC,EAAYr2C,SAAQ,SAAUs2C,GAC7BvyC,EAAOhE,KAAKu2C,EAChB,GACA,GACA,CAEC,OAAOvyC,CACR,EAEA8wC,EAAS56C,UAAUm8C,iBAAmB,SAAU72C,GAC/C,IAAIg3C,EAAU/7C,KAEd,IAAIywB,EAAW,GAEf,IAAIsqB,EAAah2C,EAAIic,UAAUhhB,KAAKmF,OAEpC,IAAKzF,MAAM2F,QAAQ01C,GAAa,CAC/BA,EAAa,CAACA,EAChB,CAECA,EAAWv1C,SAAQ,SAAUw2C,GAC5B,IAAIC,EAAW,IAAI/9B,EAAI89B,GAAa,GAAID,EAAQx5C,MAAMM,YAEtDo5C,EAAS/sB,SAET+sB,EAASz3C,QAAQ0G,SAASlJ,MAAQ+C,EAAIP,QAAQ0G,SAASlJ,MAAQ,EAC/Di6C,EAASz3C,QAAQ0G,SAASZ,OAASvF,EAEnC,GAAIk3C,EAASz3C,QAAQ0G,SAASulB,SAAU,CACvCwrB,EAASz3C,QAAQ0G,SAAS2rC,KAAOkF,EAAQpB,UAAUsB,EAASryC,eAAgBqyC,EAASz3C,QAAQ0G,SAASlJ,MACzG,CACEyuB,EAASlrB,KAAK02C,EAChB,IAEC,OAAOxrB,CACR,EAEA4pB,EAAS56C,UAAU6uB,UAAY,SAAUvpB,EAAKwU,GAC7C,IAAI3O,EAAS7F,EAAIP,QAAQ0G,SAEzB,GAAIN,EAAO6lB,WAAa,MAAO,CAC9B7lB,EAAOisC,KAAO,KAEd9xC,EAAIqB,eAEJpG,KAAKuC,MAAMM,WAAWqd,kBAAkB,OAAQ,MAAO,MAEvDlgB,KAAKuC,MAAMkB,QAAQg3B,oBAAoB11B,EAAI6E,eAAgB7E,EAAIP,QAAQ0G,SAASlJ,MAClF,CACA,EAEAq4C,EAAS56C,UAAU2uB,YAAc,SAAUrpB,GAC1C,IAAI6F,EAAS7F,EAAIP,QAAQ0G,SAEzB,GAAIN,EAAO6lB,WAAa,MAAO,CAC9B7lB,EAAOisC,KAAO,MAEd9xC,EAAIqB,eAEJpG,KAAKuC,MAAMM,WAAWqd,kBAAkB,OAAQ,MAAO,MAEvDlgB,KAAKuC,MAAMkB,QAAQi3B,qBAAqB31B,EAAI6E,eAAgB7E,EAAIP,QAAQ0G,SAASlJ,MACnF,CACA,EAEAq4C,EAAS56C,UAAUmuB,UAAY,SAAU7oB,GACxC,IAAI6F,EAAS7F,EAAIP,QAAQ0G,SAEzB,GAAIN,EAAO6lB,WAAa,MAAO,CAC9B,GAAI7lB,EAAOisC,KAAM,CAChB72C,KAAKouB,YAAYrpB,EACpB,KAAS,CACN/E,KAAKsuB,UAAUvpB,EAClB,CACA,CACA,EAEAs1C,EAAS56C,UAAU+uB,cAAgB,SAAUzpB,GAC5C,OAAOA,EAAIP,QAAQ0G,SAASZ,OAASvF,EAAIP,QAAQ0G,SAASZ,OAAOV,eAAiB,KACnF,EAEAywC,EAAS56C,UAAUq3C,wBAA0B,SAAU/xC,GACtD,IAAI6F,EAAS7F,EAAIP,QAAQ0G,SACrB3B,EAAS,GACTknB,EAEJ,GAAI7lB,EAAO6lB,SAAU,CAEpB,IAAK/wB,MAAM2F,QAAQuF,EAAO6lB,UAAW,CACpC7lB,EAAO6lB,SAAWzwB,KAAK47C,iBAAiB72C,EAC3C,CAEE,GAAI/E,KAAKuC,MAAMgC,UAAU,WAAavE,KAAKuC,MAAMkB,QAAQu2B,eAAgB,CACxEvJ,EAAWzwB,KAAKuC,MAAMiC,QAAQsK,OAAOA,OAAOlE,EAAO6lB,SACtD,KAAS,CACNA,EAAW7lB,EAAO6lB,QACrB,CAEEA,EAASjrB,SAAQ,SAAUy2C,GAC1B,GAAIA,aAAoB/9B,EAAK,CAC5B3U,EAAOhE,KAAK02C,EAChB,CACA,GACA,CAEC,OAAO1yC,CACR,EAEA8wC,EAAS56C,UAAU+yB,UAAY,SAAUztB,GACxC,IAAIuF,EAASvF,EAAIP,QAAQ0G,SAASZ,OAC9B4xC,EAEJ,GAAI5xC,EAAQ,CACX4xC,EAAal8C,KAAKm8C,eAAep3C,EAAKuF,GAEtC,GAAI4xC,IAAe,MAAO,CACzB5xC,EAAO3F,KAAK3E,KAAKmF,OAAO6B,OAAOk1C,EAAY,EAC9C,CAEE,IAAK5xC,EAAO3F,KAAK3E,KAAKmF,OAAO/E,OAAQ,QAC7BkK,EAAO3F,KAAK3E,KAAKmF,MAC3B,CAEEnF,KAAK+sB,cAAcziB,GACnBtK,KAAKowB,UAAU9lB,EACjB,CAECtK,KAAKuC,MAAMM,WAAWqd,kBAAkB,OAAQ,MAAO,KACxD,EAEAm6B,EAAS56C,UAAUivB,gBAAkB,SAAU3pB,EAAKJ,EAAMgZ,EAAK3b,GAC9D,IAAIk6C,EAAa,MAEjB,UAAWv3C,IAAS,SAAU,CAC7BA,EAAOusB,KAAKC,MAAMxsB,EACpB,CAEC,IAAKjF,MAAM2F,QAAQN,EAAIJ,KAAK3E,KAAKmF,QAAS,CACzCJ,EAAIJ,KAAK3E,KAAKmF,OAAS,GAEvBJ,EAAIP,QAAQ0G,SAAS2rC,KAAO72C,KAAK26C,UAAU51C,EAAI6E,eAAgB7E,EAAIP,QAAQ0G,SAASlJ,MACtF,CAEC,UAAWA,IAAU,YAAa,CACjCk6C,EAAal8C,KAAKm8C,eAAen6C,EAAO+C,GAExC,GAAIm3C,IAAe,MAAO,CACzBn3C,EAAIJ,KAAK3E,KAAKmF,OAAO6B,OAAO2W,EAAMu+B,EAAaA,EAAa,EAAG,EAAGv3C,EACrE,CACA,CAEC,GAAIu3C,IAAe,MAAO,CACzB,GAAIv+B,EAAK,CACR5Y,EAAIJ,KAAK3E,KAAKmF,OAAOgC,QAAQxC,EAChC,KAAS,CACNI,EAAIJ,KAAK3E,KAAKmF,OAAOI,KAAKZ,EAC7B,CACA,CAEC3E,KAAK+sB,cAAchoB,GACnB/E,KAAKowB,UAAUrrB,GAEf/E,KAAKuC,MAAMM,WAAWqd,kBAAkB,OAAQ,MAAO,KACxD,EAEAm6B,EAAS56C,UAAU08C,eAAiB,SAAUj0C,EAASoC,GACtD,IAAI8xC,EAAUp8C,KAEd,IAAIsF,EAAQ,MAEZ,WAAY4C,IAAY,YAAc,YAAc9I,EAAQ8I,KAAa,SAAU,CAElF,GAAIA,aAAmBgW,EAAK,CAE3B5Y,EAAQ4C,EAAQvD,IACnB,MAAS,GAAIuD,aAAmBiW,EAAc,CAE3C7Y,EAAQ4C,EAAQE,WAAWzD,IAC9B,MAAS,UAAW0D,cAAgB,aAAeH,aAAmBG,YAAa,CAChF,GAAIiC,EAAO9F,QAAQ0G,SAAU,CAC5B5F,EAAQgF,EAAO9F,QAAQ0G,SAASulB,SAAS/vB,MAAK,SAAUu7C,GACvD,OAAOA,aAAoB/9B,EAAM+9B,EAASt5C,UAAYuF,EAAU,KACrE,IAEI,GAAI5C,EAAO,CACVA,EAAQA,EAAMX,IACnB,CACA,CACA,CACA,MAAQ,UAAWuD,GAAW,aAAeA,IAAY,KAAM,CAC7D5C,EAAQ,KACV,KAAQ,CAENA,EAAQgF,EAAO3F,KAAK3E,KAAKmF,OAAOzE,MAAK,SAAUqE,GAC9C,OAAOA,EAAIJ,KAAKy3C,EAAQ75C,MAAMkB,QAAQzB,QAAUkG,CACnD,GACA,CAEC,GAAI5C,EAAO,CAEV,GAAI5F,MAAM2F,QAAQiF,EAAO3F,KAAK3E,KAAKmF,QAAS,CAC3CG,EAAQgF,EAAO3F,KAAK3E,KAAKmF,OAAOlE,QAAQqE,EAC3C,CAEE,GAAIA,IAAU,EAAG,CAChBA,EAAQ,KACX,CACA,CAIC,OAAOA,CACR,EAEA+0C,EAAS56C,UAAU2L,gBAAkB,SAAUrG,EAAKiN,EAAWqqC,GAC9D,IAAIC,EAAUt8C,KAEd,IAAI4K,EAAS7F,EAAIP,QAAQ0G,SACrB3B,EAAS,GAEb,GAAIqB,EAAO6lB,SAAU,CAEpB,IAAK/wB,MAAM2F,QAAQuF,EAAO6lB,UAAW,CACpC7lB,EAAO6lB,SAAWzwB,KAAK47C,iBAAiB72C,EAC3C,CAEE6F,EAAO6lB,SAASjrB,SAAQ,SAAUy2C,GACjC,GAAIA,aAAoB/9B,EAAK,CAC5B3U,EAAOhE,KAAKyM,EAAYiqC,EAASryC,eAAiBqyC,GAElD,GAAII,EAAS,CACZ9yC,EAASA,EAAO4B,OAAOmxC,EAAQlxC,gBAAgB6wC,EAAUjqC,EAAWqqC,GACzE,CACA,CACA,GACA,CAEC,OAAO9yC,CACR,EAEA8wC,EAAS56C,UAAU88C,gBAAkB,SAAUjxC,GAC9C,IAAKA,EAAKvG,IAAIsG,MAAMpK,QAAQqK,GAAO,CAClCA,EAAKvG,IAAIqB,cACX,CACA,EAEAi0C,EAAS56C,UAAU+8C,cAAgB,WAClC,OAAOx8C,KAAKmF,KACb,EAEAk1C,EAAS56C,UAAUiyB,aAAe,SAAU/sB,GAC3C,OAAQ3E,KAAKmF,aAAeR,EAAK3E,KAAKmF,SAAW,YAAc,SAAWnF,KAAK06C,oBAAsB/1C,EAAK3E,KAAK06C,gBAAkB,YAAc,MAChJ,EAEAhtC,EAAUjO,UAAU6rC,eAAe,WAAY+O,GAE/C,IAAIoC,EAAW,SAASA,EAASl6C,GAChCvC,KAAKuC,MAAQA,CACd,EAGAk6C,EAASh9C,UAAUkrC,SAAW,SAAU18B,EAAM28B,EAAUnnC,EAAS6xB,EAAOonB,GACvE,IAAI/2C,EAAO3F,KACP28C,EAAe,MAEnB,SAASC,EAAUj4C,EAAMk4C,GACxB,GAAIH,EAAmB,CACtB,GAAIA,IAAsB,KAAM,CAC/B/2C,EAAKm3C,gBAAgBn4C,EAAMk4C,EAAM5uC,EAAM28B,EAAU,KACrD,KAAU,CACN8R,EAAkB/3C,EACtB,CACA,KAAS,CACNgB,EAAKm3C,gBAAgBn4C,EAAMk4C,EAAM5uC,EAAM28B,EAC1C,CACA,CAEC,UAAW38B,GAAQ,WAAY,CAC9B0uC,EAAe1uC,CACjB,KAAQ,CACN,GAAItI,EAAKo3C,YAAY9uC,GAAO,CAC3B0uC,EAAeh3C,EAAKo3C,YAAY9uC,EACnC,KAAS,CACN5B,QAAQC,KAAK,iDAAkD2B,EAClE,CACA,CAEC,GAAI0uC,EAAc,CACjB,IAAIj5B,EAAO1jB,KAAK64C,mBAAmBvjB,GAEnCqnB,EAAal8C,KAAKT,KAAKuC,MAAOmhB,EAAMjgB,GAAW,GAAIm5C,EACrD,CACA,EAEAH,EAASh9C,UAAUo5C,mBAAqB,SAAUvjB,GACjD,IAAI5R,EAAO1jB,KAAKuC,MAAMiC,QAAQsgC,OAAO+T,mBAAmB74C,KAAKuC,MAAMkB,QAAQq2B,eAAgB,MAAOxE,GAASt1B,KAAKuC,MAAMkB,QAAQs2B,iBAAkB,YAGhJ,IAAI2D,EAAc19B,KAAKuC,MAAMkB,QAAQq6B,oBAErC,GAAIJ,IAAgBh+B,MAAM2F,QAAQq4B,GAAc,CAC/CA,EAAc,CAACA,EACjB,CAECha,EAAKle,SAAQ,SAAUT,GACtB,IAAIsmB,EAEJ,GAAItmB,EAAIkJ,OAAS,QAAS,CACzBod,EAAQtmB,EAAIjC,QAAQ,GAEpB,GAAI46B,GAAeA,EAAY34B,EAAIu1C,QAAS,CAC3CjvB,EAAMvrB,MAAQ49B,EAAY34B,EAAIu1C,QAAQjvB,EAAMvrB,MAAOiF,EAAIiN,UAAUgrC,OAAOC,cAAel4C,EAAIiN,UAAUgrC,OAAOh8B,UAAWjc,EAAIiN,UAC/H,CACA,CACA,IAEC,OAAO0R,CACR,EAEA+4B,EAASh9C,UAAUq9C,gBAAkB,SAAUn4C,EAAMk4C,EAAM5uC,EAAM28B,EAAUsS,GAC1E,IAAIv6C,EAAUU,SAASC,cAAc,KACjCs2B,EAAO,IAAIujB,KAAK,CAACx4C,GAAO,CAAEsJ,KAAM4uC,IAChCjS,EAAWA,GAAY,qBAAuB38B,IAAS,WAAa,MAAQA,GAEhF2rB,EAAO55B,KAAKuC,MAAMkB,QAAQk2B,cAAcl5B,KAAKT,KAAKuC,MAAOoC,EAAMi1B,GAE/D,GAAIA,EAAM,CAET,GAAIsjB,EAAQ,CACXxyB,OAAOmsB,KAAKnsB,OAAO0yB,IAAIC,gBAAgBzjB,GAC1C,KAAS,CACN,GAAIsJ,UAAUoa,iBAAkB,CAC/Bpa,UAAUoa,iBAAiB1jB,EAAMgR,EACrC,KAAU,CACNjoC,EAAQgQ,aAAa,OAAQ+X,OAAO0yB,IAAIC,gBAAgBzjB,IAGxDj3B,EAAQgQ,aAAa,WAAYi4B,GAGjCjoC,EAAQ0B,MAAMoV,QAAU,OACxBpW,SAASkyB,KAAKnuB,YAAYzE,GAC1BA,EAAQyhC,QAGR/gC,SAASkyB,KAAK3vB,YAAYjD,EAC9B,CACA,CAEE,GAAI3C,KAAKuC,MAAMkB,QAAQo2B,iBAAkB,CACxC75B,KAAKuC,MAAMkB,QAAQo2B,kBACtB,CACA,CACA,EAEA4iB,EAASh9C,UAAU4xC,cAAgB,SAAU9uC,EAAO8e,EAAQ1c,GAC3D,OAAQ0c,GACP,IAAK,YACJrhB,KAAK2qC,SAAShmC,EAAKsJ,KAAM,GAAItJ,EAAKlB,QAASkB,EAAK2E,OAAQ3E,EAAK44C,WAC7D,MAEH,EAGAd,EAASh9C,UAAUs9C,YAAc,CAChCS,IAAK,SAASA,EAAI95B,EAAMjgB,EAASg6C,GAChC,IAAIC,EAAYj6C,GAAWA,EAAQi6C,UAAYj6C,EAAQi6C,UAAY,IAC/DC,EAAe,GACfxJ,EAAU,GAEdzwB,EAAKle,SAAQ,SAAUT,GACtB,IAAI2c,EAAO,GAEX,OAAQ3c,EAAIkJ,MACX,IAAK,QACJ5B,QAAQC,KAAK,+DACb,MAED,IAAK,OACJD,QAAQC,KAAK,wEACb,MAED,IAAK,SACJvH,EAAIjC,QAAQ0C,SAAQ,SAAUN,EAAKY,GAClC,GAAIZ,GAAOA,EAAI04C,QAAU,EAAG,CAC3BzJ,EAAQruC,UAAYZ,EAAIpF,OAAS,aAAeoF,EAAIpF,QAAU,KAAO,GAAK,IAAMc,OAAOsE,EAAIpF,OAAO+I,MAAM,KAAK6qC,KAAK,MAAQ,GACjI,CACA,IACK,MAED,IAAK,MACJ3uC,EAAIjC,QAAQ0C,SAAQ,SAAUN,GAE7B,GAAIA,EAAK,CAER,OAAQ9F,EAAQ8F,EAAIpF,QACnB,IAAK,SACJoF,EAAIpF,MAAQoxB,KAAK2jB,UAAU3vC,EAAIpF,OAC/B,MAED,IAAK,YACL,IAAK,OACJoF,EAAIpF,MAAQ,GACZ,MAGF4hB,EAAKnc,KAAK,IAAM3E,OAAOsE,EAAIpF,OAAO+I,MAAM,KAAK6qC,KAAK,MAAQ,IACjE,CACA,IAEKiK,EAAap4C,KAAKmc,EAAKgyB,KAAKgK,IAC5B,MAEL,IAEE,GAAIvJ,EAAQ/zC,OAAQ,CACnBu9C,EAAax2C,QAAQgtC,EAAQT,KAAKgK,GACrC,CAEEC,EAAeA,EAAajK,KAAK,MAEjC,GAAIjwC,EAAQo6C,IAAK,CAChBF,EAAe,SAAWA,CAC7B,CAEEF,EAAgBE,EAAc,WAChC,EAECjJ,KAAM,SAASA,EAAKhxB,EAAMjgB,EAASg6C,GAClC,IAAIE,EAAe,GAEnBj6B,EAAKle,SAAQ,SAAUT,GACtB,IAAI2c,EAAO,GAEX,OAAQ3c,EAAIkJ,MACX,IAAK,SACJ,MAED,IAAK,QACJ5B,QAAQC,KAAK,gEACb,MAED,IAAK,OACJD,QAAQC,KAAK,yEACb,MAED,IAAK,MACJvH,EAAIjC,QAAQ0C,SAAQ,SAAUN,GAC7B,GAAIA,EAAK,CACRwc,EAAKxc,EAAI8M,UAAUxE,YAActI,EAAIpF,KAC5C,CACA,IAEK69C,EAAap4C,KAAKmc,GAClB,MAEL,IAEEi8B,EAAezsB,KAAK2jB,UAAU8I,EAAc,KAAM,MAElDF,EAAgBE,EAAc,mBAChC,EAECG,IAAK,SAASA,EAAIp6B,EAAMjgB,EAASg6C,GAChC,IAAIM,EAAS,GACTxoB,EAAO,GACPyoB,EAAkB,GAClBC,EAAiBx6C,EAAQw6C,gBAAkB,CAC9CC,UAAW,OACXC,SAAU,GACVC,YAAa,EACbC,UAAW,KAERC,EAAgB76C,EAAQ66C,eAAiB,CAC5CJ,UAAW,OACXC,SAAU,GACVC,YAAa,EACbC,UAAW,KAERE,EAAc96C,EAAQ+6C,OAAS,GAC/Bp5C,EAAQ3B,GAAWA,EAAQ2B,MAAQ3B,EAAQ2B,MAAQ,GAEvD,IAAKm5C,EAAYE,YAAa,CAC7BF,EAAYE,YAAch7C,EAAQg7C,aAAe,WACpD,CAEE,IAAKF,EAAYG,KAAM,CACtBH,EAAYG,KAAO,IACtB,CAGEh7B,EAAKle,SAAQ,SAAUT,GAGtB,OAAQA,EAAIkJ,MACX,IAAK,SACJ8vC,EAAOx4C,KAAKo5C,EAAS55C,IACrB,MAED,IAAK,QACJwwB,EAAKhwB,KAAKo5C,EAAS55C,EAAKk5C,IACxB,MAED,IAAK,OACJ1oB,EAAKhwB,KAAKo5C,EAAS55C,EAAKu5C,IACxB,MAED,IAAK,MACJ/oB,EAAKhwB,KAAKo5C,EAAS55C,IACnB,MAEL,IAEE,SAAS45C,EAAS55C,EAAK65C,GACtB,IAAIpI,EAAU,GAEdzxC,EAAIjC,QAAQ0C,SAAQ,SAAUN,GAC7B,IAAIoG,EAEJ,GAAIpG,EAAK,CACR,OAAQ9F,EAAQ8F,EAAIpF,QACnB,IAAK,SACJoF,EAAIpF,MAAQoxB,KAAK2jB,UAAU3vC,EAAIpF,OAC/B,MAED,IAAK,YACL,IAAK,OACJoF,EAAIpF,MAAQ,GACZ,MAGFwL,EAAO,CACNqnC,QAASztC,EAAIpF,MACb++C,QAAS35C,EAAI4E,MACbg1C,QAAS55C,EAAIyC,QAGd,GAAIi3C,EAAQ,CACXtzC,EAAKszC,OAASA,CACpB,CAEKpI,EAAQjxC,KAAK+F,EAClB,KAAW,CACNkrC,EAAQjxC,KAAK,GAClB,CACA,IAEG,OAAOixC,CACV,CAGE,IAAIuI,EAAM,IAAIP,MAAMD,GAEpB,GAAI96C,GAAWA,EAAQu7C,UAAW,CACjC,UAAWv7C,EAAQu7C,YAAc,WAAY,CAC5ChB,EAAkBv6C,EAAQu7C,UAAUD,IAAQ,EAChD,KAAU,CACNf,EAAkBv6C,EAAQu7C,SAC9B,CACA,CAEE,GAAI55C,EAAO,CACV44C,EAAgBiB,eAAiB,SAAUt6C,GAC1Co6C,EAAItnC,KAAKrS,EAAO,GAAI,GACxB,CACA,CAEE44C,EAAgBkB,KAAOnB,EACvBC,EAAgBzoB,KAAOA,EAEvBwpB,EAAIC,UAAUhB,GAEd,GAAIv6C,GAAWA,EAAQ07C,mBAAoB,CAC1C17C,EAAQ07C,mBAAmBJ,EAC9B,CAEEtB,EAAgBsB,EAAIx1C,OAAO,eAAgB,kBAC7C,EAEC61C,KAAM,SAASA,EAAK17B,EAAMjgB,EAASg6C,GAClC,IAAI93C,EAAO3F,KACPq/C,EAAY57C,EAAQ47C,WAAa,SACjCC,EAAWC,KAAKC,MAAMC,WACtBl2C,EAEJ+1C,EAASI,WAAa,GACtBJ,EAASK,OAAS,GAElB,SAASC,IACR,IAAI30C,EAAO,GACP40C,EAAS,GACTC,EAAY,GACZxqB,EAAQ,CAAEyqB,EAAG,CAAEC,EAAG,EAAGC,EAAG,GAAKrrC,EAAG,CAAEorC,EAAGt8B,EAAK,GAAKA,EAAK,GAAG5gB,QAAQg1C,QAAO,SAAUhS,EAAGC,GACpF,OAAOD,GAAKC,GAAKA,EAAEj8B,MAAQi8B,EAAEj8B,MAAQ,EAC3C,GAAQ,GAAK,EAAGm2C,EAAGv8B,EAAKtjB,SAGrBsjB,EAAKle,SAAQ,SAAUT,EAAKe,GAC3B,IAAI0wC,EAAU,GAEdzxC,EAAIjC,QAAQ0C,SAAQ,SAAUN,EAAKg7C,GAElC,GAAIh7C,EAAK,CACRsxC,EAAQjxC,OAAOL,EAAIpF,iBAAiBmsC,OAAS7sC,EAAQ8F,EAAIpF,SAAW,SAAWoxB,KAAK2jB,UAAU3vC,EAAIpF,OAASoF,EAAIpF,OAE/G,GAAIoF,EAAI4E,MAAQ,GAAK5E,EAAIyC,QAAU,EAAG,CACrCk4C,EAAOt6C,KAAK,CAAEw6C,EAAG,CAAEE,EAAMD,EAAGE,GAAKtrC,EAAG,CAAEqrC,EAAGn6C,EAAIZ,EAAIyC,OAAS,EAAGq4C,EAAGE,EAAIh7C,EAAI4E,MAAQ,IACvF,CACA,KAAY,CACN0sC,EAAQjxC,KAAK,GACnB,CACA,IAEI0F,EAAK1F,KAAKixC,EACd,IAGG+I,KAAKC,MAAMW,cAAcL,EAAW70C,GAEpC60C,EAAU,QAAUP,KAAKC,MAAMY,aAAa9qB,GAE5C,GAAIuqB,EAAOz/C,OAAQ,CAClB0/C,EAAU,WAAaD,CAC3B,CAEG,OAAOC,CACV,CAEE,GAAIr8C,EAAQ48C,UAAW,CACtB5C,EAAgBmC,KAChB,MACH,CAEE,GAAIn8C,EAAQ68C,OAAQ,CACnB,IAAK,IAAIC,KAAS98C,EAAQ68C,OAAQ,CAEjC,GAAI78C,EAAQ68C,OAAOC,KAAW,KAAM,CACnCjB,EAASI,WAAWn6C,KAAKg7C,GACzBjB,EAASK,OAAOY,GAASX,GAC9B,KAAW,CAENN,EAASI,WAAWn6C,KAAKg7C,GAEzBvgD,KAAKwE,QAAQyzB,MAAMmZ,KAAK3tC,EAAQ68C,OAAOC,GAAQ,WAAY,YAAa,CACvEtyC,KAAM,OACNxK,QAAS,CAAE48C,UAAW,MACtB/2C,OAAQ3D,EAAK2D,OACbi0C,UAAW,SAASA,EAAU54C,GAC7B26C,EAASK,OAAOY,GAAS57C,CAChC,GAEA,CACA,CACA,KAAS,CACN26C,EAASI,WAAWn6C,KAAK85C,GACzBC,EAASK,OAAON,GAAaO,GAChC,CAEE,GAAIn8C,EAAQ07C,mBAAoB,CAC/BG,EAAW77C,EAAQ07C,mBAAmBG,EACzC,CAGE,SAASkB,EAAKT,GACb,IAAIU,EAAM,IAAIC,YAAYX,EAAE3/C,QAC5B,IAAIugD,EAAO,IAAIC,WAAWH,GAC1B,IAAK,IAAI36C,EAAI,EAAGA,GAAKi6C,EAAE3/C,SAAU0F,EAAG,CACnC66C,EAAK76C,GAAKi6C,EAAEc,WAAW/6C,GAAK,GAChC,CAAI,OAAO26C,CACX,CAEEl3C,EAASg2C,KAAKuB,MAAMxB,EAAU,CAAEyB,SAAU,OAAQC,QAAS,KAAM/yC,KAAM,WAEvEwvC,EAAgB+C,EAAKj3C,GAAS,2BAChC,EAECqvC,KAAM,SAASA,EAAKl1B,EAAMjgB,EAASg6C,GAClC,GAAIz9C,KAAKuE,UAAU,SAAU,MAAO,CACnCk5C,EAAgBz9C,KAAKwE,QAAQsgC,OAAOgU,mBAAmBp1B,GAAO,YACjE,CACA,GAIAhW,EAAUjO,UAAU6rC,eAAe,WAAYmR,GAE/C,IAAIwE,EAAO,SAASA,EAAK1+C,GACxBvC,KAAKuC,MAAQA,EACbvC,KAAKua,YAAc,MACnBva,KAAKkhD,WAAa,MAClBlhD,KAAKmhD,eAAiB,MACtBnhD,KAAKohD,YAAc,MACnBphD,KAAKqhD,YAAc,EACpB,EAGAJ,EAAKxhD,UAAU2U,iBAAmB,SAAU3N,GAC3C,IAAId,EAAO3F,KACP4K,EAAS,CACZwL,OAAQ,MACRqiC,QAAS,MACTxmB,MAAOxrB,EAAOH,WAAWg7C,SACzBxpC,OAAQrR,EAAOH,WAAWi7C,cAAgB,IAI3C,OAAQniD,EAAQqH,EAAOH,WAAW8P,SACjC,IAAK,SAEJ,GAAI3P,EAAOH,WAAW8P,SAAW,OAAQ,CACxC3P,EAAOH,WAAW8P,OAAS,YAC3B/J,QAAQC,KAAK,6FACjB,CAEG,GAAI3G,EAAK67C,QAAQ/6C,EAAOH,WAAW8P,QAAS,CAC3CxL,EAAOwL,OAASzQ,EAAK67C,QAAQ/6C,EAAOH,WAAW8P,OACnD,KAAU,CACN/J,QAAQC,KAAK,wCAAyC7F,EAAOH,WAAW8P,OAC5E,CACG,MAED,IAAK,WACJxL,EAAOwL,OAAS3P,EAAOH,WAAW8P,OAClC,MAED,IAAK,UAEJ,GAAI3P,EAAOH,WAAW8P,SAAW,KAAM,CAEtC,UAAW3P,EAAOH,WAAWsR,YAAc,WAAY,CAEtD,GAAInR,EAAOH,WAAWsR,YAAc,OAAQ,CAC3CnR,EAAOH,WAAWsR,UAAY,YAC9BvL,QAAQC,KAAK,6FACnB,CAEK,GAAI3G,EAAK67C,QAAQ/6C,EAAOH,WAAWsR,WAAY,CAC9ChN,EAAOwL,OAASzQ,EAAK67C,QAAQ/6C,EAAOH,WAAWsR,UACrD,KAAY,CACNhN,EAAOwL,OAASzQ,EAAK67C,QAAQ,QACnC,CACA,KAAW,CACNn1C,QAAQC,KAAK,oEAAqE7F,EAAOH,WAAWsR,UACzG,CACA,CACG,MAGF,GAAIhN,EAAOwL,OAAQ,CAClB3P,EAAOjC,QAAQ6R,KAAOzL,CACxB,CACA,EAEAq2C,EAAKxhD,UAAUi3B,eAAiB,WAC/B,OAAO12B,KAAKua,YAAcva,KAAKua,YAAY3Q,eAAiB,KAC7D,EAEAq3C,EAAKxhD,UAAUgiD,YAAc,SAAUC,GACtC,IAAIp2C,EAAOtL,KAAKua,YACZonC,EAEJ3hD,KAAKohD,YAAc,MAEnB,GAAI91C,EAAM,CACTtL,KAAKua,YAAc,MAEnBonC,EAASr2C,EAAKxH,aAEd,GAAI49C,EAAQ,CACXp2C,EAAKyE,UACR,KAAS,CACN4xC,EAAOp+C,UAAUmkB,OAAO,4BAC3B,CAEEi6B,EAAOp+C,UAAUmkB,OAAO,qBACxB,MAAOi6B,EAAOx+C,WAAY,CACzBw+C,EAAO/7C,YAAY+7C,EAAOx+C,WAC7B,CAAGmI,EAAKvG,IAAIjB,aAAaP,UAAUmkB,OAAO,wBAC1C,CACA,EAEAu5B,EAAKxhD,UAAU+a,WAAa,WAE3B,GAAIxa,KAAKua,YAAa,CACrB,IAAIjP,EAAOtL,KAAKua,YAChB,IAAIvI,EAAYhS,KAAKua,YAAY3Q,eAEjC5J,KAAKyhD,YAAY,MACjBn2C,EAAKioB,eAAejoB,EAAK6M,YACzB7M,EAAKuhB,eAEL,GAAIvhB,EAAK7E,OAAOH,WAAW8P,QAAU,YAAc9K,EAAK7E,OAAOH,WAAWs7C,eAAgB,CACzFt2C,EAAKvG,IAAIojB,gBAAgB,KAC5B,CAEE,GAAI7c,EAAK7E,OAAOsK,WAAW4E,kBAAmB,CAC7CrK,EAAK7E,OAAOsK,WAAW4E,kBAAkBlV,KAAKT,KAAKuC,MAAOyP,EAC7D,CAEEhS,KAAKuC,MAAMkB,QAAQkS,kBAAkBlV,KAAKT,KAAKuC,MAAOyP,EACxD,CACA,EAGAivC,EAAKxhD,UAAUy1B,WAAa,SAAU5pB,GACrC,IAAI3F,EAAO3F,KACP2C,EAAU2I,EAAKxH,WAAW,MAE9BnB,EAAQgQ,aAAa,WAAY,GAEjChQ,EAAQgS,iBAAiB,SAAS,SAAUC,GAC3C,IAAKjS,EAAQY,UAAUs+C,SAAS,qBAAsB,CACrDl/C,EAAQ4U,MAAM,CAAEuqC,cAAe,MAClC,CACA,IAECn/C,EAAQgS,iBAAiB,aAAa,SAAUC,GAC/C,GAAIA,EAAEmtC,SAAW,EAAG,CACnBntC,EAAEwgB,gBACL,KAAS,CACNzvB,EAAKu7C,WAAa,IACrB,CACA,IAECv+C,EAAQgS,iBAAiB,SAAS,SAAUC,GAC3C,IAAKjP,EAAKw7C,eAAgB,CACzBx7C,EAAK0Q,KAAK/K,EAAMsJ,EAAG,MACtB,CACA,GACA,EAEAqsC,EAAKxhD,UAAUuiD,iBAAmB,SAAU12C,EAAM8lB,GACjDpxB,KAAKmhD,eAAiB,KACtB,KAAM/vB,GAASpxB,KAAKuC,MAAMonB,UAAY,MAAO,CAC5Cre,EAAKxH,aAAayT,MAAM,CAAEuqC,cAAe,MAC3C,CACC9hD,KAAKmhD,eAAiB,KACvB,EAEAF,EAAKxhD,UAAU+2B,SAAW,SAAUlrB,EAAM22C,GACzCjiD,KAAKgiD,iBAAiB12C,GACtBtL,KAAKqW,KAAK/K,EAAM,MAAO22C,EACxB,EAEAhB,EAAKxhD,UAAUyiD,kBAAoB,SAAU52C,GAC5C,GAAItL,KAAKuC,MAAMM,WAAW+jB,iBAAmB,UAAW,CACpD,IAACN,EAAUtmB,KAAKuC,MAAMM,WAAWF,QAAQwZ,UACxCoK,EAAavmB,KAAKuC,MAAMM,WAAWF,QAAQkK,aAAe7M,KAAKuC,MAAMM,WAAWF,QAAQwZ,UACxFwC,EAAQrT,EAAKvG,IAAIjB,aAGrB,GAAI6a,EAAMM,UAAYqH,EAAS,CAC9BtmB,KAAKuC,MAAMM,WAAWF,QAAQwZ,WAAamK,EAAU3H,EAAMM,SAC9D,KAAS,CACN,GAAIN,EAAMM,UAAYN,EAAM5F,aAAewN,EAAY,CACtDvmB,KAAKuC,MAAMM,WAAWF,QAAQwZ,WAAawC,EAAMM,UAAYN,EAAM5F,aAAewN,CACtF,CACA,CAEK,IAAC47B,EAAWniD,KAAKuC,MAAMM,WAAWF,QAAQM,WACzCm/C,EAAYpiD,KAAKuC,MAAMM,WAAWF,QAAQyB,YAAcpE,KAAKuC,MAAMM,WAAWF,QAAQM,WACtF0+C,EAASr2C,EAAKxH,aAGlB,GAAI9D,KAAKuC,MAAMgC,UAAU,iBAAkB,CAC1C49C,GAAYl1C,SAASjN,KAAKuC,MAAMiC,QAAQC,cAAc49C,YACtDD,GAAan1C,SAASjN,KAAKuC,MAAMiC,QAAQC,cAAc69C,YAC1D,CAEE,GAAItiD,KAAKuC,MAAMkB,QAAQyC,cAAe,CACrCi8C,GAAYl1C,SAASjN,KAAKuC,MAAM4D,QAAQokB,aACxC63B,GAAan1C,SAASjN,KAAKuC,MAAM4D,QAAQokB,YAC5C,CAEE,GAAIo3B,EAAOz1C,WAAai2C,EAAU,CAEjCniD,KAAKuC,MAAMM,WAAWF,QAAQM,YAAck/C,EAAWR,EAAOz1C,UACjE,KAAS,CACN,GAAIy1C,EAAOz1C,WAAay1C,EAAOx1C,YAAci2C,EAAW,CACvDpiD,KAAKuC,MAAMM,WAAWF,QAAQM,YAAc0+C,EAAOz1C,WAAay1C,EAAOx1C,YAAci2C,CACzF,CACA,CACA,CACA,EAEAnB,EAAKxhD,UAAU4W,KAAO,SAAU/K,EAAMsJ,EAAGqtC,GACxC,IAAIt8C,EAAO3F,KACPgyB,EAAY,KACZuwB,EAAW,SAASA,IAAW,EAC/B5/C,EAAU2I,EAAKxH,aACf0+C,EACAxwC,EACA8F,EAGJ,GAAI9X,KAAKua,YAAa,CACrB,IAAKva,KAAKohD,YAAa,CACtBphD,KAAKwa,YACR,CACE,MACF,CAGC,SAASioC,EAAQ3iD,GAChB,GAAI6F,EAAK4U,cAAgBjP,EAAM,CAC9B,IAAIqrB,EAAQ,KAEZ,GAAIrrB,EAAK7E,OAAOjC,QAAQuL,UAAYpK,EAAKpD,MAAMgC,UAAU,aAAeoB,EAAKpD,MAAMkB,QAAQu9B,gBAAkB,SAAU,CACtHrK,EAAQhxB,EAAKpD,MAAMiC,QAAQuL,SAASA,SAASzE,EAAK7E,OAAOjC,QAAQuL,SAAUzE,EAAMxL,EACrF,CAEG,GAAI62B,IAAU,MAAQhxB,EAAKpD,MAAMkB,QAAQu9B,iBAAmB,YAAa,CACxEr7B,EAAK87C,cAEL,IAAKn2C,EAAK9G,QAAQ6R,KAAM,CACvB/K,EAAK9G,QAAQ6R,KAAO,EACzB,CAEI/K,EAAK9G,QAAQ6R,KAAKqd,OAAS,KAE3B,GAAI/tB,EAAK07C,YAAYpgD,QAAQqK,KAAU,EAAG,CACzC3F,EAAK07C,YAAY97C,KAAK+F,EAC3B,CAEIA,EAAK8nB,SAAStzB,EAAO,MAErB,GAAI6F,EAAKpD,MAAMkB,QAAQyH,UAAYvF,EAAKpD,MAAMgC,UAAU,YAAa,CACpEoB,EAAKpD,MAAMiC,QAAQ0G,SAASqxC,gBAAgBjxC,EACjD,CAEI,GAAIqrB,IAAU,KAAM,CACnBh0B,EAAQY,UAAUC,IAAI,6BACtBmC,EAAKpD,MAAMkB,QAAQw9B,iBAAiBxgC,KAAKkF,EAAKpD,MAAO+I,EAAK1B,eAAgB9J,EAAO62B,GACjF,OAAO,KACZ,CAEI,OAAO,IACX,KAAU,CACNhxB,EAAKy7C,YAAc,KACnBz+C,EAAQY,UAAUC,IAAI,6BACtBmC,EAAKq8C,iBAAiB12C,EAAM,MAC5Bi3C,IACA58C,EAAKpD,MAAMkB,QAAQw9B,iBAAiBxgC,KAAKkF,EAAKpD,MAAO+I,EAAK1B,eAAgB9J,EAAO62B,GAEjF,OAAO,KACX,CACA,CAGA,CAGC,SAAS+qB,IACR,GAAI/7C,EAAK4U,cAAgBjP,EAAM,CAC9B3F,EAAK6U,aAEL,GAAI7U,EAAKpD,MAAMkB,QAAQyH,UAAYvF,EAAKpD,MAAMgC,UAAU,YAAa,CACpEoB,EAAKpD,MAAMiC,QAAQ0G,SAASqxC,gBAAgBjxC,EAChD,CACA,CAGA,CAEC,SAAS0M,EAAW5O,GACnBm5C,EAAWn5C,CACb,CAEC,IAAKkC,EAAK7E,OAAOjC,QAAQ6R,KAAKoiC,QAAS,CACtC,GAAI7jC,EAAG,CACNA,EAAE0C,iBACL,CAEE,OAAQlY,EAAQkM,EAAK7E,OAAOjC,QAAQ6R,KAAK4b,QACxC,IAAK,WACJD,EAAY1mB,EAAK7E,OAAOjC,QAAQ6R,KAAK4b,MAAM3mB,EAAK1B,gBAChD,MAED,IAAK,UACJooB,EAAY1mB,EAAK7E,OAAOjC,QAAQ6R,KAAK4b,MACrC,MAGF,GAAID,GAAaiwB,EAAW,CAE3Bt8C,EAAK6U,aAEL7U,EAAK4U,YAAcjP,EAEnBtL,KAAKkiD,kBAAkB52C,GAEvB0G,EAAY1G,EAAK1B,eAEjB,GAAI5J,KAAKkhD,WAAY,CACpBlhD,KAAKkhD,WAAa,MAElB,GAAI51C,EAAK7E,OAAOsK,WAAWC,UAAW,CACrC1F,EAAK7E,OAAOsK,WAAWC,UAAUvQ,KAAKT,KAAKuC,MAAOqS,EAAG5C,EAC1D,CACA,CAEG,GAAI1G,EAAK7E,OAAOsK,WAAW2E,YAAa,CACvCpK,EAAK7E,OAAOsK,WAAW2E,YAAYjV,KAAKT,KAAKuC,MAAOyP,EACxD,CAEGrM,EAAKpD,MAAMkB,QAAQiS,YAAYjV,KAAKT,KAAKuC,MAAOyP,GAEhD8F,SAAgBxM,EAAK7E,OAAOjC,QAAQ6R,KAAKyB,SAAW,WAAaxM,EAAK7E,OAAOjC,QAAQ6R,KAAKyB,OAAO9F,GAAa1G,EAAK7E,OAAOjC,QAAQ6R,KAAKyB,OAEvI0qC,EAAal3C,EAAK7E,OAAOjC,QAAQ6R,KAAKD,OAAO3V,KAAKkF,EAAMqM,EAAWgG,EAAYyqC,EAASf,EAAQ5pC,GAGhG,GAAI0qC,IAAe,MAAO,CAEzB,GAAIA,aAAsBnqC,KAAM,CAC/B1V,EAAQY,UAAUC,IAAI,qBACtB8H,EAAKvG,IAAIjB,aAAaP,UAAUC,IAAI,yBACpC,MAAOb,EAAQQ,WAAY,CAC1BR,EAAQiD,YAAYjD,EAAQQ,WAClC,CAAMR,EAAQyE,YAAYo7C,GAGrBD,IAGA,IAAI9xB,EAAW9tB,EAAQ8tB,SAEvB,IAAK,IAAI3qB,EAAI,EAAGA,EAAI2qB,EAASrwB,OAAQ0F,IAAK,CACzC2qB,EAAS3qB,GAAG6O,iBAAiB,SAAS,SAAUC,GAC/CA,EAAE0C,iBACT,GACA,CACA,KAAW,CACNjL,QAAQC,KAAK,8EAA+Ek2C,GAC5F7/C,EAAQ+/C,OACR,OAAO,KACZ,CACA,KAAU,CACN//C,EAAQ+/C,OACR,OAAO,KACX,CAEG,OAAO,IACV,KAAS,CACN1iD,KAAKkhD,WAAa,MAClBv+C,EAAQ+/C,OACR,OAAO,KACV,CACA,KAAQ,CACN1iD,KAAKkhD,WAAa,MAClBv+C,EAAQ+/C,OACR,OAAO,KACT,CACA,EAEAzB,EAAKxhD,UAAUkjD,UAAY,SAAUv/C,EAAIK,GACrC,IAACm/C,EAAOn/C,EAAQm/C,KACfC,SAAoBp/C,EAAQq/C,iBAAmB,YAAcr/C,EAAQq/C,eAAiB,IACtFC,SAAoBt/C,EAAQu/C,iBAAmB,YAAcv/C,EAAQu/C,eAAiB,IACtFC,SAAsBx/C,EAAQy/C,mBAAqB,YAAcz/C,EAAQy/C,iBAAmB,IAGhG,SAASC,EAAYnhD,GACpB,IAAIohD,EAASR,EAAK5gD,GAClB,UAAWohD,IAAW,aAAeA,IAAWH,GAAgBG,IAAWP,GAAcO,IAAWL,EAAY,CAC/G3/C,EAAGtD,MAAQsD,EAAGtD,MAAQ,GAAKsjD,EAC3BD,EAAYnhD,EAAQ,EACvB,CACA,CAECoB,EAAGuR,iBAAiB,WAAW,SAAUC,GACxC,IAAI5S,EAAQoB,EAAGtD,MAAMM,OACjBijD,EAAOzuC,EAAE3P,IAEb,GAAI2P,EAAE0uC,QAAU,GAAI,CACnB,GAAIthD,GAAS4gD,EAAKxiD,OAAQ,CACzBwU,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACX,KAAU,CACN,OAAQsrC,EAAK5gD,IACZ,KAAK6gD,EACJ,GAAIQ,EAAK5R,eAAiB4R,EAAK3T,cAAe,CAC7C96B,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACd,CACM,MAED,KAAKyrC,EACJ,GAAIphD,MAAM0hD,GAAO,CAChBzuC,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACd,CACM,MAED,KAAK2rC,EACJ,MAED,QACC,GAAII,IAAST,EAAK5gD,GAAQ,CACzB4S,EAAEwgB,iBACFxgB,EAAE0C,kBAEF,OAAO,KACd,EAEA,CAGA,CAEE,MACF,IAEClU,EAAGuR,iBAAiB,SAAS,SAAUC,GACtC,GAAIA,EAAE0uC,QAAU,GAAI,CACnB,GAAI7/C,EAAQ8/C,aAAc,CACzBJ,EAAY//C,EAAGtD,MAAMM,OACzB,CACA,CACA,IAEC,IAAKgD,EAAG+jB,YAAa,CACpB/jB,EAAG+jB,YAAcy7B,CACnB,CAEC,GAAIn/C,EAAQ8/C,aAAc,CACzBJ,EAAY//C,EAAGtD,MAAMM,OACvB,CACA,EAEA6gD,EAAKxhD,UAAUiqC,eAAiB,WAC/B,IAAIngC,EAAS,GAEbvJ,KAAKqhD,YAAY77C,SAAQ,SAAU8F,GAClC/B,EAAOhE,KAAK+F,EAAK1B,eACnB,IAEC,OAAOL,CACR,EAEA03C,EAAKxhD,UAAUk0B,YAAc,SAAUroB,GACtC,IAAIk4C,EAEJ,GAAIl4C,EAAK9G,QAAQ6R,MAAQ/K,EAAK9G,QAAQ6R,KAAKqd,OAAQ,CAClDpoB,EAAK9G,QAAQ6R,KAAKqd,OAAS,MAE3B,GAAIpoB,EAAK9G,QAAQuL,SAAU,CAC1BzE,EAAK9G,QAAQuL,SAAS4K,QAAU,KACnC,CACA,CAEC6oC,EAAYxjD,KAAKqhD,YAAYpgD,QAAQqK,GAErC,GAAIk4C,GAAa,EAAG,CACnBxjD,KAAKqhD,YAAYr6C,OAAOw8C,EAAW,EACrC,CACA,EAGAvC,EAAKxhD,UAAU+hD,QAAU,CAGxB7d,MAAO,SAASA,EAAMr4B,EAAM0M,EAAYyqC,EAASf,EAAQH,GAGxD,IAAIkC,EAAYn4C,EAAK6M,WACjBwrB,EAAQtgC,SAASC,cAAc,SAEnCqgC,EAAMhxB,aAAa,OAAQ4uC,EAAazgD,OAAS,SAAW,QAE5D6iC,EAAMt/B,MAAMq/C,QAAU,MACtB/f,EAAMt/B,MAAMyF,MAAQ,OACpB65B,EAAMt/B,MAAMs/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBse,EAAMhxB,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GAC5F,KAAW,CACN0+B,EAAMhxB,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC5D,CACA,CACA,CAEE0+B,EAAM7jC,aAAe2jD,IAAc,YAAcA,EAAY,GAE7DzrC,GAAW,WACV2rB,EAAMpsB,MAAM,CAAEuqC,cAAe,OAC7Bne,EAAMt/B,MAAMsD,OAAS,MACxB,IAEE,SAASm8C,EAASlvC,GACjB,IAAK6uC,IAAc,aAAeA,IAAc,cAAgB9f,EAAM7jC,QAAU,IAAM6jC,EAAM7jC,QAAU2jD,EAAW,CAChH,GAAIhB,EAAQ9e,EAAM7jC,OAAQ,CACzB2jD,EAAY9f,EAAM7jC,KACvB,CACA,KAAU,CACN4hD,GACJ,CACA,CAGE/d,EAAMhvB,iBAAiB,SAAUmvC,GACjCngB,EAAMhvB,iBAAiB,OAAQmvC,GAG/BngB,EAAMhvB,iBAAiB,WAAW,SAAUC,GAC3C,OAAQA,EAAE0uC,SAET,KAAK,GACJQ,IACA,MAED,KAAK,GACJpC,IACA,MAED,KAAK,GACL,KAAK,GACJ9sC,EAAE0C,kBACF,MAEL,IAEE,GAAIiqC,EAAaqB,KAAM,CACtB5iD,KAAKuC,MAAMiC,QAAQ6R,KAAKssC,UAAUhf,EAAO4d,EAC5C,CAEE,OAAO5d,CACT,EAGCogB,SAAU,SAASA,EAASz4C,EAAM0M,EAAYyqC,EAASf,EAAQH,GAC3D,IACCkC,EAAYn4C,EAAK6M,WACjB6rC,EAAUzC,EAAa0C,oBAAsB,SAC7CnkD,EAAQc,OAAO6iD,IAAc,aAAeA,IAAc,YAAcA,EAAY,KAC3E3jD,EAAMwF,MAAM,oBAAsB,IAAIlF,OAAS,EAC9D,IAAMujC,EAAQtgC,SAASC,cAAc,YAC/BsJ,EAAe,EAGnB+2B,EAAMt/B,MAAMoV,QAAU,QACtBkqB,EAAMt/B,MAAMq/C,QAAU,MACtB/f,EAAMt/B,MAAMsD,OAAS,OACrBg8B,EAAMt/B,MAAMyF,MAAQ,OACpB65B,EAAMt/B,MAAMs/C,UAAY,aACxBhgB,EAAMt/B,MAAM6/C,WAAa,WACzBvgB,EAAMt/B,MAAM8/C,OAAS,OAErB,GAAI5C,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBse,EAAMhxB,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GAC5F,KAAW,CACN0+B,EAAMhxB,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC5D,CACA,CACA,CAEE0+B,EAAM7jC,MAAQA,EAEdkY,GAAW,WACV2rB,EAAMpsB,MAAM,CAAEuqC,cAAe,OAC7Bne,EAAMt/B,MAAMsD,OAAS,OAGrBg8B,EAAMt/B,MAAMsD,OAASg8B,EAAM/2B,aAAe,KAC1CtB,EAAK4nB,SAAS/K,iBACjB,IAEE,SAAS27B,EAASlvC,GAEjB,IAAK6uC,IAAc,aAAeA,IAAc,cAAgB9f,EAAM7jC,QAAU,IAAM6jC,EAAM7jC,QAAU2jD,EAAW,CAEhH,GAAIhB,EAAQ9e,EAAM7jC,OAAQ,CACzB2jD,EAAY9f,EAAM7jC,KACvB,CAEIyV,YAAW,WACVjK,EAAK4nB,SAAS/K,iBACnB,GAAO,IACP,KAAU,CACNu5B,GACJ,CACA,CAGE/d,EAAMhvB,iBAAiB,SAAUmvC,GACjCngB,EAAMhvB,iBAAiB,OAAQmvC,GAE/BngB,EAAMhvB,iBAAiB,SAAS,WAE/BgvB,EAAMt/B,MAAMsD,OAAS,GAErB,IAAIy8C,EAAYzgB,EAAM/2B,aAEtB+2B,EAAMt/B,MAAMsD,OAASy8C,EAAY,KAEjC,GAAIA,GAAax3C,EAAc,CAC9BA,EAAew3C,EACf94C,EAAK4nB,SAAS/K,iBAClB,CACA,IAEEwb,EAAMhvB,iBAAiB,WAAW,SAAUC,GAE3C,OAAQA,EAAE0uC,SACT,KAAK,GACJ5B,IACA,MAED,KAAK,GAEJ,GAAIsC,GAAW,UAAYA,GAAW,UAAYrgB,EAAM0gB,eAAgB,CACvEzvC,EAAE0vC,2BACF1vC,EAAE0C,iBACR,CAEK,MAED,KAAK,GAEJ,GAAI0sC,GAAW,UAAYA,GAAW,UAAYrgB,EAAM0gB,iBAAmB1gB,EAAM7jC,MAAMM,OAAQ,CAC9FwU,EAAE0vC,2BACF1vC,EAAE0C,iBACR,CACK,MAED,KAAK,GACL,KAAK,GACJ1C,EAAE0C,kBACF,MAEL,IAEE,GAAIiqC,EAAaqB,KAAM,CACtB5iD,KAAKuC,MAAMiC,QAAQ6R,KAAKssC,UAAUhf,EAAO4d,EAC5C,CAEE,OAAO5d,CACT,EAGC4gB,OAAQ,SAASA,EAAOj5C,EAAM0M,EAAYyqC,EAASf,EAAQH,GAE1D,IAAIkC,EAAYn4C,EAAK6M,WACjB6rC,EAAUzC,EAAa0C,oBAAsB,SAC7CtgB,EAAQtgC,SAASC,cAAc,SAEnCqgC,EAAMhxB,aAAa,OAAQ,UAE3B,UAAW4uC,EAAajgD,KAAO,YAAa,CAC3CqiC,EAAMhxB,aAAa,MAAO4uC,EAAajgD,IAC1C,CAEE,UAAWigD,EAAan1C,KAAO,YAAa,CAC3Cu3B,EAAMhxB,aAAa,MAAO4uC,EAAan1C,IAC1C,CAEE,UAAWm1C,EAAaiD,MAAQ,YAAa,CAC5C7gB,EAAMhxB,aAAa,OAAQ4uC,EAAaiD,KAC3C,CAGE7gB,EAAMt/B,MAAMq/C,QAAU,MACtB/f,EAAMt/B,MAAMyF,MAAQ,OACpB65B,EAAMt/B,MAAMs/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBse,EAAMhxB,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GAC5F,KAAW,CACN0+B,EAAMhxB,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC5D,CACA,CACA,CAEE0+B,EAAM7jC,MAAQ2jD,EAEd,IAAIgB,EAAW,SAASA,EAAS7vC,GAChCkvC,GACH,EAEE9rC,GAAW,WAEV2rB,EAAM+gB,oBAAoB,OAAQD,GAElC9gB,EAAMpsB,MAAM,CAAEuqC,cAAe,OAC7Bne,EAAMt/B,MAAMsD,OAAS,OAGrBg8B,EAAMhvB,iBAAiB,OAAQ8vC,EAClC,IAEE,SAASX,IACR,IAAIhkD,EAAQ6jC,EAAM7jC,MAElB,IAAK6B,MAAM7B,IAAUA,IAAU,GAAI,CAClCA,EAAQk4C,OAAOl4C,EACnB,CAEG,GAAIA,IAAU2jD,EAAW,CACxB,GAAIhB,EAAQ3iD,GAAQ,CACnB2jD,EAAY3jD,CACjB,CACA,KAAU,CACN4hD,GACJ,CACA,CAGE/d,EAAMhvB,iBAAiB,WAAW,SAAUC,GAC3C,OAAQA,EAAE0uC,SACT,KAAK,GAEJQ,IACA,MAED,KAAK,GACJpC,IACA,MAED,KAAK,GACL,KAAK,GAEJ,GAAIsC,GAAW,SAAU,CACxBpvC,EAAE0vC,2BACF1vC,EAAE0C,iBACR,CACK,MAED,KAAK,GACL,KAAK,GACJ1C,EAAE0C,kBACF,MAEL,IAEE,GAAIiqC,EAAaqB,KAAM,CACtB5iD,KAAKuC,MAAMiC,QAAQ6R,KAAKssC,UAAUhf,EAAO4d,EAC5C,CAEE,OAAO5d,CACT,EAGCrO,MAAO,SAASA,EAAMhqB,EAAM0M,EAAYyqC,EAASf,EAAQH,GAExD,IAAIkC,EAAYn4C,EAAK6M,WACjBwrB,EAAQtgC,SAASC,cAAc,SAEnCqgC,EAAMhxB,aAAa,OAAQ,SAE3B,UAAW4uC,EAAajgD,KAAO,YAAa,CAC3CqiC,EAAMhxB,aAAa,MAAO4uC,EAAajgD,IAC1C,CAEE,UAAWigD,EAAan1C,KAAO,YAAa,CAC3Cu3B,EAAMhxB,aAAa,MAAO4uC,EAAan1C,IAC1C,CAEE,UAAWm1C,EAAaiD,MAAQ,YAAa,CAC5C7gB,EAAMhxB,aAAa,OAAQ4uC,EAAaiD,KAC3C,CAGE7gB,EAAMt/B,MAAMq/C,QAAU,MACtB/f,EAAMt/B,MAAMyF,MAAQ,OACpB65B,EAAMt/B,MAAMs/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBse,EAAMhxB,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GAC5F,KAAW,CACN0+B,EAAMhxB,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC5D,CACA,CACA,CAEE0+B,EAAM7jC,MAAQ2jD,EAEdzrC,GAAW,WACV2rB,EAAMpsB,MAAM,CAAEuqC,cAAe,OAC7Bne,EAAMt/B,MAAMsD,OAAS,MACxB,IAEE,SAASm8C,IACR,IAAIhkD,EAAQ6jC,EAAM7jC,MAElB,IAAK6B,MAAM7B,IAAUA,IAAU,GAAI,CAClCA,EAAQk4C,OAAOl4C,EACnB,CAEG,GAAIA,GAAS2jD,EAAW,CACvB,GAAIhB,EAAQ3iD,GAAQ,CACnB2jD,EAAY3jD,CACjB,CACA,KAAU,CACN4hD,GACJ,CACA,CAGE/d,EAAMhvB,iBAAiB,QAAQ,SAAUC,GACxCkvC,GACH,IAGEngB,EAAMhvB,iBAAiB,WAAW,SAAUC,GAC3C,OAAQA,EAAE0uC,SACT,KAAK,GAEJQ,IACA,MAED,KAAK,GACJpC,IACA,MAEL,IAEE,OAAO/d,CACT,EAGCnW,OAAQ,SAASA,EAAOliB,EAAM0M,EAAYyqC,EAASf,EAAQH,GAC1D,IAAIoD,EAAU3kD,KAEd,IAAI2F,EAAO3F,KACP2hD,EAASr2C,EAAKxH,aACdmvB,EAAe3nB,EAAK6M,WACpB6rC,EAAUzC,EAAa0C,oBAAsB,SAC7CW,SAA6B3xB,IAAiB,aAAeA,IAAiB,KAAOvzB,MAAM2F,QAAQ4tB,GAAgBA,EAAe,CAACA,UAAuBsuB,EAAasD,eAAiB,YAActD,EAAasD,aAAe,GAClOlhB,EAAQtgC,SAASC,cAAc,SAC/BwhD,EAASzhD,SAASC,cAAc,OAChCyhD,EAAcxD,EAAawD,YAC3BC,EAAY,GACZC,EAAc,GACdC,EAAe,GACfC,EAAe,GACfC,EAAW,KACXC,EAAgB,MAChBC,EAAa,GACbC,EAAoB,KAExB,GAAI7lD,MAAM2F,QAAQk8C,KAAkB7hD,MAAM2F,QAAQk8C,YAAyBA,IAAiB,YAAc,YAAcniD,EAAQmiD,MAAmB,WAAaA,EAAahY,OAAQ,CACpLl9B,QAAQC,KAAK,6JACbi1C,EAAe,CAAEhY,OAAQgY,EAC5B,CAEE,SAASiE,EAAsBrgD,GAC9B,IAAIoE,EAAS,GACT5E,EAAOgB,EAAKpD,MAAMye,UAClBva,EAEJ,GAAItB,EAAO,CACVsB,EAASd,EAAKpD,MAAMmI,cAAcpC,iBAAiBnD,EACvD,KAAU,CACNsB,EAAS6E,EAAK6nB,YAAY/qB,UAC9B,CAEG,GAAI3B,EAAQ,CACX9B,EAAKa,SAAQ,SAAUT,GACtB,IAAIgxB,EAAMtvB,EAAOgK,cAAc1L,GAE/B,GAAIgxB,IAAQ,aAAeA,IAAQ,aAAeA,IAAQ,GAAI,CAC7DxsB,EAAOwsB,GAAO,IACpB,CACA,GACA,KAAU,CACN1pB,QAAQC,KAAK,+DAAgEnH,EACjF,CAEG,OAAOvF,OAAO+I,KAAKY,EACtB,CAEE,SAASk8C,EAAWC,EAAaC,GAChC,IAAIC,EAAW,GACf,IAAIC,EAAc,GAElB,SAASC,EAAuBpkC,GAC/B,IAAIA,EAAO,CACVqkC,MAAOrkC,EAAKqkC,MACZjmD,MAAO4hB,EAAK5hB,MACZkmD,WAAYtkC,EAAKskC,WACjBpC,kBAAmBliC,EAAKkiC,kBACxBjhD,QAAS,OAOV,GAAIgjD,EAAa1kD,QAAQygB,EAAK5hB,QAAU,EAAG,CAC1CmmD,EAAQvkC,EACb,CAEIkkC,EAASrgD,KAAKmc,GACdmkC,EAAYtgD,KAAKmc,GAEjB,OAAOA,CACX,CAEG,UAAWgkC,GAAe,WAAY,CACrCA,EAAcA,EAAYp6C,EAC9B,CAEG,GAAI5L,MAAM2F,QAAQqgD,GAAc,CAC/BA,EAAYlgD,SAAQ,SAAU1F,GAC7B,IAAI4hB,EAEJ,WAAY5hB,IAAU,YAAc,YAAcV,EAAQU,MAAY,SAAU,CAE/E,GAAIA,EAAM2D,QAAS,CAClBie,EAAO,CACNqkC,MAAOjmD,EAAMimD,MACb16B,MAAO,KACP26B,WAAYlmD,EAAMkmD,WAClBpC,kBAAmB9jD,EAAM8jD,kBACzBjhD,QAAS,OAGVkjD,EAAYtgD,KAAKmc,GAEjB5hB,EAAM2D,QAAQ+B,SAAQ,SAAUkc,GAC/BokC,EAAuBpkC,EAC/B,GACA,KAAa,CACNokC,EAAuBhmD,EAC9B,CACA,KAAY,CAEN4hB,EAAO,CACNqkC,MAAOjmD,EACPA,MAAOA,EACP6C,QAAS,OAOV,GAAIgjD,EAAa1kD,QAAQygB,EAAK5hB,QAAU,EAAG,CAC1CmmD,EAAQvkC,EACf,CAEMkkC,EAASrgD,KAAKmc,GACdmkC,EAAYtgD,KAAKmc,EACvB,CACA,GACA,KAAU,CACN,IAAK,IAAIzc,KAAOygD,EAAa,CAC5B,IAAIhkC,EAAO,CACVqkC,MAAOL,EAAYzgD,GACnBnF,MAAOmF,EACPtC,QAAS,OAOV,GAAIgjD,EAAa1kD,QAAQygB,EAAK5hB,QAAU,EAAG,CAC1CmmD,EAAQvkC,EACd,CAEKkkC,EAASrgD,KAAKmc,GACdmkC,EAAYtgD,KAAKmc,EACtB,CACA,CAEG,GAAI6/B,EAAa2E,eAAgB,CAChCN,EAAS/vC,MAAK,SAAUiwB,EAAGC,GAC1B,OAAOD,EAAEigB,MAAQhgB,EAAEggB,OAAS,EAAIjgB,EAAEigB,MAAQhgB,EAAEggB,MAAQ,EAAI,CAC7D,IAEIF,EAAYhwC,MAAK,SAAUiwB,EAAGC,GAC7B,OAAOD,EAAEigB,MAAQhgB,EAAEggB,OAAS,EAAIjgB,EAAEigB,MAAQhgB,EAAEggB,MAAQ,EAAI,CAC7D,IAEI,GAAIxE,EAAa2E,iBAAmB,MAAO,CAC1CN,EAASnkC,UACTokC,EAAYpkC,SACjB,CACA,CAEGujC,EAAYY,EACZV,EAAeW,EAEfM,GACH,CAEE,SAASA,IACR,MAAOrB,EAAO3hD,WAAY,CACzB2hD,EAAOl/C,YAAYk/C,EAAO3hD,WAC9B,CAAI+hD,EAAa1/C,SAAQ,SAAUkc,GAE/B,IAAIte,EAAKse,EAAK/e,QAEd,IAAKS,EAAI,CACRA,EAAKC,SAASC,cAAc,OAC5Boe,EAAKqkC,MAAQxE,EAAa6E,kBAAoB7E,EAAa6E,kBAAkB1kC,EAAK5hB,MAAO4hB,EAAKqkC,MAAOz6C,EAAMlI,EAAIse,EAAKskC,YAActkC,EAAKqkC,MACvI,GAAIrkC,EAAK2J,MAAO,CACfjoB,EAAGG,UAAUC,IAAI,oCACjBJ,EAAG03C,SAAW,EACd13C,EAAGkV,UAAYoJ,EAAKqkC,QAAU,GAAK,SAAWrkC,EAAKqkC,KACzD,KAAY,CACN3iD,EAAGG,UAAUC,IAAI,mCACjBJ,EAAG03C,SAAW,EACd13C,EAAGkV,UAAYoJ,EAAKqkC,QAAU,GAAK,SAAWrkC,EAAKqkC,MAEnD3iD,EAAGuR,iBAAiB,SAAS,WAC5B0wC,EAAgB,KAEhB9vC,YAAW,WACV8vC,EAAgB,KACxB,GAAU,IAIH,GAAIN,EAAa,CAChBsB,EAAW3kC,GACXiiB,EAAMpsB,OACd,KAAc,CACN+uC,EAAW5kC,EACnB,CACA,IAMM,GAAIyjC,EAAalkD,QAAQygB,IAAS,EAAG,CACpCte,EAAGG,UAAUC,IAAI,SACxB,CACA,CAEK,GAAIke,EAAKkiC,mBAAqBxkD,EAAQsiB,EAAKkiC,oBAAsB,SAAU,CAC1E,IAAK,IAAI3+C,KAAOyc,EAAKkiC,kBAAmB,CACvC,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBjiB,EAAGuP,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOyc,EAAKkiC,kBAAkB,IAAM3+C,GACpF,KAAc,CACN7B,EAAGuP,aAAa1N,EAAKyc,EAAKkiC,kBAAkB3+C,GACpD,CACA,CACA,CACK7B,EAAGuR,iBAAiB,aAAa,WAChCywC,EAAW,MAEX7vC,YAAW,WACV6vC,EAAW,IAClB,GAAS,GACT,IAEK1jC,EAAK/e,QAAUS,CACpB,CAEI0hD,EAAO19C,YAAYhE,EACvB,GACA,CAEE,SAASmjD,EAAe7kC,EAAMpY,GAE7B,IAAKy7C,GAAeE,GAAeA,EAAYtiD,QAAS,CACvDsiD,EAAYtiD,QAAQY,UAAUmkB,OAAO,SACzC,CAEG,GAAIu9B,GAAeA,EAAYtiD,QAAS,CACvCsiD,EAAYtiD,QAAQY,UAAUmkB,OAAO,UACzC,CAEGu9B,EAAcvjC,EAEd,GAAIA,EAAK/e,QAAS,CACjB+e,EAAK/e,QAAQY,UAAUC,IAAI,WAC3B,GAAI8F,EAAQ,CACXoY,EAAK/e,QAAQY,UAAUC,IAAI,SAChC,CACA,CAEG,GAAIke,GAAQA,EAAK/e,SAAW+e,EAAK/e,QAAQ6jD,eAAgB,CACxD9kC,EAAK/e,QAAQ6jD,eAAe,CAAEC,SAAU,SAAUr1B,MAAO,UAAWs1B,OAAQ,SAChF,CACA,CAaE,SAAST,EAAQvkC,GAChB,IAAI1f,EAAQmjD,EAAalkD,QAAQygB,GAEjC,GAAI1f,IAAU,EAAG,CAChBmjD,EAAa5/C,KAAKmc,GAClB6kC,EAAe7kC,EAAM,KACzB,CAEGilC,GACH,CAEE,SAASC,EAAU5kD,GAClB,IAAI0f,EAAOyjC,EAAanjD,GAExB,GAAIA,GAAS,EAAG,CACfmjD,EAAan+C,OAAOhF,EAAO,GAC3B,GAAI0f,EAAK/e,QAAS,CACjB+e,EAAK/e,QAAQY,UAAUmkB,OAAO,SACnC,CACA,CACA,CAEE,SAAS2+B,EAAW3kC,GACnB,IAAKA,EAAM,CACVA,EAAOujC,CACX,CAEG,IAAIjjD,EAAQmjD,EAAalkD,QAAQygB,GAEjC,GAAI1f,GAAS,EAAG,CACf4kD,EAAU5kD,EACd,KAAU,CACN,GAAI+iD,IAAgB,MAAQI,EAAa/kD,QAAU2kD,EAAa,CAC/D6B,EAAU,EACf,CAEIX,EAAQvkC,EACZ,CAEGilC,GACH,CAEE,SAASL,EAAW5kC,GACnBmlC,IAEA,IAAKnlC,EAAM,CACVA,EAAOujC,CACX,CAEG,GAAIvjC,EAAM,CACTiiB,EAAM7jC,MAAQ4hB,EAAKqkC,MACnBtD,EAAQ/gC,EAAK5hB,MACjB,CAEG8kD,EAAsB,CAACljC,EAAK5hB,MAC/B,CAEE,SAASgnD,EAAYvtC,GACpB,IAAKA,EAAQ,CACZstC,GACJ,CAEG,IAAIt9C,EAAS,GAEb47C,EAAa3/C,SAAQ,SAAUkc,GAC9BnY,EAAOhE,KAAKmc,EAAK5hB,MACrB,IAEG8kD,EAAsBr7C,EAEtBk5C,EAAQl5C,EACX,CAEE,SAASo9C,IACR,IAAIp9C,EAAS,GAEb47C,EAAa3/C,SAAQ,SAAUkc,GAC9BnY,EAAOhE,KAAKmc,EAAKqkC,MACrB,IAEGpiB,EAAM7jC,MAAQyJ,EAAOmqC,KAAK,MAE1B,GAAI/tC,EAAK4U,cAAgB,MAAO,CAC/BusC,EAAY,KAChB,CACA,CAEE,SAASC,IAER,IAAI5mD,EAAMglD,EAAa/kD,OAEvB,IAAK,IAAI4mD,EAAM,EAAGA,EAAM7mD,EAAK6mD,IAAO,CACnCJ,EAAU,EACd,CACA,CAEE,SAASK,IACRJ,IACAnF,GACH,CAEE,SAASwF,IACR/B,EAAe,GAEf,IAAKL,EAAO79C,WAAY,CACvB,GAAIs6C,EAAahY,SAAW,KAAM,CACjCkc,EAAWD,IAAyBZ,EACzC,MAAW,UAAWrD,EAAahY,SAAW,SAAU,CACnDkc,EAAWD,EAAsBjE,EAAahY,QAASqb,EAC5D,KAAW,CACNa,EAAWlE,EAAahY,QAAU,GAAIqb,EAC3C,CAEI,IAAIj5C,EAAS+B,EAAUjO,UAAUkO,QAAQoR,SAAS4iC,GAElDmD,EAAOzgD,MAAMyI,SAAW60C,EAAOx1C,YAAc,KAE7C24C,EAAOzgD,MAAMsZ,IAAMhS,EAAOgS,IAAMgkC,EAAO5oC,aAAe,KACtD+rC,EAAOzgD,MAAMJ,KAAO0H,EAAO1H,KAAO,KAElC6gD,EAAOnwC,iBAAiB,aAAa,SAAUC,GAC9CwwC,EAAW,MAEX7vC,YAAW,WACV6vC,EAAW,IACjB,GAAQ,GACR,IAEI/hD,SAASkyB,KAAKnuB,YAAY09C,EAC9B,CACA,CAEE,SAAS+B,IACR,GAAI/B,EAAO79C,WAAY,CACtB69C,EAAO79C,WAAWrB,YAAYk/C,EAClC,CAEGqC,GACH,CAEE,SAASA,IACRxhD,EAAKpD,MAAMM,WAAWF,QAAQ+hD,oBAAoB,SAAUuC,EAC/D,CAEE,SAASG,EAAc/D,GAEtB/tC,aAAaiwC,GAEb,IAAI8B,EAAYzmD,OAAO0mD,aAAa19B,MAAM05B,SAAS5T,cACnD4V,GAAc+B,EAAU3X,cAExB,IAAIpqC,EAAQ0/C,EAAUtkD,MAAK,SAAUghB,GACpC,cAAcA,EAAKqkC,QAAU,aAAerkC,EAAKqkC,MAAMrW,cAAc6X,WAAWjC,EACpF,IAEG,GAAIhgD,EAAO,CACVihD,EAAejhD,GAAQy/C,EAC3B,CAEGQ,EAAoBhwC,YAAW,WAC9B+vC,EAAa,EACjB,GAAM,IACN,CAGE3hB,EAAMhxB,aAAa,OAAQ,QAE3BgxB,EAAMt/B,MAAMq/C,QAAU,MACtB/f,EAAMt/B,MAAMyF,MAAQ,OACpB65B,EAAMt/B,MAAMs/C,UAAY,aACxBhgB,EAAMt/B,MAAMmjD,OAAS,UACrB7jB,EAAM8jB,SAAWznD,KAAKua,aAAe,MAErC,GAAIgnC,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBse,EAAMhxB,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GAC5F,KAAW,CACN0+B,EAAMhxB,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC5D,CACA,CACA,CAEE0+B,EAAM7jC,aAAemzB,IAAiB,aAAeA,IAAiB,KAAOA,EAAe,GAU5F0Q,EAAMhvB,iBAAiB,UAAU,SAAUC,GAC1C,IAAK+uB,EAAM7jC,MAAO,CACjBinD,IACAD,GACJ,CACA,IAGEnjB,EAAMhvB,iBAAiB,WAAW,SAAUC,GAC3C,IAAI5S,EAEJ,OAAQ4S,EAAE0uC,SACT,KAAK,GAEJthD,EAAQgjD,EAAU/jD,QAAQgkD,GAE1B,GAAIjB,GAAW,UAAYA,GAAW,UAAYhiD,EAAO,CACxD4S,EAAE0vC,2BACF1vC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAIpzB,EAAQ,EAAG,CACdukD,EAAevB,EAAUhjD,EAAQ,IAAK+iD,EAC7C,CACA,CACK,MAED,KAAK,GAEJ/iD,EAAQgjD,EAAU/jD,QAAQgkD,GAE1B,GAAIjB,GAAW,UAAYA,GAAW,UAAYhiD,EAAQgjD,EAAU5kD,OAAS,EAAG,CAC/EwU,EAAE0vC,2BACF1vC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAIpzB,EAAQgjD,EAAU5kD,OAAS,EAAG,CACjC,GAAI4B,IAAU,EAAG,CAChBukD,EAAevB,EAAU,IAAKD,EACtC,KAAc,CACNwB,EAAevB,EAAUhjD,EAAQ,IAAK+iD,EAC9C,CACA,CACA,CACK,MAED,KAAK,GACL,KAAK,GAEJnwC,EAAE0vC,2BACF1vC,EAAE0C,kBACF1C,EAAEwgB,iBACF,MAED,KAAK,GAIJ,GAAI2vB,EAAa,CAChBsB,GACN,KAAY,CACNC,GACN,CAEK,MAED,KAAK,GAEJW,IACA,MAED,KAAK,EAEJ,MAED,QACC,GAAIthD,EAAK4U,cAAgB,MAAO,CAC/B3F,EAAEwgB,gBACR,CAEK,GAAIxgB,EAAE0uC,SAAW,IAAM1uC,EAAE0uC,SAAW,GAAI,CACvC8D,GACN,EAEA,IAEEzjB,EAAMhvB,iBAAiB,QAAQ,SAAUC,GACxC,GAAIwwC,EAAU,CACb,GAAIL,EAAa,CAChB+B,GACL,KAAW,CACNG,GACL,CACA,CACA,IAEEtjB,EAAMhvB,iBAAiB,SAAS,SAAUC,GACzC,IAAKywC,EAAe,CACnB6B,GACJ,CACA,IAGEpC,EAASzhD,SAASC,cAAc,OAChCwhD,EAAOvhD,UAAUC,IAAI,8BAErBwU,GAAW,WACV2rB,EAAMt/B,MAAMsD,OAAS,OACrBg8B,EAAMpsB,MAAM,CAAEuqC,cAAe,MAChC,IAEEvsC,YAAW,WACVovC,EAAQpiD,MAAMM,WAAWF,QAAQgS,iBAAiB,SAAUsyC,EAC/D,GAAK,IAEH,OAAOtjB,CACT,EAGC+jB,aAAc,SAASA,EAAap8C,EAAM0M,EAAYyqC,EAASf,EAAQH,GACtE,IAAIoG,EAAU3nD,KAEX,IAAC2F,EAAO3F,KACP2hD,EAASr2C,EAAKxH,aACdmvB,EAAe3nB,EAAK6M,WACpB6rC,EAAUzC,EAAa0C,oBAAsB,SAC7CW,SAA6B3xB,IAAiB,aAAeA,IAAiB,KAAOA,SAAsBsuB,EAAasD,eAAiB,YAActD,EAAasD,aAAe,GACnLlhB,EAAQtgC,SAASC,cAAc,SAC/BwhD,EAASzhD,SAASC,cAAc,OAEhC4hD,EAAe,GAEfD,EAAc,MACdG,EAAW,KACXwC,EAAqB,MAGzBjkB,EAAMhxB,aAAa,OAAQ,UAE3BgxB,EAAMt/B,MAAMq/C,QAAU,MACtB/f,EAAMt/B,MAAMyF,MAAQ,OACpB65B,EAAMt/B,MAAMs/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBse,EAAMhxB,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GAC5F,KAAW,CACN0+B,EAAMhxB,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC5D,CACA,CACA,CAGE6/C,EAAOvhD,UAAUC,IAAI,8BAErBshD,EAAOnwC,iBAAiB,aAAa,SAAUC,GAC9CwwC,EAAW,MAEX7vC,YAAW,WACV6vC,EAAW,IACf,GAAM,GACN,IAEE,SAASyC,IACR,GAAItG,EAAahY,SAAW,KAAM,CACjCqe,EAAqBpC,GACzB,MAAU,UAAWjE,EAAahY,SAAW,SAAU,CACnDqe,EAAqBpC,EAAsBjE,EAAahY,OAC5D,CACA,CAEE,SAASic,EAAsBrgD,GAC9B,IAAIoE,EAAS,GACT5E,EAAOgB,EAAKpD,MAAMye,UAClBva,EAEJ,GAAItB,EAAO,CACVsB,EAASd,EAAKpD,MAAMmI,cAAcpC,iBAAiBnD,EACvD,KAAU,CACNsB,EAAS6E,EAAK6nB,YAAY/qB,UAC9B,CAEG,GAAI3B,EAAQ,CACX9B,EAAKa,SAAQ,SAAUT,GACtB,IAAIgxB,EAAMtvB,EAAOgK,cAAc1L,GAE/B,GAAIgxB,IAAQ,aAAeA,IAAQ,aAAeA,IAAQ,GAAI,CAC7DxsB,EAAOwsB,GAAO,IACpB,CACA,IAEI,GAAIwrB,EAAa2E,eAAgB,CAChC,GAAI3E,EAAa2E,gBAAkB,MAAO,CACzC38C,EAAS3J,OAAO+I,KAAKY,GAAQsM,MACnC,KAAY,CACNtM,EAAS3J,OAAO+I,KAAKY,GAAQsM,OAAO4L,SAC1C,CACA,KAAW,CACNlY,EAAS3J,OAAO+I,KAAKY,EAC1B,CACA,KAAU,CACN8C,QAAQC,KAAK,qEAAsEnH,EACvF,CAEG,OAAOoE,CACV,CAEE,SAASu+C,EAAWC,EAAMC,GACtB,IAACt/C,EAAU,GACV6gC,EACA6G,EAIJ,GAAIwX,EAAoB,CACvBre,EAASqe,CACb,KAAU,CACNre,EAASgY,EAAahY,QAAU,EACpC,CAEG,GAAIgY,EAAa0G,WAAY,CAC5Bv/C,EAAU64C,EAAa0G,WAAWF,EAAMxe,GAExC,GAAI7gC,aAAmBmD,QAAS,CAE/Bq8C,SAAiB3G,EAAa4G,uBAAyB,YAAc5G,EAAa4G,qBAAuB,gBAEzGz/C,EAAQ0S,MAAK,SAAUtL,GACtBs4C,EAAmB3C,EAAW31C,GAASk4C,EAC7C,IAAQ3sC,OAAM,SAAUC,GAClBjP,QAAQiP,IAAI,wCAAyCA,EAC3D,GACA,KAAW,CACN8sC,EAAmB3C,EAAW/8C,GAAUs/C,EAC7C,CACA,KAAU,CACN5X,EAAQqV,EAAWlc,GAEnB,GAAIwe,IAAS,GAAI,CAChB,GAAIxG,EAAa8G,gBAAiB,CACjC3/C,EAAU0nC,CAChB,CACA,KAAW,CACNA,EAAM5qC,SAAQ,SAAUkc,GACvB,GAAIA,EAAK5hB,QAAU,aAAe4hB,EAAK5hB,QAAU,YAAa,CAC7D,GAAIc,OAAO8gB,EAAK5hB,OAAO4vC,cAAczuC,QAAQL,OAAOmnD,GAAMrY,gBAAkB,GAAK9uC,OAAO8gB,EAAKtc,OAAOsqC,cAAczuC,QAAQL,OAAOmnD,GAAMrY,gBAAkB,EAAG,CAC3JhnC,EAAQnD,KAAKmc,EACrB,CACA,CACA,GACA,CAEI0mC,EAAmB1/C,EAASs/C,EAChC,CACA,CAEE,SAASE,EAAUI,GAClB,IAAIC,EAAWllD,SAASC,cAAc,OAEtCklD,IAEA,GAAIF,IAAW,MAAO,CACrBC,EAAShlD,UAAUC,IAAI,qCACvB+kD,EAASzN,SAAW,EAEpB,GAAIwN,aAAkBjwC,KAAM,CAC3BkwC,EAASnhD,YAAYkhD,EAC1B,KAAW,CACNC,EAASjwC,UAAYgwC,CAC1B,CAEIxD,EAAO19C,YAAYmhD,EACvB,CACA,CAEE,SAAS9C,EAAWC,GACnB,IAAI+C,EAAW,GAEf,GAAI/oD,MAAM2F,QAAQqgD,GAAc,CAC/BA,EAAYlgD,SAAQ,SAAU1F,GAE7B,IAAI4hB,EAAO,GAEX,WAAY5hB,IAAU,YAAc,YAAcV,EAAQU,MAAY,SAAU,CAC/E4hB,EAAKtc,MAAQm8C,EAAa6E,kBAAoB7E,EAAa6E,kBAAkBtmD,EAAMA,MAAOA,EAAMimD,OAASjmD,EAAMimD,MAC/GrkC,EAAK5hB,MAAQA,EAAMA,KACzB,KAAY,CACN4hB,EAAKtc,MAAQm8C,EAAa6E,kBAAoB7E,EAAa6E,kBAAkBtmD,EAAOA,GAASA,EAC7F4hB,EAAK5hB,MAAQA,CACnB,CAEK2oD,EAASljD,KAAKmc,EACnB,GACA,KAAU,CACN,IAAK,IAAIzc,KAAOygD,EAAa,CAC5B,IAAIhkC,EAAO,CACVtc,MAAOm8C,EAAa6E,kBAAoB7E,EAAa6E,kBAAkBnhD,EAAKygD,EAAYzgD,IAAQygD,EAAYzgD,GAC5GnF,MAAOmF,GAGRwjD,EAASljD,KAAKmc,EACnB,CACA,CAEG,OAAO+mC,CACV,CAEE,SAASD,IACR,MAAO1D,EAAO3hD,WAAY,CACzB2hD,EAAOl/C,YAAYk/C,EAAO3hD,WAC9B,CACA,CAEE,SAASilD,EAAmBhY,EAAO4X,GAClC,GAAI5X,EAAMhwC,OAAQ,CACjB+lD,EAAS/V,EAAO4X,EACpB,KAAU,CACN,GAAIzG,EAAamH,iBAAkB,CAClCR,EAAU3G,EAAamH,iBAC5B,CACA,CACA,CAEE,SAASvC,EAAS/V,EAAO4X,GACxB,IAAIW,EAAU,MAEdH,IAEAtD,EAAe9U,EAEf8U,EAAa1/C,SAAQ,SAAUkc,GAC9B,IAAIte,EAAKse,EAAK/e,QAEd,IAAKS,EAAI,CACRA,EAAKC,SAASC,cAAc,OAC5BF,EAAGG,UAAUC,IAAI,mCACjBJ,EAAG03C,SAAW,EACd13C,EAAGkV,UAAYoJ,EAAKtc,MAEpBhC,EAAGuR,iBAAiB,SAAS,SAAUC,GACtC2xC,EAAe7kC,GACf4kC,GACN,IAEKljD,EAAGuR,iBAAiB,aAAa,SAAUC,GAC1CwwC,EAAW,MAEX7vC,YAAW,WACV6vC,EAAW,IAClB,GAAS,GACT,IAEK1jC,EAAK/e,QAAUS,EAEf,GAAI4kD,GAActmC,EAAK5hB,OAASmzB,EAAc,CAC7C0Q,EAAM7jC,MAAQ4hB,EAAKtc,MACnBsc,EAAK/e,QAAQY,UAAUC,IAAI,UAC3BmlD,EAAU,IAChB,CAEK,GAAIjnC,IAASujC,EAAa,CACzBvjC,EAAK/e,QAAQY,UAAUC,IAAI,UAC3BmlD,EAAU,IAChB,CACA,CAEI7D,EAAO19C,YAAYhE,EACvB,IAEG,IAAKulD,EAAS,CACbpC,EAAe,MACnB,CACA,CAEE,SAASD,IACRO,IAEA,GAAI5B,EAAa,CAChB,GAAIhyB,IAAiBgyB,EAAYnlD,MAAO,CACvCmzB,EAAegyB,EAAYnlD,MAC3B6jC,EAAM7jC,MAAQmlD,EAAY7/C,MAC1Bq9C,EAAQwC,EAAYnlD,MACzB,KAAW,CACN4hD,GACL,CACA,KAAU,CACN,GAAIH,EAAaqH,SAAU,CAC1B31B,EAAe0Q,EAAM7jC,MACrB2iD,EAAQ9e,EAAM7jC,MACnB,KAAW,CACN,GAAIyhD,EAAasH,YAAcllB,EAAM7jC,QAAU,GAAI,CAClDmzB,EAAe0Q,EAAM7jC,MACrB2iD,EAAQ9e,EAAM7jC,MACpB,KAAY,CACN4hD,GACN,CACA,CACA,CACA,CAEE,SAASwF,IACR,IAAKpC,EAAO79C,WAAY,CAEvBoF,QAAQy8C,IAAI,OAAQlE,GACpB,MAAOE,EAAO3hD,WAAY,CACzB2hD,EAAOl/C,YAAYk/C,EAAO3hD,WAC/B,CAAK,IAAIwI,EAAS+B,EAAUjO,UAAUkO,QAAQoR,SAAS4iC,GAEnDmD,EAAOzgD,MAAMyI,SAAW60C,EAAOx1C,YAAc,KAE7C24C,EAAOzgD,MAAMsZ,IAAMhS,EAAOgS,IAAMgkC,EAAO5oC,aAAe,KACtD+rC,EAAOzgD,MAAMJ,KAAO0H,EAAO1H,KAAO,KAClCZ,SAASkyB,KAAKnuB,YAAY09C,EAC9B,CACA,CAEE,SAASyB,EAAe7kC,EAAMqnC,GAC7B,GAAI9D,GAAeA,EAAYtiD,QAAS,CACvCsiD,EAAYtiD,QAAQY,UAAUmkB,OAAO,SACzC,CAEGu9B,EAAcvjC,EAEd,GAAIA,GAAQA,EAAK/e,QAAS,CACzB+e,EAAK/e,QAAQY,UAAUC,IAAI,SAC/B,CAEG,GAAIke,GAAQA,EAAK/e,SAAW+e,EAAK/e,QAAQ6jD,eAAgB,CACxD9kC,EAAK/e,QAAQ6jD,eAAe,CAAEC,SAAU,SAAUr1B,MAAO,UAAWs1B,OAAQ,SAChF,CACA,CAEE,SAASG,IACR,GAAI/B,EAAO79C,WAAY,CACtB69C,EAAO79C,WAAWrB,YAAYk/C,EAClC,CAEGqC,GACH,CAEE,SAASF,IACRJ,IACAnF,GACH,CAEE,SAASyF,IACRxhD,EAAKpD,MAAMM,WAAWF,QAAQ+hD,oBAAoB,SAAUuC,EAC/D,CAGEtjB,EAAMhvB,iBAAiB,WAAW,SAAUC,GAC3C,IAAI5S,EAEJ,OAAQ4S,EAAE0uC,SACT,KAAK,GAEJthD,EAAQkjD,EAAajkD,QAAQgkD,GAE7B,GAAIjB,GAAW,UAAYA,GAAW,UAAYhiD,EAAO,CACxD4S,EAAE0vC,2BACF1vC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAIpzB,EAAQ,EAAG,CACdukD,EAAerB,EAAaljD,EAAQ,GAC3C,KAAa,CACNukD,EAAe,MACtB,CACA,CACK,MAED,KAAK,GAGJvkD,EAAQkjD,EAAajkD,QAAQgkD,GAE7B,GAAIjB,GAAW,UAAYA,GAAW,UAAYhiD,EAAQkjD,EAAa9kD,OAAS,EAAG,CAElFwU,EAAE0vC,2BACF1vC,EAAE0C,kBACF1C,EAAEwgB,iBAEF,GAAIpzB,EAAQkjD,EAAa9kD,OAAS,EAAG,CACpC,GAAI4B,IAAU,EAAG,CAChBukD,EAAerB,EAAa,GACpC,KAAc,CACNqB,EAAerB,EAAaljD,EAAQ,GAC5C,CACA,CACA,CACK,MAED,KAAK,GACL,KAAK,GAEJ4S,EAAE0vC,2BACF1vC,EAAE0C,kBAEF,MAED,KAAK,GAEJgvC,IACA,MAED,KAAK,GAEJW,IACA,MAED,KAAK,GACL,KAAK,GAGJryC,EAAE0vC,2BACF,MAEL,IAEE3gB,EAAMhvB,iBAAiB,SAAS,SAAUC,GAEzC,OAAQA,EAAE0uC,SACT,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GAEJ,MAED,QACCwE,EAAWnkB,EAAM7jC,OAEtB,IAEE6jC,EAAMhvB,iBAAiB,UAAU,SAAUC,GAC1CkzC,EAAWnkB,EAAM7jC,MACpB,IAEE6jC,EAAMhvB,iBAAiB,QAAQ,SAAUC,GACxC,GAAIwwC,EAAU,CACbkB,GACJ,CACA,IAEE3iB,EAAMhvB,iBAAiB,SAAS,SAAUC,GACzC,IAAI9U,EAAQ8kD,EACZiD,IACAX,IACAvjB,EAAM7jC,MAAQA,EACdgoD,EAAWhoD,EAAO,KACrB,IAEEkY,GAAW,WACV2rB,EAAMt/B,MAAMsD,OAAS,OACrBg8B,EAAMpsB,MAAM,CAAEuqC,cAAe,MAChC,IAEE,GAAIP,EAAaqB,KAAM,CACtB5iD,KAAKuC,MAAMiC,QAAQ6R,KAAKssC,UAAUhf,EAAO4d,EAC5C,CAEEhsC,YAAW,WACVoyC,EAAQplD,MAAMM,WAAWF,QAAQgS,iBAAiB,SAAUsyC,EAC/D,GAAK,IAEHY,IACAlkB,EAAM7jC,MAAQ8kD,EACdkD,EAAWlD,EAAqB,MAEhC,OAAOjhB,CACT,EAGCqlB,KAAM,SAASA,EAAK19C,EAAM0M,EAAYyqC,EAASf,EAAQH,GACtD,IAAI57C,EAAO3F,KACP2C,EAAU2I,EAAKxH,aACfhE,EAAQwL,EAAK6M,WACb8wC,EAAWtmD,EAAQumD,qBAAqB,OAAO9oD,QAAU,EACzD2oC,EAAOpmC,EAAQumD,qBAAqB,OAAO,GAAKvmD,EAAQumD,qBAAqB,OAAO,GAAGrF,aAAa,SAAW,GAC/GsF,EAAQ,GACRC,EAAc/lD,SAASC,cAAc,OACrC0lD,EAAO3lD,SAASgmD,gBAAgB,6BAA8B,OAGlE,SAASC,EAAWvzB,GACnBozB,EAAM3jD,SAAQ,SAAUwjD,EAAMljD,GAC7B,GAAIA,EAAIiwB,EAAK,CACZ,GAAIpwB,EAAKpD,MAAMonB,SAAW,KAAM,CAC/Bq/B,EAAKr2C,aAAa,QAAS,wBACjC,KAAY,CACNq2C,EAAKzlD,UAAU42C,QAAQ,0BAA2B,wBACxD,CAEK6O,EAAK1wC,UAAY,ySACtB,KAAW,CACN,GAAI3S,EAAKpD,MAAMonB,SAAW,KAAM,CAC/Bq/B,EAAKr2C,aAAa,QAAS,0BACjC,KAAY,CACNq2C,EAAKzlD,UAAU42C,QAAQ,wBAAyB,0BACtD,CAEK6O,EAAK1wC,UAAY,ySACtB,CACA,GACA,CAGE,SAASixC,EAAUzjD,GAElB,IAAI0jD,EAAanmD,SAASC,cAAc,QACxC,IAAImmD,EAAWT,EAAK9N,UAAU,MAE9BiO,EAAM5jD,KAAKkkD,GAEXD,EAAW70C,iBAAiB,cAAc,SAAUC,GACnDA,EAAE0C,kBACF1C,EAAE0vC,2BACFgF,EAAWxjD,EACf,IAEG0jD,EAAW70C,iBAAiB,aAAa,SAAUC,GAClDA,EAAE0C,kBACF1C,EAAE0vC,0BACN,IAEGkF,EAAW70C,iBAAiB,SAAS,SAAUC,GAC9CA,EAAE0C,kBACF1C,EAAE0vC,2BACF7B,EAAQ38C,GACRnD,EAAQ+/C,MACZ,IAEG8G,EAAWpiD,YAAYqiD,GACvBL,EAAYhiD,YAAYoiD,EAC3B,CAGE,SAASE,EAAY3zB,GACpBj2B,EAAQi2B,EACRuzB,EAAWvzB,EACd,CAGEpzB,EAAQ0B,MAAM6/C,WAAa,SAC3BvhD,EAAQ0B,MAAMslD,SAAW,SACzBhnD,EAAQ0B,MAAMulD,aAAe,WAG7BR,EAAY/kD,MAAMyD,cAAgB,SAClCshD,EAAY/kD,MAAMoV,QAAU,eAC5B2vC,EAAY/kD,MAAMq/C,QAAU,MAG5BsF,EAAKr2C,aAAa,QAASo2B,GAC3BigB,EAAKr2C,aAAa,SAAUo2B,GAC5BigB,EAAKr2C,aAAa,UAAW,eAC7Bq2C,EAAKr2C,aAAa,YAAa,YAC/Bq2C,EAAK3kD,MAAMq/C,QAAU,QAErB,GAAInC,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChB+jC,EAAYz2C,aAAa1N,EAAKmkD,EAAYvF,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GACxG,KAAW,CACNmkD,EAAYz2C,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAClE,CACA,CACA,CAGE,IAAK,IAAIa,EAAI,EAAGA,GAAKmjD,EAAUnjD,IAAK,CACnCyjD,EAAUzjD,EACb,CAGEhG,EAAQuB,KAAK+K,IAAIa,SAASnN,GAAQmpD,GAGlCK,EAAWxpD,GAEXspD,EAAYz0C,iBAAiB,aAAa,SAAUC,GACnD00C,EAAW,EACd,IAEEF,EAAYz0C,iBAAiB,SAAS,SAAUC,GAC/C6tC,EAAQ,EACX,IAEE9/C,EAAQgS,iBAAiB,QAAQ,SAAUC,GAC1C8sC,GACH,IAGE/+C,EAAQgS,iBAAiB,WAAW,SAAUC,GAC7C,OAAQA,EAAE0uC,SACT,KAAK,GAEJoG,EAAY5pD,EAAQ,GACpB,MAED,KAAK,GAEJ4pD,EAAY5pD,EAAQ,GACpB,MAED,KAAK,GAEJ2iD,EAAQ3iD,GACR,MAED,KAAK,GAEJ4hD,IACA,MAEL,IAEE,OAAO0H,CACT,EAGCS,SAAU,SAASA,EAASv+C,EAAM0M,EAAYyqC,EAASf,EAAQH,GAC9D,IAAI5+C,EAAU2I,EAAKxH,aACfxC,SAAaigD,EAAajgD,MAAQ,YAAcqB,EAAQumD,qBAAqB,OAAO,GAAGrF,aAAa,QAAU,IAAMtC,EAAajgD,IACjI8K,SAAam1C,EAAan1C,MAAQ,YAAczJ,EAAQumD,qBAAqB,OAAO,GAAGrF,aAAa,QAAU,EAAItC,EAAan1C,IAC/H09C,GAAWxoD,EAAM8K,GAAO,IACxBtM,EAAQwL,EAAK6M,YAAc,EAC3B4xC,EAAS1mD,SAASC,cAAc,OAChC0mD,EAAM3mD,SAASC,cAAc,OAC7B2mD,EACAC,EAGJ,SAASC,IACR,IAAI9lD,EAAQqmB,OAAO2W,iBAAiB1+B,EAAS,MAE7C,IAAIynD,EAAUN,EAAUzoD,KAAKgpD,MAAML,EAAI79C,cAAgBxJ,EAAQyB,YAAc6I,SAAS5I,EAAM+2C,iBAAiB,iBAAmBnuC,SAAS5I,EAAM+2C,iBAAiB,mBAAqB,MAAQhvC,EAC7Lq2C,EAAQ2H,GACRznD,EAAQgQ,aAAa,gBAAiBy3C,GACtCznD,EAAQgQ,aAAa,aAAc7S,EACtC,CAGEiqD,EAAO1lD,MAAMmH,SAAW,WACxBu+C,EAAO1lD,MAAMmwB,MAAQ,IACrBu1B,EAAO1lD,MAAMsZ,IAAM,IACnBosC,EAAO1lD,MAAMgwB,OAAS,IACtB01B,EAAO1lD,MAAMyF,MAAQ,MACrBigD,EAAOxmD,UAAUC,IAAI,6BAGrBwmD,EAAI3lD,MAAMoV,QAAU,eACpBuwC,EAAI3lD,MAAMmH,SAAW,WAKrBw+C,EAAI3lD,MAAMsD,OAAS,OACnBqiD,EAAI3lD,MAAMimD,gBAAkB,UAC5BN,EAAI3lD,MAAMuN,SAAW,OACrBo4C,EAAI3lD,MAAMyI,SAAW,KAErB,GAAIy0C,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChB2kC,EAAIr3C,aAAa1N,EAAK+kD,EAAInG,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GACxF,KAAW,CACN+kD,EAAIr3C,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC1D,CACA,CACA,CAGEtC,EAAQ0B,MAAMq/C,QAAU,UAGxB5jD,EAAQuB,KAAK+K,IAAI8rC,WAAWp4C,GAAQwB,GACpCxB,EAAQuB,KAAKC,IAAI42C,WAAWp4C,GAAQsM,GAGpCtM,EAAQuB,KAAKgpD,OAAOvqD,EAAQsM,GAAO09C,GAEnCE,EAAI3lD,MAAMyF,MAAQhK,EAAQ,IAE1B6C,EAAQgQ,aAAa,gBAAiBvG,GACtCzJ,EAAQgQ,aAAa,gBAAiBrR,GAEtC0oD,EAAI5iD,YAAY2iD,GAEhBA,EAAOp1C,iBAAiB,aAAa,SAAUC,GAC9Cq1C,EAAYr1C,EAAE21C,QACdL,EAAiBF,EAAI79C,WACxB,IAEE49C,EAAOp1C,iBAAiB,aAAa,WACpCo1C,EAAO1lD,MAAMmjD,OAAS,WACzB,IAEE7kD,EAAQgS,iBAAiB,aAAa,SAAUC,GAC/C,GAAIq1C,EAAW,CACdD,EAAI3lD,MAAMyF,MAAQogD,EAAiBt1C,EAAE21C,QAAUN,EAAY,IAC/D,CACA,IAEEtnD,EAAQgS,iBAAiB,WAAW,SAAUC,GAC7C,GAAIq1C,EAAW,CACdr1C,EAAE0C,kBACF1C,EAAE0vC,2BAEF2F,EAAY,MACZC,EAAiB,MAEjBC,GACJ,CACA,IAGExnD,EAAQgS,iBAAiB,WAAW,SAAUC,GAC7C,OAAQA,EAAE0uC,SACT,KAAK,GAEJ1uC,EAAEwgB,iBACF40B,EAAI3lD,MAAMyF,MAAQkgD,EAAI5lD,YAAczB,EAAQyB,YAAc,IAAM,KAChE,MAED,KAAK,GAEJwQ,EAAEwgB,iBACF40B,EAAI3lD,MAAMyF,MAAQkgD,EAAI5lD,YAAczB,EAAQyB,YAAc,IAAM,KAChE,MAED,KAAK,EACL,KAAK,GAEJ+lD,IACA,MAED,KAAK,GAEJzI,IACA,MAGL,IAEE/+C,EAAQgS,iBAAiB,QAAQ,WAChC+sC,GACH,IAEE,OAAOsI,CACT,EAGCQ,UAAW,SAASA,EAAUl/C,EAAM0M,EAAYyqC,EAASf,EAAQH,GAChE,IAAIzhD,EAAQwL,EAAK6M,WACbwrB,EAAQtgC,SAASC,cAAc,SAC/BmnD,EAAWlJ,EAAakJ,SACxBC,SAAuBnJ,EAAaoJ,qBAAuB,YAAc,KAAOpJ,EAAaoJ,mBAC7FC,EAAgB,MAEpBjnB,EAAMhxB,aAAa,OAAQ,YAC3BgxB,EAAMt/B,MAAMwmD,UAAY,MACxBlnB,EAAMt/B,MAAMs/C,UAAY,aAExB,GAAIpC,EAAaqC,mBAAqBxkD,EAAQmiD,EAAaqC,oBAAsB,SAAU,CAC1F,IAAK,IAAI3+C,KAAOs8C,EAAaqC,kBAAmB,CAC/C,GAAI3+C,EAAIusC,OAAO,IAAM,IAAK,CACzBvsC,EAAMA,EAAIogB,MAAM,GAChBse,EAAMhxB,aAAa1N,EAAK0+B,EAAMkgB,aAAa5+C,GAAOs8C,EAAaqC,kBAAkB,IAAM3+C,GAC5F,KAAW,CACN0+B,EAAMhxB,aAAa1N,EAAKs8C,EAAaqC,kBAAkB3+C,GAC5D,CACA,CACA,CAEE0+B,EAAM7jC,MAAQA,EAEd,GAAI2qD,WAAoB3qD,IAAU,aAAeA,IAAU4qD,GAAiB5qD,IAAU,IAAK,CAC1F8qD,EAAgB,KAChBjnB,EAAMmnB,cAAgB,IACzB,CAEE,GAAI9qD,KAAKuC,MAAMonB,SAAW,UAAW,CAEpC3R,GAAW,WACV2rB,EAAMpsB,MAAM,CAAEuqC,cAAe,MACjC,GACA,CAEEne,EAAMonB,QAAUjrD,IAAU,MAAQA,IAAU,QAAUA,IAAU,QAAUA,IAAU,EAEpFkY,GAAW,WACV2rB,EAAMpsB,OACT,IAEE,SAAS6b,EAASsvB,GACjB,GAAI+H,EAAU,CACb,IAAK/H,EAAM,CACV,GAAI/e,EAAMonB,UAAYH,EAAe,CACpCjnB,EAAMonB,QAAU,MAChBpnB,EAAMmnB,cAAgB,KACtBF,EAAgB,KAChB,OAAOF,CACb,KAAY,CACNE,EAAgB,MAChB,OAAOjnB,EAAMonB,OACnB,CACA,KAAW,CACN,GAAIH,EAAe,CAClB,OAAOF,CACb,KAAY,CACN,OAAO/mB,EAAMonB,OACnB,CACA,CACA,KAAU,CACN,OAAOpnB,EAAMonB,OACjB,CACA,CAGEpnB,EAAMhvB,iBAAiB,UAAU,SAAUC,GAC1C6tC,EAAQrvB,IACX,IAEEuQ,EAAMhvB,iBAAiB,QAAQ,SAAUC,GACxC6tC,EAAQrvB,EAAS,MACpB,IAGEuQ,EAAMhvB,iBAAiB,WAAW,SAAUC,GAC3C,GAAIA,EAAE0uC,SAAW,GAAI,CACpBb,EAAQrvB,IACZ,CACG,GAAIxe,EAAE0uC,SAAW,GAAI,CACpB5B,GACJ,CACA,IAEE,OAAO/d,CACT,GAGAj2B,EAAUjO,UAAU6rC,eAAe,OAAQ2V,GAE3C,IAAI+J,EAAY,SAASA,EAAU/8C,EAAMnL,EAASkP,EAAWsoC,GAC5Dt6C,KAAKiO,KAAOA,EACZjO,KAAK8C,QAAUA,EACf9C,KAAKgS,UAAYA,GAAa,MAC9BhS,KAAKs6C,OAASA,GAAU,CACzB,EAEA,IAAI2Q,EAAe,SAASA,EAAanrD,EAAOkS,EAAWlI,EAAOnC,EAAQi2C,GACzE59C,KAAKF,MAAQA,EACbE,KAAKgS,UAAYA,GAAa,MAC9BhS,KAAK8J,MAAQA,EACb9J,KAAK2H,OAASA,EACd3H,KAAK49C,MAAQA,CACd,EAEA,IAAIsN,EAAS,SAASA,EAAO3oD,GAC5BvC,KAAKuC,MAAQA,EACbvC,KAAK4K,OAAS,GACd5K,KAAKmrD,gBAAkB,KACvBnrD,KAAKorD,WAAa,EACnB,EAEAF,EAAOzrD,UAAUo5C,mBAAqB,SAAUjuC,EAAQvG,EAAOixB,EAAO81B,GACrEprD,KAAKmrD,gBAAkB9mD,EACvBrE,KAAK4K,OAASA,GAAU,GACxB5K,KAAKorD,WAAaA,EAElB,IAAIjX,EAAUn0C,KAAK4K,OAAO42B,gBAAkB,MAAQxhC,KAAKqrD,oBAAoBrrD,KAAKsrD,8BAAgC,GAClH,IAAI/1B,EAAOv1B,KAAKurD,iBAAiBvrD,KAAKwrD,UAAUl2B,IAEhD,OAAO6e,EAAQhpC,OAAOoqB,EACvB,EAEA21B,EAAOzrD,UAAUgsD,eAAiB,SAAU7gD,EAAQvG,EAAOixB,EAAO81B,GACjE,IAAI1nC,EAAO1jB,KAAK64C,mBAAmBjuC,EAAQvG,EAAOixB,EAAO81B,GAEzD,OAAOprD,KAAK0rD,sBAAsBhoC,EACnC,EAEAwnC,EAAOzrD,UAAU+rD,UAAY,SAAUl2B,GACtC,IAAIq2B,EAAU3rD,KAEd,IAAIiL,EAAO,GAEX,UAAWqqB,GAAS,WAAY,CAC/BA,EAAM70B,KAAKT,KAAKuC,OAAOiD,SAAQ,SAAUT,GACxCA,EAAM4mD,EAAQppD,MAAMM,WAAWob,QAAQlZ,GAEvC,GAAIA,EAAK,CACRkG,EAAK1F,KAAKR,EACd,CACA,GACA,KAAQ,CACN,OAAQuwB,GACP,KAAK,KACL,IAAK,UACJrqB,EAAOjL,KAAKuC,MAAMM,WAAWujB,eAAe,MAC5C,MAED,IAAK,MACJnb,EAAOjL,KAAKuC,MAAMM,WAAWoI,KAC7B,MAED,IAAK,WACJA,EAAOjL,KAAKuC,MAAMiC,QAAQsb,UAAU6G,aACpC,MAED,IAAK,SACL,QACC,GAAI3mB,KAAKuC,MAAMkB,QAAQ6b,WAAY,CAClCrU,EAAOjL,KAAKuC,MAAMM,WAAW6b,eAAe1e,KAAKuC,MAAMM,WAAWoZ,YAAY7b,OAAS,EAC5F,KAAW,CACN6K,EAAOjL,KAAKuC,MAAMM,WAAW6b,gBAClC,EAEA,CAEC,OAAO9e,OAAOgC,OAAO,GAAIqJ,EAC1B,EAEAigD,EAAOzrD,UAAU6rD,2BAA6B,WAC7C,IAAIM,EAAU5rD,KAEd,IAAIuJ,EAAS,GAEb,IAAIzG,EAAU9C,KAAK4K,OAAOihD,eAAiB,MAAQ7rD,KAAKuC,MAAMmI,cAAc5H,QAAU9C,KAAKuC,MAAMmI,cAAc3H,eAE/GD,EAAQ0C,SAAQ,SAAUiB,GACzB,IAAIqlD,EAAUF,EAAQG,mBAAmBtlD,GAEzC,GAAIqlD,EAAS,CACZviD,EAAOhE,KAAKumD,EACf,CACA,IAEC,OAAOviD,CACR,EAEA2hD,EAAOzrD,UAAUssD,mBAAqB,SAAUtlD,GAC/C,IAAIulD,EAAUhsD,KAEd,IAAIu3C,EAAY9wC,EAAO3D,QACnBmpD,EAAW,EACX7mD,EAAQqB,EAAOH,WAAW,SAAWtG,KAAKorD,WAAW5Z,OAAO,GAAGC,cAAgBzxC,KAAKorD,WAAW/lC,MAAM,MAAQ5e,EAAOH,WAAWlB,MAEnI,IAAI8mD,EAAY,CACf9mD,MAAOA,EACPqB,OAAQA,EACRm3C,MAAO,GAGR,GAAIrG,EAAUn3C,OAAQ,CACrB8rD,EAAU3U,UAAY,GACtB2U,EAAUpiD,MAAQ,EAElBytC,EAAU/xC,SAAQ,SAAU2mD,GAC3B,IAAIC,EAAeJ,EAAQD,mBAAmBI,GAE9C,GAAIC,EAAc,CACjBF,EAAUpiD,OAASsiD,EAAatiD,MAChCoiD,EAAU3U,UAAUhyC,KAAK6mD,GAEzB,GAAIA,EAAaxO,MAAQqO,EAAU,CAClCA,EAAWG,EAAaxO,KAC7B,CACA,CACA,IAEEsO,EAAUtO,OAASqO,EAEnB,IAAKC,EAAUpiD,MAAO,CACrB,OAAO,KACV,CACA,KAAQ,CACN,GAAI9J,KAAKqsD,eAAe5lD,GAAS,CAChCylD,EAAUpiD,MAAQ,CACrB,KAAS,CACN,OAAO,KACV,CACA,CAEC,OAAOoiD,CACR,EAEAhB,EAAOzrD,UAAU4sD,eAAiB,SAAU5lD,GAC3C,OAAOA,EAAOH,WAAWtG,KAAKorD,cAAgB,QAAU3kD,EAAOuC,UAAYvC,EAAOuC,SAAWvC,EAAOH,WAAWtG,KAAKorD,YACrH,EAEAF,EAAOzrD,UAAU4rD,oBAAsB,SAAUvoD,GAChD,IAAIqxC,EAAU,GACVmY,EAAc,EACdC,EAAa,GAEjB,SAASC,EAAiB/lD,EAAQupC,GAEjC,IAAI4N,EAAQ0O,EAActc,EAE1B,UAAWmE,EAAQnE,KAAW,YAAa,CAC1CmE,EAAQnE,GAAS,EACpB,CAEEvpC,EAAOkB,OAASlB,EAAO8wC,UAAY,EAAIqG,EAAQn3C,EAAOm3C,MAAQ,EAE9DzJ,EAAQnE,GAAOzqC,KAAKkB,GAEpB,GAAIA,EAAOkB,OAAS,EAAG,CACtB,IAAK,IAAI8kD,EAAO,EAAGA,EAAOhmD,EAAOkB,OAAQ8kD,IAAQ,CAEhD,UAAWtY,EAAQnE,EAAQyc,KAAU,YAAa,CACjDtY,EAAQnE,EAAQyc,GAAQ,EAC7B,CAEItY,EAAQnE,EAAQyc,GAAMlnD,KAAK,MAC/B,CACA,CAEE,GAAIkB,EAAOqD,MAAQ,EAAG,CACrB,IAAK,IAAI4iD,EAAO,EAAGA,EAAOjmD,EAAOqD,MAAO4iD,IAAQ,CAC/CvY,EAAQnE,GAAOzqC,KAAK,MACxB,CACA,CAEE,GAAIkB,EAAO8wC,UAAW,CACrB9wC,EAAO8wC,UAAU/xC,SAAQ,SAAU2mD,GAClCK,EAAiBL,EAAUnc,EAAQ,EACvC,GACA,CACA,CAGCltC,EAAQ0C,SAAQ,SAAUiB,GACzB,GAAIA,EAAOm3C,MAAQ0O,EAAa,CAC/BA,EAAc7lD,EAAOm3C,KACxB,CACA,IAEC96C,EAAQ0C,SAAQ,SAAUiB,GACzB+lD,EAAiB/lD,EAAQ,EAC3B,IAEC0tC,EAAQ3uC,SAAQ,SAAUu4C,GACzB,IAAIj7C,EAAU,GAEdi7C,EAAOv4C,SAAQ,SAAUN,GACxB,GAAIA,EAAK,CACRpC,EAAQyC,KAAK,IAAI0lD,EAAa/lD,EAAIE,MAAOF,EAAIuB,OAAOmD,eAAgB1E,EAAI4E,MAAO5E,EAAIyC,OAAQzC,EAAI04C,OACnG,KAAU,CACN96C,EAAQyC,KAAK,KACjB,CACA,IAEEgnD,EAAWhnD,KAAK,IAAIylD,EAAU,SAAUloD,GAC1C,IAEC,OAAOypD,CACR,EAEArB,EAAOzrD,UAAU8rD,iBAAmB,SAAUtgD,GAC7C,IAAI0hD,EAAU3sD,KAEd,IAAI8C,EAAU,GACd,IAAIypD,EAAa,GAEjBvsD,KAAKuC,MAAMmI,cAAc3H,eAAeyC,SAAQ,SAAUiB,GACzD,GAAIkmD,EAAQN,eAAe5lD,GAAS,CACnC3D,EAAQyC,KAAKkB,EAAOmD,eACvB,CACA,IAEC,GAAI5J,KAAK4K,OAAOT,cAAgB,OAASnK,KAAKuC,MAAMgC,UAAU,eAAgB,CAC7E,GAAIvE,KAAKuC,MAAMiC,QAAQ2F,YAAYqrC,eAAgB,CAClDvqC,EAAK9D,QAAQnH,KAAKuC,MAAMiC,QAAQ2F,YAAYsc,OAC/C,CAEE,GAAIzmB,KAAKuC,MAAMiC,QAAQ2F,YAAYsrC,eAAgB,CAClDxqC,EAAK1F,KAAKvF,KAAKuC,MAAMiC,QAAQ2F,YAAYorC,OAC5C,CACA,CAECtqC,EAAOA,EAAK6D,QAAO,SAAU/J,GAC5B,OAAQA,EAAIkJ,MACX,IAAK,QACJ,OAAO0+C,EAAQ/hD,OAAOgiD,YAAc,MAGrC,IAAK,OACJ,OAAOD,EAAQ/hD,OAAOT,cAAgB,MAGvC,IAAK,MACJ,QAASwiD,EAAQpqD,MAAMkB,QAAQyH,UAAYyhD,EAAQ/hD,OAAOM,WAAa,OAASnG,EAAIP,QAAQ0G,SAASZ,QAIvG,OAAO,IACT,IAECW,EAAKzF,SAAQ,SAAUT,EAAKe,GAC3B,IAAI0wC,EAAUzxC,EAAIic,QAAQ2rC,EAAQvB,YAClC,IAAIyB,EAAa,GACjB,IAAIvS,EAAS,EAEb,OAAQv1C,EAAIkJ,MACX,IAAK,QACJqsC,EAASv1C,EAAIirC,MACb6c,EAAWtnD,KAAK,IAAI0lD,EAAalmD,EAAIE,IAAKF,EAAI6E,eAAgB9G,EAAQ1C,OAAQ,IAC9E,MAED,IAAK,OACL,IAAK,MACJ0C,EAAQ0C,SAAQ,SAAUN,GACzB2nD,EAAWtnD,KAAK,IAAI0lD,EAAa/lD,EAAI8I,QAAQyC,cAAc+lC,GAAUtxC,EAAK,EAAG,GAClF,IAEI,GAAIynD,EAAQpqD,MAAMkB,QAAQyH,UAAYyhD,EAAQ/hD,OAAOM,WAAa,MAAO,CACxEovC,EAASv1C,EAAIP,QAAQ0G,SAASlJ,KACnC,CACI,MAGFuqD,EAAWhnD,KAAK,IAAIylD,EAAUjmD,EAAIkJ,KAAM4+C,EAAY9nD,EAAI6E,eAAgB0wC,GAC1E,IAEC,OAAOiS,CACR,EAEArB,EAAOzrD,UAAUisD,sBAAwB,SAAUhoC,GAClD,IAAIopC,EAAU9sD,KAEd,IAAIuC,EAAQc,SAASC,cAAc,SAC/BypD,EAAW1pD,SAASC,cAAc,SAClC0pD,EAAS3pD,SAASC,cAAc,SAChCs7C,EAAS5+C,KAAKitD,oBACd58B,EAAerwB,KAAKuC,MAAMkB,QAAQ,gBAAkBzD,KAAKorD,WAAW5Z,OAAO,GAAGC,cAAgBzxC,KAAKorD,WAAW/lC,MAAM,KACpH6nC,EAAQ,GAEZA,EAAM78B,aAAeA,IAAiB,KAAOA,EAAerwB,KAAKuC,MAAMkB,QAAQ4sB,aAE/E,GAAIrwB,KAAKuC,MAAMkB,QAAQyH,UAAYlL,KAAK4K,OAAOM,WAAa,OAASlL,KAAKuC,MAAMgC,UAAU,eAAgB,CACzG2oD,EAAMC,iBAAmBntD,KAAKuC,MAAMiC,QAAQ0G,SAASwvC,YACvD,CAGCwS,EAAMxvB,YAAc19B,KAAKuC,MAAMkB,QAAQ,eAAiBzD,KAAKorD,WAAW5Z,OAAO,GAAGC,cAAgBzxC,KAAKorD,WAAW/lC,MAAM,KAExH,GAAI6nC,EAAMxvB,cAAgBh+B,MAAM2F,QAAQ6nD,EAAMxvB,aAAc,CAC3DwvB,EAAMxvB,YAAc,CAACwvB,EAAMxvB,YAC7B,CAECn7B,EAAMgB,UAAUC,IAAI,yBAEpBxD,KAAKotD,iBAAiBptD,KAAKuC,MAAMmI,cAAc3G,oBAAqBgpD,EAAU,CAAC,aAAc,cAAe,eAAgB,gBAAiB,mBAAoB,QAAS,cAAe,cAAe,cAExM,GAAIrpC,EAAKtjB,OAAS,IAAM,CACvBiM,QAAQC,KAAK,2EACf,CAECoX,EAAKle,SAAQ,SAAUT,EAAKe,GAC3B,OAAQf,EAAIkJ,MACX,IAAK,SACJ8+C,EAAS3lD,YAAY0lD,EAAQO,uBAAuBtoD,EAAKmoD,EAAOtO,IAChE,MAED,IAAK,QACJoO,EAAO5lD,YAAY0lD,EAAQQ,sBAAsBvoD,EAAKmoD,EAAOtO,IAC7D,MAED,IAAK,OACJoO,EAAO5lD,YAAY0lD,EAAQS,qBAAqBxoD,EAAKmoD,EAAOtO,IAC5D,MAED,IAAK,MACJ,IAAIjgC,EAAQmuC,EAAQU,oBAAoBzoD,EAAKmoD,EAAOtO,GACpDkO,EAAQM,iBAAiBtnD,EAAI,GAAK84C,EAAO6O,QAAU7O,EAAO6O,QAAU7O,EAAO8O,OAAQ/uC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBAC7MquC,EAAO5lD,YAAYuX,GACnB,MAEJ,IAEC,GAAIouC,EAASz0C,UAAW,CACvB/V,EAAM6E,YAAY2lD,EACpB,CAECxqD,EAAM6E,YAAY4lD,GAElBhtD,KAAKotD,iBAAiBptD,KAAKuC,MAAMI,QAASJ,EAAO,CAAC,aAAc,cAAe,eAAgB,kBAC/F,OAAOA,CACR,EAEA2oD,EAAOzrD,UAAUwtD,kBAAoB,WACpC,IAAIrO,EAAS,GAGb,GAAI5+C,KAAKmrD,iBAAmBzgC,OAAO2W,iBAAkB,CACpDud,EAAO8O,OAAS1tD,KAAKuC,MAAMI,QAAQ20B,cAAc,kEACjDsnB,EAAO6O,QAAUztD,KAAKuC,MAAMI,QAAQ20B,cAAc,mEAClDsnB,EAAO+O,QAAU3tD,KAAKuC,MAAMI,QAAQ20B,cAAc,kCAClDsnB,EAAOgP,SAAW5tD,KAAKuC,MAAMI,QAAQ20B,cAAc,8DACnDsnB,EAAOiP,WAAa7tD,KAAKuC,MAAMI,QAAQmrD,uBAAuB,mBAAmB,GAEjF,GAAIlP,EAAOgP,SAAU,CACpBhP,EAAOmP,WAAanP,EAAOgP,SAASE,uBAAuB,kBAC3DlP,EAAOoP,UAAYpP,EAAOmP,WAAW,GACrCnP,EAAOqP,SAAWrP,EAAOmP,WAAWnP,EAAOmP,WAAW3tD,OAAS,EAClE,CACA,CAEC,OAAOw+C,CACR,EAEAsM,EAAOzrD,UAAU4tD,uBAAyB,SAAUtoD,EAAKmoD,EAAOtO,GAC/D,IAAIsP,EAAUluD,KAEd,IAAI2e,EAAQtb,SAASC,cAAc,MAEnCyB,EAAIjC,QAAQ0C,SAAQ,SAAUiB,GAC7B,GAAIA,EAAQ,CACX,IAAIk7C,EAASt+C,SAASC,cAAc,MACpC,IAAIsxB,EAAanuB,EAAOuL,UAAUhE,QAAQ1H,WAAWmQ,SAAWhQ,EAAOuL,UAAUhE,QAAQ1H,WAAWmQ,SAAS5N,MAAM,KAAO,GAE1H84C,EAAO9C,QAAUp4C,EAAOqD,MACxB63C,EAAO7C,QAAUr4C,EAAOkB,OAExBg6C,EAAOrpC,UAAY7R,EAAO3G,MAE1B,GAAIouD,EAAQ/C,gBAAiB,CAC5BxJ,EAAOt9C,MAAMs/C,UAAY,YAC7B,CAEG/uB,EAAWpvB,SAAQ,SAAUmR,GAC5BgrC,EAAOp+C,UAAUC,IAAImT,EACzB,IAEGu3C,EAAQd,iBAAiB3mD,EAAOuL,UAAUlO,aAAc69C,EAAQ,CAAC,aAAc,aAAc,cAAe,eAAgB,gBAAiB,mBAAoB,QAAS,cAAe,cAAe,cACxMuM,EAAQd,iBAAiB3mD,EAAOuL,UAAUhE,QAAQgC,eAAgB2xC,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,mBAE3H,GAAIl7C,EAAOuL,UAAUhE,QAAQhF,QAAS,CACrCklD,EAAQd,iBAAiB3mD,EAAOuL,UAAUlO,aAAc69C,EAAQ,CAAC,SACrE,KAAU,CACN,GAAIl7C,EAAOuL,UAAUhE,QAAQ1H,WAAWwD,MAAO,CAC9C63C,EAAOt9C,MAAMyF,MAAQrD,EAAOuL,UAAUhE,QAAQ1H,WAAWwD,MAAQ,IACtE,CACA,CAEG,GAAIrD,EAAOuL,UAAUhE,QAAQ1D,OAAQ,CACpC4jD,EAAQd,iBAAiB3mD,EAAOuL,UAAUhE,QAAQ1D,OAAO6F,aAAcwxC,EAAQ,CAAC,cACpF,CAEGhjC,EAAMvX,YAAYu6C,EACrB,CACA,IAEC,OAAOhjC,CACR,EAEAusC,EAAOzrD,UAAU6tD,sBAAwB,SAAUvoD,EAAKmoD,EAAOtO,GAE9D,IAAIjgC,EAAQtb,SAASC,cAAc,MAC/Bq+C,EAASt+C,SAASC,cAAc,MAChC+nB,EAAQtmB,EAAIjC,QAAQ,GAExB6b,EAAMpb,UAAUC,IAAI,6BAEpB,GAAI0pD,EAAMxvB,aAAewvB,EAAMxvB,YAAY34B,EAAIu1C,QAAS,CACvDjvB,EAAMvrB,MAAQotD,EAAMxvB,YAAY34B,EAAIu1C,QAAQjvB,EAAMvrB,MAAOiF,EAAIiN,UAAUgrC,OAAOC,cAAel4C,EAAIiN,UAAUgrC,OAAOh8B,UAAWjc,EAAIiN,UACnI,KAAQ,CACN,GAAIk7C,EAAMxvB,cAAgB,MAAO,CAChCrS,EAAMvrB,MAAQurB,EAAMvrB,KACvB,KAAS,CACNurB,EAAMvrB,MAAQiF,EAAIiN,UAAUgrC,OAAOmR,UAAU9iC,EAAMvrB,MAAOiF,EAAIiN,UAAUgrC,OAAOC,cAAel4C,EAAIiN,UAAUgrC,OAAOh8B,UAAWjc,EAAIiN,UACrI,CACA,CAEC2vC,EAAO9C,QAAUxzB,EAAMvhB,MACvB63C,EAAOrpC,UAAY+S,EAAMvrB,MAEzB6e,EAAMpb,UAAUC,IAAI,+BACpBmb,EAAMpb,UAAUC,IAAI,yBAA2BuB,EAAIu1C,QAEnD,GAAIjvB,EAAMrZ,UAAU5D,YAAa,CAChCuQ,EAAMpb,UAAUC,IAAI,0BACtB,CAECxD,KAAKotD,iBAAiBxO,EAAOiP,WAAYlvC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBACnK3e,KAAKotD,iBAAiBxO,EAAOiP,WAAYlM,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,mBAElGhjC,EAAMvX,YAAYu6C,GAElB,OAAOhjC,CACR,EAEAusC,EAAOzrD,UAAU8tD,qBAAuB,SAAUxoD,EAAKmoD,EAAOtO,GAC7D,IAAIjgC,EAAQ3e,KAAKwtD,oBAAoBzoD,EAAKmoD,EAAOtO,GAEjDjgC,EAAMpb,UAAUC,IAAI,+BACpBxD,KAAKotD,iBAAiBxO,EAAO+O,QAAShvC,EAAO,CAAC,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,YAAa,qBAEhK,OAAOA,CACR,EAEAusC,EAAOzrD,UAAU+tD,oBAAsB,SAAUzoD,EAAKmoD,EAAOtO,GAC5D,IAAIwP,EAAUpuD,KAEd,IAAI2e,EAAQtb,SAASC,cAAc,MAEnCqb,EAAMpb,UAAUC,IAAI,6BAEpBuB,EAAIjC,QAAQ0C,SAAQ,SAAUN,GAE7B,GAAIA,EAAK,CACR,IAAIy8C,EAASt+C,SAASC,cAAc,MAChCmD,EAASvB,EAAI8M,UAAUhE,QACvBlO,EAAQoF,EAAIpF,MAEhB,IAAIuuD,EAAc,CACjB7pD,QAAS,GACT2T,SAAU,SAASA,IAClB,OAAOrY,CACZ,EACI0N,SAAU,SAASA,IAClB,OAAO/G,EAAOH,WAAWnB,KAC9B,EACIrB,WAAY,SAASA,IACpB,OAAO69C,CACZ,EACIxuB,UAAW,SAASA,IACnB,OAAO1sB,EAAOmD,cACnB,EACIoX,QAAS,SAASA,IACjB,OAAOjc,EAAIiN,UAAUgP,SAC1B,EACIkS,OAAQ,SAASA,IAChB,OAAOnuB,EAAIiN,SAChB,EACIpI,aAAc,SAASA,IACtB,OAAOykD,CACZ,EACI5nD,OAAQA,GAGT,IAAImuB,EAAanuB,EAAOH,WAAWmQ,SAAWhQ,EAAOH,WAAWmQ,SAAS5N,MAAM,KAAO,GAEtF+rB,EAAWpvB,SAAQ,SAAUmR,GAC5BgrC,EAAOp+C,UAAUC,IAAImT,EACzB,IAEG,GAAIy3C,EAAQ7rD,MAAMgC,UAAU,WAAa6pD,EAAQxjD,OAAO0jD,cAAgB,MAAO,CAC9ExuD,EAAQsuD,EAAQ7rD,MAAMiC,QAAQ2R,OAAOo4C,kBAAkBF,EAAaD,EAAQhD,WAChF,KAAU,CACN,cAAetrD,IAAU,YAAc,YAAcV,EAAQU,IAC5D,IAAK,SACJA,EAAQoxB,KAAK2jB,UAAU/0C,GACvB,MAED,IAAK,YACL,IAAK,OACJA,EAAQ,GACR,MAED,QACCA,EAAQA,EAEd,CAEG,GAAIA,aAAiBuY,KAAM,CAC1BspC,EAAOv6C,YAAYtH,EACvB,KAAU,CACN6hD,EAAOrpC,UAAYxY,CACvB,CAEG,GAAI8+C,EAAOoP,UAAW,CACrBI,EAAQhB,iBAAiBxO,EAAOoP,UAAWrM,EAAQ,CAAC,cAAe,eAAgB,gBAAiB,iBAAkB,aAAc,cAAe,eAAgB,gBAAiB,QAAS,cAAe,cAAe,cAE3N,GAAIl7C,EAAOH,WAAW+M,MAAO,CAC5BsuC,EAAOt9C,MAAM6S,UAAYzQ,EAAOH,WAAW+M,KAChD,CACA,CAEG,GAAI+6C,EAAQ7rD,MAAMkB,QAAQyH,UAAYkjD,EAAQxjD,OAAOM,WAAa,MAAO,CACxE,GAAIgiD,EAAMC,kBAAoBD,EAAMC,kBAAoB1mD,EAAOtB,QAAU+nD,EAAMC,kBAAoBrnD,GAAK,EAAG,CAC1G,GAAIf,EAAIiN,UAAUib,KAAKzoB,QAAQ0G,SAAS8vC,UAAW,CAClD2G,EAAOz+C,aAAa6B,EAAIiN,UAAUib,KAAKzoB,QAAQ0G,SAAS8vC,UAAUE,UAAU,MAAOyG,EAAOx+C,WAChG,CACK,GAAI4B,EAAIiN,UAAUib,KAAKzoB,QAAQ0G,SAASuvC,SAAU,CACjDkH,EAAOz+C,aAAa6B,EAAIiN,UAAUib,KAAKzoB,QAAQ0G,SAASuvC,SAASS,UAAU,MAAOyG,EAAOx+C,WAC/F,CACA,CACA,CAEGwb,EAAMvX,YAAYu6C,GAElB,GAAI0M,EAAY7pD,QAAQ2R,QAAUk4C,EAAY7pD,QAAQ2R,OAAOq4C,iBAAkB,CAC9EH,EAAY7pD,QAAQ2R,OAAOq4C,kBAC/B,CAEG,GAAItB,EAAM78B,cAAgB+9B,EAAQxjD,OAAO0jD,cAAgB,MAAO,CAC/DpB,EAAM78B,aAAatrB,EAAIiN,UAC3B,CACA,CACA,IAEC,OAAO2M,CACR,EAEAusC,EAAOzrD,UAAUq5C,mBAAqB,SAAUp1B,GAC/C,IAAIkE,EAASvkB,SAASC,cAAc,OAEpCskB,EAAOxgB,YAAYpH,KAAK0rD,sBAAsBhoC,IAE9C,OAAOkE,EAAOtP,SACf,EAEA4yC,EAAOzrD,UAAUolC,QAAU,SAAU77B,EAAS3E,EAAOuG,EAAQwgD,GAC5D,IAAI1nC,EAAO1jB,KAAK64C,mBAAmBjuC,GAAU5K,KAAKuC,MAAMkB,QAAQs6B,iBAAkB15B,EAAO2E,EAASoiD,GAAc,cAEhH,OAAOprD,KAAK84C,mBAAmBp1B,EAChC,EAEAwnC,EAAOzrD,UAAU2tD,iBAAmB,SAAUpjD,EAAMjI,EAAI0sD,GACvD,GAAIzuD,KAAKmrD,iBAAmBnhD,GAAQjI,EAAI,CAEvC,IAAI2sD,EAAS,CACZ,mBAAoB,kBACpBC,MAAS,YACT7kD,MAAS,QACT,cAAe,aACf,cAAe,aACf,YAAa,WACb,aAAc,YACd,aAAc,YACd,cAAe,aACf,eAAgB,cAChB,gBAAiB,eACjB,cAAe,aACf,eAAgB,cAChB,gBAAiB,eACjB,iBAAkB,iBAGnB,GAAI4gB,OAAO2W,iBAAkB,CAC5B,IAAIutB,EAAYlkC,OAAO2W,iBAAiBr3B,GAExCykD,EAAMjpD,SAAQ,SAAUgqC,GACvBztC,EAAGsC,MAAMqqD,EAAOlf,IAASof,EAAUxT,iBAAiB5L,EACxD,GACA,CACA,CACA,EAEA9hC,EAAUjO,UAAU6rC,eAAe,SAAU4f,GAE7C,IAAI2D,EAAS,SAASA,EAAOtsD,GAE5BvC,KAAKuC,MAAQA,EAEbvC,KAAK8nD,WAAa,GAClB9nD,KAAKkvC,cAAgB,GACrBlvC,KAAK8uD,oBAAsB,GAE3B9uD,KAAK+uD,4BAA8B,GACnC/uD,KAAK+uD,4BAA8B,KAEnC/uD,KAAKm2B,QAAU,KAChB,EAGA04B,EAAOpvD,UAAU2U,iBAAmB,SAAU3N,EAAQ3G,GAClD,IAAC6F,EAAO3F,KACPmF,EAAQsB,EAAO+G,WAInB,SAASi1C,EAAQ3iD,GAChB,IAAIkvD,EAAavoD,EAAOjC,QAAQsK,OAAOmgD,SAAW,SAAWxoD,EAAOjC,QAAQsK,OAAOogD,UAAY,QAAUzoD,EAAOjC,QAAQsK,OAAOmgD,SAAW,WAAa,UAAY,QAC/JhhD,EAAO,GACPkhD,EAAoB,GACpBC,EAEJ,UAAW3oD,EAAOjC,QAAQsK,OAAOugD,cAAgB,aAAe5oD,EAAOjC,QAAQsK,OAAOugD,cAAgBvvD,EAAO,CAE5G2G,EAAOjC,QAAQsK,OAAOugD,YAAcvvD,EAEpC,IAAK2G,EAAOjC,QAAQsK,OAAOwgD,UAAUxvD,GAAQ,CAC5C2G,EAAOjC,QAAQsK,OAAOhP,MAAQA,EAE9B,OAAQV,EAAQqH,EAAOH,WAAWipD,mBACjC,IAAK,SACJ,GAAI5pD,EAAK0e,QAAQ5d,EAAOH,WAAWipD,kBAAmB,CACrDthD,EAAOxH,EAAOH,WAAWipD,iBACzBH,EAAa,SAASA,EAAWzqD,GAChC,IAAImT,EAASrR,EAAOH,WAAWkpD,wBAA0B,GACzD,IAAIC,EAAWhpD,EAAOgK,cAAc9L,GAEpCmT,SAAgBA,IAAW,WAAaA,EAAOhY,EAAO2vD,EAAU9qD,GAAQmT,EAExE,OAAOnS,EAAK0e,QAAQ5d,EAAOH,WAAWipD,kBAAkBzvD,EAAO2vD,EAAU9qD,EAAMmT,EACvF,CACA,KAAa,CACNzL,QAAQC,KAAK,6DAA8D7F,EAAOH,WAAWipD,iBACpG,CACM,MAED,IAAK,WACJH,EAAa,SAASA,EAAWzqD,GAChC,IAAImT,EAASrR,EAAOH,WAAWkpD,wBAA0B,GACzD,IAAIC,EAAWhpD,EAAOgK,cAAc9L,GAEpCmT,SAAgBA,IAAW,WAAaA,EAAOhY,EAAO2vD,EAAU9qD,GAAQmT,EAExE,OAAOrR,EAAOH,WAAWipD,iBAAiBzvD,EAAO2vD,EAAU9qD,EAAMmT,EACxE,EAEM7J,EAAOmhD,EACP,MAGF,IAAKA,EAAY,CAChB,OAAQJ,GACP,IAAK,UACJI,EAAa,SAASA,EAAWzqD,GAChC,IAAI+qD,EAASjpD,EAAOgK,cAAc9L,GAElC,UAAW+qD,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAO9uD,OAAO8uD,GAAQhgB,cAAczuC,QAAQL,OAAOd,GAAO4vC,gBAAkB,CACrF,KAAe,CACN,OAAO,KAChB,CACA,EACOzhC,EAAO,OACP,MAED,QACCmhD,EAAa,SAASA,EAAWzqD,GAChC,OAAO8B,EAAOgK,cAAc9L,IAAS7E,CAC7C,EACOmO,EAAO,IAEd,CAEItI,EAAKupC,cAAc/pC,GAAS,CAAErF,MAAOA,EAAO6vD,KAAMP,EAAYnhD,KAAMA,EAAM6J,OAAkB,GAChG,KAAU,QACCnS,EAAKupC,cAAc/pC,EAC9B,CAEGgqD,EAAoBj+B,KAAK2jB,UAAUlvC,EAAKupC,eAExC,GAAIvpC,EAAKopD,8BAAgCI,EAAmB,CAC3DxpD,EAAKopD,4BAA8BI,EAEnCxpD,EAAKwwB,QAAU,KACfxwB,EAAKpD,MAAMM,WAAW4hB,eAC1B,CACA,CAEE,OAAO,IACT,CAEChe,EAAOjC,QAAQsK,OAAS,CACvB2zC,QAASA,EACTyM,SAAU,MACVD,QAAS,MACTK,UAAW,OAGZtvD,KAAK4vD,4BAA4BnpD,EAClC,EAEAooD,EAAOpvD,UAAUmwD,4BAA8B,SAAUnpD,EAAQwsB,EAAc7sB,GAC9E,IAAIypD,EAAU7vD,KAEd,IAAI2F,EAAO3F,KACPyiD,EAAUh8C,EAAOjC,QAAQsK,OAAO2zC,QAChCt9C,EAAQsB,EAAO+G,WACfsiD,EACA15C,EACA25C,EACA1B,EACA2B,EACAC,EACAn4C,EAGJ,SAAS4pC,IAAS,CAElB,GAAIj7C,EAAOjC,QAAQsK,OAAOohD,eAAiBzpD,EAAOjC,QAAQsK,OAAOohD,cAAcjpD,WAAY,CAC1FR,EAAOuJ,eAAepK,YAAYa,EAAOjC,QAAQsK,OAAOohD,cAAcjpD,WACxE,CAEC,GAAI9B,EAAO,CAGVsB,EAAOjC,QAAQsK,OAAOwgD,UAAY7oD,EAAOH,WAAW6pD,wBAA0B,SAAUrwD,GACvF,OAAQA,GAASA,IAAU,KAAOA,IAAU,CAC/C,EAEEgwD,EAAgBzsD,SAASC,cAAc,OACvCwsD,EAAcvsD,UAAUC,IAAI,2BAG5B,OAAQpE,EAAQqH,EAAOH,WAAW+N,eACjC,IAAK,SACJ,GAAI1O,EAAKpD,MAAMiC,QAAQ6R,KAAKmrC,QAAQ/6C,EAAOH,WAAW+N,cAAe,CACpE+B,EAASzQ,EAAKpD,MAAMiC,QAAQ6R,KAAKmrC,QAAQ/6C,EAAOH,WAAW+N,cAE3D,IAAK5N,EAAOH,WAAW+N,eAAiB,QAAU5N,EAAOH,WAAW+N,eAAiB,eAAiB5N,EAAOH,WAAW6pD,uBAAwB,CAC/I1pD,EAAOjC,QAAQsK,OAAOwgD,UAAY,SAAUxvD,GAC3C,OAAOA,IAAU,MAAQA,IAAU,KAC1C,CACA,CACA,KAAW,CACNuM,QAAQC,KAAK,oEAAqE7F,EAAOH,WAAW8P,OACzG,CACI,MAED,IAAK,WACJA,EAAS3P,EAAOH,WAAW+N,aAC3B,MAED,IAAK,UACJ,GAAI5N,EAAOjC,QAAQ6R,MAAQ5P,EAAOjC,QAAQ6R,KAAKD,OAAQ,CACtDA,EAAS3P,EAAOjC,QAAQ6R,KAAKD,MAClC,KAAW,CACN,GAAI3P,EAAOH,WAAWsR,WAAajS,EAAKpD,MAAMiC,QAAQ6R,KAAKmrC,QAAQ/6C,EAAOH,WAAWsR,WAAY,CAChGxB,EAASzQ,EAAKpD,MAAMiC,QAAQ6R,KAAKmrC,QAAQ/6C,EAAOH,WAAWsR,WAE3D,IAAKnR,EAAOH,WAAWsR,YAAc,QAAUnR,EAAOH,WAAWsR,YAAc,eAAiBnR,EAAOH,WAAW6pD,uBAAwB,CACzI1pD,EAAOjC,QAAQsK,OAAOwgD,UAAY,SAAUxvD,GAC3C,OAAOA,IAAU,MAAQA,IAAU,KAC3C,CACA,CACA,KAAY,CACNsW,EAASzQ,EAAKpD,MAAMiC,QAAQ6R,KAAKmrC,QAAQ,QAC/C,CACA,CACI,MAGF,GAAIprC,EAAQ,CAEXi4C,EAAc,CACbl2C,SAAU,SAASA,IAClB,cAAc8a,IAAiB,YAAcA,EAAe,EACjE,EACIzlB,SAAU,SAASA,IAClB,OAAO/G,EAAOH,WAAWnB,KAC9B,EACIrB,WAAY,SAASA,IACpB,OAAOgsD,CACZ,EACI38B,UAAW,SAASA,IACnB,OAAO1sB,EAAOmD,cACnB,EACIspB,OAAQ,SAASA,IAChB,MAAO,CACN/K,gBAAiB,SAASA,IAAkB,EAElD,GAGGrQ,EAASrR,EAAOH,WAAW8pD,oBAAsB,GAEjDt4C,SAAgBA,IAAW,WAAaA,EAAOrX,KAAKkF,EAAKpD,OAASuV,EAElEi4C,EAAgB35C,EAAO3V,KAAKT,KAAKuC,MAAMiC,QAAQ6R,KAAMg4C,GAAa,WAAY,GAAI5L,EAASf,EAAQ5pC,GAEnG,IAAKi4C,EAAe,CACnB1jD,QAAQC,KAAK,uCAAyCnH,EAAQ,6CAC9D,MACJ,CAEG,KAAM4qD,aAAyB13C,MAAO,CACrChM,QAAQC,KAAK,uCAAyCnH,EAAQ,0EAA2E4qD,GACzI,MACJ,CAGG,GAAI5qD,EAAO,CACVQ,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,yBAA2BnN,EAAOH,WAAWnB,OAAO,SAAUrF,GAC9FiwD,EAAcp9C,aAAa,qBAAsB7S,IAAU,aAAeA,EAAQA,EAAQ6F,EAAKpD,MAAMiC,QAAQmP,SAASk8B,QAAQ,yBACnI,GACA,KAAU,CACNlqC,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,yBAAyB,SAAU9T,GACnEiwD,EAAcp9C,aAAa,qBAAsBhN,EAAKc,OAAOH,WAAWgO,0BAA4B,aAAe3O,EAAKc,OAAOH,WAAWgO,wBAA0B3O,EAAKc,OAAOH,WAAWgO,wBAA0BxU,EAC1N,GACA,CAGGiwD,EAAcp7C,iBAAiB,SAAS,SAAUC,GACjDA,EAAE0C,kBACFy4C,EAAcx4C,OAClB,IAEGw4C,EAAcp7C,iBAAiB,SAAS,SAAUC,GACjD,IAAI3Q,EAAO4rD,EAAQttD,MAAMmI,cAAc/H,QAAQM,WAE/C,GAAIgB,IAAS4rD,EAAQttD,MAAMM,WAAWF,QAAQM,WAAY,CACzD4sD,EAAQttD,MAAMM,WAAWmB,iBAAiBC,GAC1C4rD,EAAQttD,MAAMmI,cAAc1G,iBAAiBC,EAClD,CACA,IAGG+rD,EAAc,MAEdC,EAAgB,SAASA,EAAcr7C,GACtC,GAAIo7C,EAAa,CAChB16C,aAAa06C,EAClB,CAEIA,EAAcz6C,YAAW,WACxBktC,EAAQsN,EAAcjwD,MAC3B,GAAO6F,EAAKpD,MAAMkB,QAAQg4B,4BAC1B,EAEGh1B,EAAOjC,QAAQsK,OAAOohD,cAAgBH,EACtCtpD,EAAOjC,QAAQsK,OAAOogD,SAAWa,EAAcM,aAAa,QAAUN,EAAclM,aAAa,QAAQnU,cAAgB,GACzHjpC,EAAOjC,QAAQsK,OAAOmgD,QAAUc,EAAcluB,QAAQ6N,cAEtD,GAAIjpC,EAAOH,WAAWgqD,yBAA2B,MAAO,CAEvD,KAAM7pD,EAAOH,WAAW+N,eAAiB,gBAAkB5N,EAAOH,WAAW+N,eAAiB,cAAgB5N,EAAOH,WAAW8P,SAAW,gBAAkB3P,EAAOH,WAAW8P,SAAW,cAAgB3P,EAAOH,WAAW+N,eAAiB,MAAO,CACnP07C,EAAcp7C,iBAAiB,QAASs7C,GACxCF,EAAcp7C,iBAAiB,SAAUs7C,GAGzC,GAAIxpD,EAAOjC,QAAQsK,OAAOogD,UAAY,SAAU,CAC/Ca,EAAcp7C,iBAAiB,UAAU,SAAUC,GAClD6tC,EAAQsN,EAAcjwD,MAC7B,GACA,CAGK,GAAI2G,EAAOjC,QAAQsK,OAAOogD,UAAY,QAAUlvD,KAAKuC,MAAMonB,UAAY,KAAM,CAC5EomC,EAAcp9C,aAAa,OAAQ,SAEzC,CACA,CAGI,GAAIlM,EAAOjC,QAAQsK,OAAOmgD,SAAW,SAAWxoD,EAAOjC,QAAQsK,OAAOmgD,SAAW,UAAYxoD,EAAOjC,QAAQsK,OAAOmgD,SAAW,WAAY,CACzIc,EAAcp7C,iBAAiB,aAAa,SAAUC,GACrDA,EAAE0C,iBACR,GACA,CACA,CAEGw4C,EAAc1oD,YAAY2oD,GAE1BtpD,EAAOuJ,eAAe5I,YAAY0oD,GAElC,IAAK1pD,EAAc,CAClBT,EAAKmpD,oBAAoBvpD,KAAKkB,EAClC,CACA,CACA,KAAQ,CACN4F,QAAQC,KAAK,oEAAqE7F,EAAOH,WAAWlB,MACtG,CACA,EAGAypD,EAAOpvD,UAAUsb,yBAA2B,WAC3C/a,KAAK8uD,oBAAoBtpD,SAAQ,SAAUiB,GAC1C,GAAIA,EAAOjC,QAAQsK,QAAUrI,EAAOjC,QAAQsK,OAAOohD,cAAe,CACjEzpD,EAAOjC,QAAQsK,OAAOohD,cAAc7rD,MAAMoV,QAAU,MACvD,CACA,GACA,EAGAo1C,EAAOpvD,UAAUwb,yBAA2B,WAC3Cjb,KAAK8uD,oBAAoBtpD,SAAQ,SAAUiB,GAC1C,GAAIA,EAAOjC,QAAQsK,QAAUrI,EAAOjC,QAAQsK,OAAOohD,cAAe,CACjEzpD,EAAOjC,QAAQsK,OAAOohD,cAAc7rD,MAAMoV,QAAU,EACvD,CACA,GACA,EAGAo1C,EAAOpvD,UAAUsP,qBAAuB,SAAUtI,GACjD,GAAIA,EAAOjC,QAAQsK,QAAUrI,EAAOjC,QAAQsK,OAAOohD,cAAe,CACjEzpD,EAAOjC,QAAQsK,OAAOohD,cAAc34C,OACtC,KAAQ,CACNlL,QAAQC,KAAK,8DAA+D7F,EAAO+G,WACrF,CACA,EAGAqhD,EAAOpvD,UAAUwP,qBAAuB,SAAUxI,GACjD,GAAIA,EAAOjC,QAAQsK,QAAUrI,EAAOjC,QAAQsK,OAAOohD,cAAe,CACjE,OAAOzpD,EAAOjC,QAAQsK,OAAOohD,cAAcpwD,KAC7C,KAAQ,CACNuM,QAAQC,KAAK,wDAAyD7F,EAAO+G,WAC/E,CACA,EAGAqhD,EAAOpvD,UAAUyP,qBAAuB,SAAUzI,EAAQ3G,GACzD,GAAI2G,EAAQ,CACX,GAAIA,EAAOjC,QAAQsK,QAAUrI,EAAOjC,QAAQsK,OAAOohD,cAAe,CACjElwD,KAAK4vD,4BAA4BnpD,EAAQ3G,EAAO,MAChD2G,EAAOjC,QAAQsK,OAAO2zC,QAAQ3iD,EACjC,KAAS,CACNuM,QAAQC,KAAK,wDAAyD7F,EAAO+G,WAChF,CACA,CACA,EAEAqhD,EAAOpvD,UAAUuP,mBAAqB,SAAUvI,GAC/C,GAAIA,EAAQ,CACX,GAAIA,EAAOjC,QAAQsK,QAAUrI,EAAOjC,QAAQsK,OAAOohD,cAAe,CACjElwD,KAAK4vD,4BAA4BnpD,EAAQA,EAAOjC,QAAQsK,OAAOhP,MAAO,KACzE,KAAS,CACNuM,QAAQC,KAAK,wDAAyD7F,EAAO+G,WAChF,CACA,CACA,EAGAqhD,EAAOpvD,UAAU8wD,WAAa,WAC7B,IAAIp6B,EAAUn2B,KAAKm2B,QACnBn2B,KAAKm2B,QAAU,MACf,OAAOA,CACR,EAGA04B,EAAOpvD,UAAUkjC,UAAY,SAAUx9B,EAAO8I,EAAMnO,EAAOgY,GAC1D,IAAInS,EAAO3F,KAEX2F,EAAKmiD,WAAa,GAElB,IAAKpoD,MAAM2F,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAMnO,MAAOA,EAAOgY,OAAQA,GAC7D,CAECnS,EAAKoiC,UAAU5iC,EAChB,EAGA0pD,EAAOpvD,UAAUsoC,UAAY,SAAU5iC,EAAO8I,EAAMnO,EAAOgY,GAC1D,IAAInS,EAAO3F,KAEX,IAAKN,MAAM2F,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAMnO,MAAOA,EAAOgY,OAAQA,GAC7D,CAEC3S,EAAMK,SAAQ,SAAUsJ,GAEvBA,EAASnJ,EAAK6qD,WAAW1hD,GAEzB,GAAIA,EAAQ,CACXnJ,EAAKmiD,WAAWviD,KAAKuJ,GAErBnJ,EAAKwwB,QAAU,IAClB,CACA,IAEC,GAAIn2B,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAOkE,OAAQ,CAChI9O,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,SACtC,CACA,EAEAgkD,EAAOpvD,UAAU+wD,WAAa,SAAU1hD,GACvC,IAAInJ,EAAO3F,KACPyG,EAEJ,GAAI/G,MAAM2F,QAAQyJ,GAAS,CAC1B,OAAO9O,KAAKywD,eAAe3hD,EAC7B,CAEC,IAAIsgD,EAAa,MAEjB,UAAWtgD,EAAO3J,OAAS,WAAY,CACtCiqD,EAAa,SAASA,EAAWzqD,GAChC,OAAOmK,EAAO3J,MAAMR,EAAMmK,EAAOb,MAAQ,GAC5C,CACA,KAAQ,CAEN,GAAItI,EAAK0e,QAAQvV,EAAOb,MAAO,CAE9BxH,EAASd,EAAKpD,MAAMmI,cAAcpC,iBAAiBwG,EAAO3J,OAE1D,GAAIsB,EAAQ,CACX2oD,EAAa,SAASA,EAAWzqD,GAChC,OAAOgB,EAAK0e,QAAQvV,EAAOb,MAAMa,EAAOhP,MAAO2G,EAAOgK,cAAc9L,GAAOA,EAAMmK,EAAOgJ,QAAU,GACvG,CACA,KAAU,CACNs3C,EAAa,SAASA,EAAWzqD,GAChC,OAAOgB,EAAK0e,QAAQvV,EAAOb,MAAMa,EAAOhP,MAAO6E,EAAKmK,EAAO3J,OAAQR,EAAMmK,EAAOgJ,QAAU,GAC/F,CACA,CACA,KAAS,CACNzL,QAAQC,KAAK,uDAAwDwC,EAAOb,KAC/E,CACA,CAECa,EAAO6gD,KAAOP,EAEd,OAAOtgD,EAAO6gD,KAAO7gD,EAAS,KAC/B,EAEA+/C,EAAOpvD,UAAUgxD,eAAiB,SAAUpsC,GAC3C,IAAI1e,EAAO3F,KACPuJ,EAAS,GAEb8a,EAAQ7e,SAAQ,SAAUsJ,GACzBA,EAASnJ,EAAK6qD,WAAW1hD,GAEzB,GAAIA,EAAQ,CACXvF,EAAOhE,KAAKuJ,EACf,CACA,IAEC,OAAOvF,EAAOnJ,OAASmJ,EAAS,KACjC,EAGAslD,EAAOpvD,UAAU6kB,WAAa,SAAU0jB,EAAKjqB,GAC5C,IAAIxU,EAAS,GAEb,GAAIy+B,EAAK,CACRz+B,EAASvJ,KAAKioC,kBAChB,CAEC,GAAIlqB,EAAM,CACTxU,EAAO/D,SAAQ,SAAUkc,GACxB,UAAWA,EAAKzT,MAAQ,WAAY,CACnCyT,EAAKzT,KAAO,UAChB,CACA,GACA,CAEC1E,EAASA,EAAO4B,OAAOnL,KAAK0wD,eAAe1wD,KAAK8nD,WAAY/pC,IAE5D,OAAOxU,CACR,EAGAslD,EAAOpvD,UAAUixD,eAAiB,SAAU5I,EAAY/pC,GACvD,IAAI4yC,EAAU3wD,KAEd,IAAIuJ,EAAS,GAEbu+C,EAAWtiD,SAAQ,SAAUsJ,GAC5B,IAAI4S,EAEJ,GAAIhiB,MAAM2F,QAAQyJ,GAAS,CAC1BvF,EAAOhE,KAAKorD,EAAQD,eAAe5hD,EAAQiP,GAC9C,KAAS,CACN2D,EAAO,CAAEvc,MAAO2J,EAAO3J,MAAO8I,KAAMa,EAAOb,KAAMnO,MAAOgP,EAAOhP,OAE/D,GAAIie,EAAM,CACT,UAAW2D,EAAKzT,MAAQ,WAAY,CACnCyT,EAAKzT,KAAO,UACjB,CACA,CAEG1E,EAAOhE,KAAKmc,EACf,CACA,IAEC,OAAOnY,CACR,EAGAslD,EAAOpvD,UAAUwoC,iBAAmB,WAChC,IACC1+B,EAAS,GAEb,IAAK,IAAItE,KAAOjF,KAAKkvC,cAAe,CACnC3lC,EAAOhE,KAAK,CAAEJ,MAAOF,EAAKgJ,KAAMjO,KAAKkvC,cAAcjqC,GAAKgJ,KAAMnO,MAAOE,KAAKkvC,cAAcjqC,GAAKnF,OAC/F,CAEC,OAAOyJ,CACR,EAGAslD,EAAOpvD,UAAUyoC,aAAe,SAAU/iC,EAAO8I,EAAMnO,GACtD,IAAI6F,EAAO3F,KAEX,IAAKN,MAAM2F,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAMnO,MAAOA,GAC9C,CAECqF,EAAMK,SAAQ,SAAUsJ,GACvB,IAAI9M,GAAS,EAEb,GAAI5C,EAAQ0P,EAAO3J,QAAU,SAAU,CACtCnD,EAAQ2D,EAAKmiD,WAAWnoD,WAAU,SAAUgD,GAC3C,OAAOmM,IAAWnM,CACtB,GACA,KAAS,CACNX,EAAQ2D,EAAKmiD,WAAWnoD,WAAU,SAAUgD,GAC3C,OAAOmM,EAAO3J,QAAUxC,EAAQwC,OAAS2J,EAAOb,OAAStL,EAAQsL,MAAQa,EAAOhP,QAAU6C,EAAQ7C,KACtG,GACA,CAEE,GAAIkC,GAAS,EAAG,CACf2D,EAAKmiD,WAAW9gD,OAAOhF,EAAO,GAC9B2D,EAAKwwB,QAAU,IAClB,KAAS,CACN9pB,QAAQC,KAAK,2DAA4DwC,EAAOb,KACnF,CACA,IAEC,GAAIjO,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAOkE,OAAQ,CAChI9O,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,SACtC,CACA,EAGAgkD,EAAOpvD,UAAU0oC,YAAc,SAAUH,GACxChoC,KAAK8nD,WAAa,GAElB,GAAI9f,EAAK,CACRhoC,KAAKooC,mBACP,CAECpoC,KAAKm2B,QAAU,KAEf,GAAIn2B,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAOkE,OAAQ,CAChI9O,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,SACtC,CACA,EAGAgkD,EAAOpvD,UAAU2oC,kBAAoB,WACpC,IAAIziC,EAAO3F,KAEXA,KAAKkvC,cAAgB,GACrBvpC,EAAKopD,4BAA8B,KAEnC/uD,KAAK8uD,oBAAoBtpD,SAAQ,SAAUiB,GAC1C,UAAWA,EAAOjC,QAAQsK,OAAOhP,QAAU,YAAa,QAChD2G,EAAOjC,QAAQsK,OAAOhP,KAChC,CACE2G,EAAOjC,QAAQsK,OAAOugD,YAAc1uD,UACpCgF,EAAKqJ,mBAAmBvI,EAC1B,IAECzG,KAAKm2B,QAAU,IAChB,EAGA04B,EAAOpvD,UAAUqB,OAAS,SAAU8vD,EAAYzrD,EAAO8I,EAAMnO,GAC5D,IAAI6F,EAAO3F,KACPqK,EAAa,GACby9C,EAAa,GAEjB,IAAKpoD,MAAM2F,QAAQF,GAAQ,CAC1BA,EAAQ,CAAC,CAAEA,MAAOA,EAAO8I,KAAMA,EAAMnO,MAAOA,GAC9C,CAECqF,EAAMK,SAAQ,SAAUsJ,GACvBA,EAASnJ,EAAK6qD,WAAW1hD,GAEzB,GAAIA,EAAQ,CACXg5C,EAAWviD,KAAKuJ,EACnB,CACA,IAEC9O,KAAKuC,MAAMM,WAAWoI,KAAKzF,SAAQ,SAAUT,GAC5C,IAAIO,EAAQ,KAEZwiD,EAAWtiD,SAAQ,SAAUsJ,GAC5B,IAAKnJ,EAAKkrD,cAAc/hD,EAAQ/J,EAAIic,WAAY,CAC/C1b,EAAQ,KACZ,CACA,IAEE,GAAIA,EAAO,CACV+E,EAAW9E,KAAKqrD,IAAe,OAAS7rD,EAAIic,QAAQ,QAAUjc,EAAI6E,eACrE,CACA,IAEC,OAAOS,CACR,EAGAwkD,EAAOpvD,UAAUqP,OAAS,SAAUgiD,EAASzsC,GAC5C,IAAI1e,EAAO3F,KACPqK,EAAa,GACb0mD,EAAsB,GAE1B,GAAIprD,EAAKpD,MAAMkB,QAAQo8B,cAAe,CACrCl6B,EAAKpD,MAAMkB,QAAQo8B,cAAcp/B,KAAKkF,EAAKpD,MAAOoD,EAAK2e,aACzD,CAEC,IAAK3e,EAAKpD,MAAMkB,QAAQ2gB,gBAAkBze,EAAKmiD,WAAW1nD,QAAUR,OAAO+I,KAAKhD,EAAKupC,eAAe9uC,QAAS,CAE5G0wD,EAAQtrD,SAAQ,SAAUT,GACzB,GAAIY,EAAKqrD,UAAUjsD,GAAM,CACxBsF,EAAW9E,KAAKR,EACpB,CACA,GACA,KAAQ,CACNsF,EAAaymD,EAAQzrC,MAAM,EAC7B,CAEC,GAAI1f,EAAKpD,MAAMkB,QAAQq8B,aAAc,CAEpCz1B,EAAW7E,SAAQ,SAAUT,GAC5BgsD,EAAoBxrD,KAAKR,EAAI6E,eAChC,IAEEjE,EAAKpD,MAAMkB,QAAQq8B,aAAar/B,KAAKkF,EAAKpD,MAAOoD,EAAK2e,aAAcysC,EACtE,CAEC,OAAO1mD,CACR,EAGAwkD,EAAOpvD,UAAUuxD,UAAY,SAAUjsD,EAAKsf,GAC3C,IAAI1e,EAAO3F,KACPsF,EAAQ,KACRX,EAAOI,EAAIic,UAEfrb,EAAKmiD,WAAWtiD,SAAQ,SAAUsJ,GACjC,IAAKnJ,EAAKkrD,cAAc/hD,EAAQnK,GAAO,CACtCW,EAAQ,KACX,CACA,IAEC,IAAK,IAAIH,KAASQ,EAAKupC,cAAe,CACrC,IAAKvpC,EAAKupC,cAAc/pC,GAAOwqD,KAAKhrD,GAAO,CAC1CW,EAAQ,KACX,CACA,CAEC,OAAOA,CACR,EAEAupD,EAAOpvD,UAAUoxD,cAAgB,SAAU/hD,EAAQnK,GAClD,IAAIgB,EAAO3F,KACPsF,EAAQ,MAEZ,GAAI5F,MAAM2F,QAAQyJ,GAAS,CAC1BA,EAAOtJ,SAAQ,SAAUyrD,GACxB,GAAItrD,EAAKkrD,cAAcI,EAAWtsD,GAAO,CACxCW,EAAQ,IACZ,CACA,GACA,KAAQ,CACNA,EAAQwJ,EAAO6gD,KAAKhrD,EACtB,CAEC,OAAOW,CACR,EAGAupD,EAAOpvD,UAAU4kB,QAAU,CAG1B,IAAK,SAAS6sC,EAAEC,EAAWC,EAAQ5a,EAAS6a,GAC3C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAGC,IAAK,SAASD,EAAEC,EAAWC,EAAQ5a,EAAS6a,GAC3C,OAAOD,EAASD,EAAY,KAAO,KACrC,EAGC,KAAM,SAASD,EAAEC,EAAWC,EAAQ5a,EAAS6a,GAC5C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAGC,IAAK,SAASD,EAAEC,EAAWC,EAAQ5a,EAAS6a,GAC3C,OAAOD,EAASD,EAAY,KAAO,KACrC,EAGC,KAAM,SAASD,EAAEC,EAAWC,EAAQ5a,EAAS6a,GAC5C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAGC,KAAM,SAASD,EAAEC,EAAWC,EAAQ5a,EAAS6a,GAC5C,OAAOD,GAAUD,EAAY,KAAO,KACtC,EAECG,MAAS,SAASA,EAAMH,EAAWC,EAAQ5a,EAAS6a,GAEnD,UAAWF,GAAa,SAAU,CACjCA,EAAY,IAAInwD,OAAOmwD,EAC1B,CAEE,OAAOA,EAAU7tB,KAAK8tB,EACxB,EAGCG,KAAQ,SAASA,EAAKJ,EAAWC,EAAQ5a,EAAS6a,GACjD,GAAIF,IAAc,aAAeA,IAAc,YAAa,CAC3D,OAAOC,IAAWD,EAAY,KAAO,KACxC,KAAS,CACN,UAAWC,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAOxwD,OAAOwwD,GAAQ1hB,cAAczuC,QAAQkwD,EAAUzhB,gBAAkB,CAC5E,KAAU,CACN,OAAO,KACX,CACA,CACA,EAGC8hB,SAAY,SAASA,EAASL,EAAWC,EAAQ5a,EAAS6a,GACzD,IAAIG,EAAWL,EAAUzhB,cAAc7mC,aAAawoD,EAAaI,YAAc,YAAc,IAAMJ,EAAaI,WAC5G3xD,EAAQc,OAAOwwD,IAAW,aAAeA,IAAW,YAAc,GAAKA,GAAQ1hB,cAC/EhnC,EAAU,GAEd8oD,EAAShsD,SAAQ,SAAUksD,GAC1B,GAAI5xD,EAAMe,SAAS6wD,GAAU,CAC5BhpD,EAAQnD,KAAK,KACjB,CACA,IAEE,OAAO8rD,EAAaM,SAAWjpD,EAAQtI,SAAWoxD,EAASpxD,SAAWsI,EAAQtI,MAChF,EAGCwxD,OAAU,SAASA,EAAOT,EAAWC,EAAQ5a,EAAS6a,GACrD,GAAIF,IAAc,aAAeA,IAAc,YAAa,CAC3D,OAAOC,IAAWD,EAAY,KAAO,KACxC,KAAS,CACN,UAAWC,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAOxwD,OAAOwwD,GAAQ1hB,cAAc6X,WAAW4J,EAAUzhB,cAC7D,KAAU,CACN,OAAO,KACX,CACA,CACA,EAGCmiB,KAAQ,SAASA,EAAKV,EAAWC,EAAQ5a,EAAS6a,GACjD,GAAIF,IAAc,aAAeA,IAAc,YAAa,CAC3D,OAAOC,IAAWD,EAAY,KAAO,KACxC,KAAS,CACN,UAAWC,IAAW,aAAeA,IAAW,KAAM,CACrD,OAAOxwD,OAAOwwD,GAAQ1hB,cAAcoiB,SAASX,EAAUzhB,cAC3D,KAAU,CACN,OAAO,KACX,CACA,CACA,EAGCqiB,GAAM,SAASC,EAAIb,EAAWC,EAAQ5a,EAAS6a,GAC9C,GAAI3xD,MAAM2F,QAAQ8rD,GAAY,CAC7B,OAAOA,EAAU/wD,OAAS+wD,EAAUlwD,QAAQmwD,IAAW,EAAI,IAC9D,KAAS,CACN/kD,QAAQC,KAAK,+CAAgD6kD,GAC7D,OAAO,KACV,CACA,GAGAzjD,EAAUjO,UAAU6rC,eAAe,SAAUujB,GAE7C,IAAIoD,EAAS,SAASA,EAAO1vD,GAC5BvC,KAAKuC,MAAQA,CACd,EAGA0vD,EAAOxyD,UAAU2U,iBAAmB,SAAU3N,GAC7CA,EAAOjC,QAAQ2R,OAASnW,KAAKkyD,gBAAgBzrD,EAAQ,IAErD,UAAWA,EAAOH,WAAW6rD,iBAAmB,YAAa,CAC5D1rD,EAAOjC,QAAQ2R,OAAOysB,MAAQ5iC,KAAKkyD,gBAAgBzrD,EAAQ,QAC7D,CAEC,UAAWA,EAAOH,WAAW8rD,qBAAuB,YAAa,CAChE3rD,EAAOjC,QAAQ2R,OAAO6iB,UAAYh5B,KAAKkyD,gBAAgBzrD,EAAQ,YACjE,CAEC,UAAWA,EAAOH,WAAW+rD,sBAAwB,YAAa,CACjE5rD,EAAOjC,QAAQ2R,OAAO/C,WAAapT,KAAKkyD,gBAAgBzrD,EAAQ,aAClE,CACA,EAEAwrD,EAAOxyD,UAAUyyD,gBAAkB,SAAUzrD,EAAQwH,GACpD,IAAIrD,EAAS,CAAEkN,OAAQrR,EAAOH,WAAW,YAAc2H,EAAO,WAAa,IACvE2J,EAAYnR,EAAOH,WAAW,YAAc2H,GAGhD,cAAe2J,IAAc,YAAc,YAAcxY,EAAQwY,IAChE,IAAK,SAEJ,GAAIA,IAAc,OAAQ,CACzBA,EAAY,YAEZ,UAAWhN,EAAOkN,OAAOw6C,cAAgB,YAAa,CACrD1nD,EAAOkN,OAAOw6C,aAAe,KAClC,CAEIjmD,QAAQC,KAAK,4IACjB,CAEG,GAAItM,KAAKuyD,WAAW36C,GAAY,CAC/BhN,EAAOgN,UAAY5X,KAAKuyD,WAAW36C,EACvC,KAAU,CACNvL,QAAQC,KAAK,8CAA+CsL,GAC5DhN,EAAOgN,UAAY5X,KAAKuyD,WAAWC,SACvC,CACG,MAED,IAAK,WACJ5nD,EAAOgN,UAAYA,EACnB,MAED,QACChN,EAAOgN,UAAY5X,KAAKuyD,WAAWC,UACnC,MAGF,OAAO5nD,CACR,EAEAqnD,EAAOxyD,UAAUotB,aAAe,SAAUvhB,GACzC,GAAIA,EAAK9G,QAAQ2R,QAAU7K,EAAK9G,QAAQ2R,OAAOq4C,mBAAqBljD,EAAK9G,QAAQ2R,OAAOosC,SAAU,CACjGj3C,EAAK9G,QAAQ2R,OAAOq4C,mBACpBljD,EAAK9G,QAAQ2R,OAAOosC,SAAW,IACjC,CACA,EAGA0P,EAAOxyD,UAAUu2B,YAAc,SAAU1qB,GACxC,IAAI0G,EAAY1G,EAAK1B,eACjBkO,SAAgBxM,EAAK7E,OAAOjC,QAAQ2R,OAAO2B,SAAW,WAAaxM,EAAK7E,OAAOjC,QAAQ2R,OAAO2B,OAAO9F,GAAa1G,EAAK7E,OAAOjC,QAAQ2R,OAAO2B,OAEjJ,SAASE,EAAW5O,GACnB,IAAKkC,EAAK9G,QAAQ2R,OAAQ,CACzB7K,EAAK9G,QAAQ2R,OAAS,EACzB,CAEE7K,EAAK9G,QAAQ2R,OAAOq4C,iBAAmBplD,EACvCkC,EAAK9G,QAAQ2R,OAAOosC,SAAW,KACjC,CAEC,OAAOj3C,EAAK7E,OAAOjC,QAAQ2R,OAAOyB,UAAUnX,KAAKT,KAAMgS,EAAW8F,EAAQE,EAC3E,EAEAi6C,EAAOxyD,UAAU8uD,kBAAoB,SAAUjjD,EAAM2C,GACpD,IAAI2J,EAAYtM,EAAK7E,OAAOjC,QAAQ2R,OAAOlI,GACvC6J,EAEJ,GAAIF,EAAW,CACd,IAAII,EAAa,SAASA,EAAW5O,GACpC,IAAKkC,EAAK9G,QAAQ2R,OAAQ,CACzB7K,EAAK9G,QAAQ2R,OAAS,EAC1B,CAEG7K,EAAK9G,QAAQ2R,OAAOq4C,iBAAmBplD,EACvCkC,EAAK9G,QAAQ2R,OAAOosC,SAAW,KAClC,EAEEzqC,SAAgBF,EAAUE,SAAW,WAAaF,EAAUE,OAAO9F,WAAa4F,EAAUE,OAE1F,OAAOF,EAAUA,UAAUnX,KAAKT,KAAMsL,EAAK1B,eAAgBkO,EAAQE,EACrE,KAAQ,CACN,OAAOhY,KAAKg2B,YAAY1qB,EAC1B,CACA,EAEA2mD,EAAOxyD,UAAUgzD,aAAe,SAAU3yD,GACzC,GAAIA,EAAO,CACV,IAAI4yD,EAAY,CACf,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,UAGN,OAAO9xD,OAAOd,GAAOq6C,QAAQ,gBAAgB,SAAU4F,GACtD,OAAO2S,EAAU3S,EACpB,GACA,KAAQ,CACN,OAAOjgD,CACT,CACA,EAEAmyD,EAAOxyD,UAAUkzD,aAAe,SAAU7yD,GACzC,OAAOA,IAAU,aAAeA,IAAU,aAAeA,IAAU,GAAK,SAAWA,CACpF,EAGAmyD,EAAOxyD,UAAUyY,aAAe,SAAUN,GACzC,IAAIA,EAEJ,cAAeA,IAAc,YAAc,YAAcxY,EAAQwY,IAChE,IAAK,SACJ,GAAI5X,KAAKuyD,WAAW36C,GAAY,CAC/BA,EAAY5X,KAAKuyD,WAAW36C,EAChC,KAAU,CACNvL,QAAQC,KAAK,8CAA+CsL,GAC5DA,EAAY5X,KAAKuyD,WAAWC,SAChC,CACG,MAED,IAAK,WACJ56C,EAAYA,EACZ,MAED,QACCA,EAAY5X,KAAKuyD,WAAWC,UAC5B,MAGF,OAAO56C,CACR,EAGAq6C,EAAOxyD,UAAU8yD,WAAa,CAE7BC,UAAW,SAASA,EAAUlnD,EAAMsnD,EAAiB56C,GACpD,OAAOhY,KAAK2yD,aAAa3yD,KAAKyyD,aAAannD,EAAK6M,YAClD,EAGCygC,KAAM,SAASA,EAAKttC,EAAMsnD,EAAiB56C,GAC1C,OAAO1M,EAAK6M,UACd,EAGC4rC,SAAU,SAASA,EAASz4C,EAAMsnD,EAAiB56C,GAClD1M,EAAKxH,aAAaO,MAAM6/C,WAAa,WACrC,OAAOlkD,KAAK2yD,aAAa3yD,KAAKyyD,aAAannD,EAAK6M,YAClD,EAGC06C,MAAO,SAASA,EAAMvnD,EAAMsnD,EAAiB56C,GAC5C,IAAI86C,EAAW5a,WAAW5sC,EAAK6M,YAC3BosC,EACAwO,EACAC,EACAC,EAEJ,IAAIC,EAAaN,EAAgBI,SAAW,IAC5C,IAAIG,EAAcP,EAAgBQ,UAAY,IAC9C,IAAIhQ,EAASwP,EAAgBxP,QAAU,GACvC,IAAIn5C,IAAU2oD,EAAgBS,YAC9B,IAAIxb,SAAmB+a,EAAgB/a,YAAc,YAAc+a,EAAgB/a,UAAY,EAE/F,GAAIl2C,MAAMmxD,GAAW,CACpB,OAAO9yD,KAAK2yD,aAAa3yD,KAAKyyD,aAAannD,EAAK6M,YACnD,CAEEosC,EAAS1M,IAAc,MAAQib,EAAS7a,QAAQJ,GAAaib,EAC7DvO,EAAS3jD,OAAO2jD,GAAQ17C,MAAM,KAE9BkqD,EAAUxO,EAAO,GACjByO,EAAUzO,EAAOnkD,OAAS,EAAI8yD,EAAa3O,EAAO,GAAK,GAEvD0O,EAAM,eAEN,MAAOA,EAAI3vB,KAAKyvB,GAAU,CACzBA,EAAUA,EAAQ5Y,QAAQ8Y,EAAK,KAAOE,EAAc,KACvD,CAEE,OAAOlpD,EAAQ8oD,EAAUC,EAAU5P,EAASA,EAAS2P,EAAUC,CACjE,EAGCt7B,KAAM,SAASA,EAAKpsB,EAAMsnD,EAAiB56C,GAC1C,IAAIlY,EAAQwL,EAAK6M,WACbm7C,EAAYV,EAAgBU,WAAa,GACzC3oB,EAAWioB,EAAgBjoB,SAC3Bob,EAAQjmD,EACRsD,EAAKC,SAASC,cAAc,KAC5BqB,EAEJ,GAAIiuD,EAAgBW,WAAY,CAC/B5uD,EAAO2G,EAAK0V,UACZ+kC,EAAQphD,EAAKiuD,EAAgBW,WAChC,CAEE,GAAIX,EAAgB7M,MAAO,CAC1B,OAAQ3mD,EAAQwzD,EAAgB7M,QAC/B,IAAK,SACJA,EAAQ6M,EAAgB7M,MACxB,MAED,IAAK,WACJA,EAAQ6M,EAAgB7M,MAAMz6C,GAC9B,MAEL,CAEE,GAAIy6C,EAAO,CACV,GAAI6M,EAAgBY,SAAU,CAC7B7uD,EAAO2G,EAAK0V,UACZlhB,EAAQ6E,EAAKiuD,EAAgBY,SACjC,CAEG,GAAIZ,EAAgB7gB,IAAK,CACxB,OAAQ3yC,EAAQwzD,EAAgB7gB,MAC/B,IAAK,SACJjyC,EAAQ8yD,EAAgB7gB,IACxB,MAED,IAAK,WACJjyC,EAAQ8yD,EAAgB7gB,IAAIzmC,GAC5B,MAEN,CAEGlI,EAAGuP,aAAa,OAAQ2gD,EAAYxzD,GAEpC,GAAI8yD,EAAgB/wD,OAAQ,CAC3BuB,EAAGuP,aAAa,SAAUigD,EAAgB/wD,OAC9C,CAEG,GAAI+wD,EAAgBjoB,SAAU,CAE7B,UAAWA,GAAY,WAAY,CAClCA,EAAWA,EAASr/B,EACzB,KAAW,CACNq/B,EAAWA,IAAa,KAAO,GAAKA,CACzC,CAEIvnC,EAAGuP,aAAa,WAAYg4B,EAChC,CAEGvnC,EAAGkV,UAAYtY,KAAK2yD,aAAa3yD,KAAKyyD,aAAa1M,IAEnD,OAAO3iD,CACV,KAAS,CACN,MAAO,QACV,CACA,EAGCqwD,MAAO,SAASA,EAAMnoD,EAAMsnD,EAAiB56C,GAC5C,IAAI5U,EAAKC,SAASC,cAAc,OAC5BowD,EAAMpoD,EAAK6M,WAEf,GAAIy6C,EAAgBU,UAAW,CAC9BI,EAAMd,EAAgBU,UAAYhoD,EAAK6M,UAC1C,CAEE,GAAIy6C,EAAgBe,UAAW,CAC9BD,EAAMA,EAAMd,EAAgBe,SAC/B,CAEEvwD,EAAGuP,aAAa,MAAO+gD,GAEvB,OAAQt0D,EAAQwzD,EAAgBjrD,SAC/B,IAAK,SACJvE,EAAGiB,MAAMsD,OAASirD,EAAgBjrD,OAAS,KAC3C,MAED,IAAK,SACJvE,EAAGiB,MAAMsD,OAASirD,EAAgBjrD,OAClC,MAGF,OAAQvI,EAAQwzD,EAAgB9oD,QAC/B,IAAK,SACJ1G,EAAGiB,MAAMyF,MAAQ8oD,EAAgB9oD,MAAQ,KACzC,MAED,IAAK,SACJ1G,EAAGiB,MAAMyF,MAAQ8oD,EAAgB9oD,MACjC,MAGF1G,EAAGuR,iBAAiB,QAAQ,WAC3BrJ,EAAK4nB,SAAS/K,iBACjB,IAEE,OAAO/kB,CACT,EAGConD,UAAW,SAASA,EAAUl/C,EAAMsnD,EAAiB56C,GACpD,IAAIlY,EAAQwL,EAAK6M,WACbxV,EAAU2I,EAAKxH,aACf49B,EAAQkxB,EAAgB/J,WACxB+K,EAAShB,EAAgBiB,YACzBC,SAAclB,EAAgBmB,cAAgB,YAAcnB,EAAgBmB,YAAc,qkBAC1FC,SAAepB,EAAgBN,eAAiB,YAAcM,EAAgBN,aAAe,4rBAEjG,GAAIsB,GAAU9zD,GAASA,IAAU,MAAQA,IAAU,QAAUA,IAAU,QAAUA,IAAU,GAAKA,IAAU,IAAK,CAC9G6C,EAAQgQ,aAAa,eAAgB,MACrC,OAAOmhD,GAAQ,EAClB,KAAS,CACN,GAAIpyB,IAAU5hC,IAAU,QAAUA,IAAU,IAAMA,IAAU,aAAeA,IAAU,aAAc,CAClG6C,EAAQgQ,aAAa,eAAgB,SACrC,MAAO,EACX,KAAU,CACNhQ,EAAQgQ,aAAa,eAAgB,OACrC,OAAOqhD,GAAS,EACpB,CACA,CACA,EAECC,SAAU,SAASA,EAAS3oD,EAAMsnD,EAAiB56C,GAClD,IAAIk8C,EAActB,EAAgBsB,aAAe,sBACjD,IAAIC,EAAevB,EAAgBuB,cAAgB,sBACnD,IAAIx5C,SAAiBi4C,EAAgBwB,qBAAuB,YAAcxB,EAAgBwB,mBAAqB,GAC/G,IAAIt0D,EAAQwL,EAAK6M,WAEjB,IAAIk8C,EAAcC,OAAOx0D,EAAOo0D,GAEhC,GAAIG,EAAYzgC,UAAW,CAC1B,OAAOg/B,EAAgB2B,SAAWF,EAAYG,GAAG5B,EAAgB2B,UAAUp+C,OAAOg+C,GAAgBE,EAAYl+C,OAAOg+C,EACxH,KAAS,CAEN,GAAIx5C,IAAY,KAAM,CACrB,OAAO7a,CACX,MAAU,UAAW6a,IAAY,WAAY,CACzC,OAAOA,EAAQ7a,EACnB,KAAU,CACN,OAAO6a,CACX,CACA,CACA,EAEC85C,aAAc,SAASR,EAAS3oD,EAAMsnD,EAAiB56C,GACtD,IAAIk8C,EAActB,EAAgBsB,aAAe,sBACjD,IAAIv5C,SAAiBi4C,EAAgBwB,qBAAuB,YAAcxB,EAAgBwB,mBAAqB,GAC/G,IAAIM,SAAgB9B,EAAgB8B,SAAW,YAAc9B,EAAgB8B,OAAS,MACtF,IAAIhW,SAAckU,EAAgBlU,OAAS,YAAckU,EAAgBlU,KAAO/9C,UAChF,IAAIg0D,SAAkB/B,EAAgB+B,WAAa,YAAc/B,EAAgB+B,SAAW,MAC5F,IAAIC,SAAchC,EAAgBgC,OAAS,YAAchC,EAAgBgC,KAAON,SAChF,IAAIx0D,EAAQwL,EAAK6M,WAEjB,IAAIk8C,EAAcC,OAAOx0D,EAAOo0D,GAEhC,GAAIG,EAAYzgC,UAAW,CAC1B,GAAI+gC,EAAU,CACb,OAAOL,OAAOO,SAASR,EAAYvtC,KAAK8tC,IAAOD,SAASD,EAC5D,KAAU,CACN,OAAOL,EAAYvtC,KAAK8tC,EAAMlW,IAASgW,EAAS,IAAMA,EAAS,GACnE,CACA,KAAS,CAEN,GAAI/5C,IAAY,KAAM,CACrB,OAAO7a,CACX,MAAU,UAAW6a,IAAY,WAAY,CACzC,OAAOA,EAAQ7a,EACnB,KAAU,CACN,OAAO6a,CACX,CACA,CACA,EAGC+zC,OAAQ,SAASA,EAAOpjD,EAAMsnD,EAAiB56C,GAC9C,IAAIlY,EAAQwL,EAAK6M,WAEjB,UAAWy6C,EAAgB9yD,KAAW,YAAa,CAClDuM,QAAQC,KAAK,6BAA+BxM,GAC5C,OAAOA,CACV,CAEE,OAAO8yD,EAAgB9yD,EACzB,EAGCkpD,KAAM,SAASA,EAAK19C,EAAMsnD,EAAiB56C,GAC1C,IAAIlY,EAAQwL,EAAK6M,WACbxV,EAAU2I,EAAKxH,aACfmlD,EAAW2J,GAAmBA,EAAgBzJ,MAAQyJ,EAAgBzJ,MAAQ,EAC9EA,EAAQ9lD,SAASC,cAAc,QAC/B0lD,EAAO3lD,SAASgmD,gBAAgB,6BAA8B,OAC9DyL,EAAa,0SACbC,EAAe,0SAGnB5L,EAAM9kD,MAAMyD,cAAgB,SAG5BkhD,EAAKr2C,aAAa,QAAS,MAC3Bq2C,EAAKr2C,aAAa,SAAU,MAC5Bq2C,EAAKr2C,aAAa,UAAW,eAC7Bq2C,EAAKr2C,aAAa,YAAa,YAC/Bq2C,EAAK3kD,MAAMq/C,QAAU,QAErB5jD,EAAQA,IAAU6B,MAAM7B,GAASmN,SAASnN,GAAS,EAEnDA,EAAQuB,KAAKC,IAAI,EAAGD,KAAK+K,IAAItM,EAAOmpD,IAEpC,IAAK,IAAInjD,EAAI,EAAGA,GAAKmjD,EAAUnjD,IAAK,CACnC,IAAI2jD,EAAWT,EAAK9N,UAAU,MAC9BuO,EAASnxC,UAAYxS,GAAKhG,EAAQg1D,EAAaC,EAE/C5L,EAAM/hD,YAAYqiD,EACrB,CAEE9mD,EAAQ0B,MAAM6/C,WAAa,SAC3BvhD,EAAQ0B,MAAMslD,SAAW,SACzBhnD,EAAQ0B,MAAMulD,aAAe,WAE7BjnD,EAAQgQ,aAAa,aAAc7S,GAEnC,OAAOqpD,CACT,EAEC6L,QAAS,SAASA,EAAQ1pD,EAAMsnD,EAAiB56C,GAChD,IAAIlY,EAAQE,KAAKyyD,aAAannD,EAAK6M,aAAe,EAC9C/U,EAAKC,SAASC,cAAc,QAC5BhC,EAAMsxD,GAAmBA,EAAgBtxD,IAAMsxD,EAAgBtxD,IAAM,IACrE8K,EAAMwmD,GAAmBA,EAAgBxmD,IAAMwmD,EAAgBxmD,IAAM,EACrE6oD,EAASrC,UAA0BA,EAAgBjE,QAAU,YAAciE,EAAgBjE,MAAQ,CAAC,MAAO,SAAU,SACrHA,EAAQ,UACR7E,EACAoL,EAEJ,GAAIvzD,MAAM7B,WAAiBwL,EAAK6M,aAAe,YAAa,CAC3D,MACH,CAEE/U,EAAGG,UAAUC,IAAI,2BAGjB0xD,EAAehd,WAAWp4C,IAAUwB,EAAM42C,WAAWp4C,GAASwB,EAC9D4zD,EAAehd,WAAWgd,IAAiB9oD,EAAM8rC,WAAWgd,GAAgB9oD,EAG5E09C,GAAWxoD,EAAM8K,GAAO,IACxB8oD,EAAe7zD,KAAKgpD,OAAO6K,EAAe9oD,GAAO09C,GAGjD,cAAemL,IAAW,YAAc,YAAc71D,EAAQ61D,IAC7D,IAAK,SACJtG,EAAQsG,EACR,MACD,IAAK,WACJtG,EAAQsG,EAAOn1D,GACf,MACD,IAAK,SACJ,GAAIJ,MAAM2F,QAAQ4vD,GAAS,CAC1B,IAAIvW,EAAO,IAAMuW,EAAO70D,OACxB,IAAI4B,EAAQX,KAAK0Y,MAAMm7C,EAAexW,GAEtC18C,EAAQX,KAAK+K,IAAIpK,EAAOizD,EAAO70D,OAAS,GACxC4B,EAAQX,KAAKC,IAAIU,EAAO,GACxB2sD,EAAQsG,EAAOjzD,GACf,KACL,EAGEoB,EAAGiB,MAAMimD,gBAAkBqE,EAE3B,OAAOvrD,CACT,EAGCymD,SAAU,SAASA,EAASv+C,EAAMsnD,EAAiB56C,GAE/C,IAAClY,EAAQE,KAAKyyD,aAAannD,EAAK6M,aAAe,EAC9CxV,EAAU2I,EAAKxH,aACfxC,EAAMsxD,GAAmBA,EAAgBtxD,IAAMsxD,EAAgBtxD,IAAM,IACrE8K,EAAMwmD,GAAmBA,EAAgBxmD,IAAMwmD,EAAgBxmD,IAAM,EACrE+oD,EAAcvC,GAAmBA,EAAgBuC,YAAcvC,EAAgBuC,YAAc,SAC7FrL,EACAoL,EACAvG,EACAyG,EACAC,EAOJH,EAAehd,WAAWp4C,IAAUwB,EAAM42C,WAAWp4C,GAASwB,EAC9D4zD,EAAehd,WAAWgd,IAAiB9oD,EAAM8rC,WAAWgd,GAAgB9oD,EAG5E09C,GAAWxoD,EAAM8K,GAAO,IACxB8oD,EAAe7zD,KAAKgpD,OAAO6K,EAAe9oD,GAAO09C,GAGjD,OAAQ1qD,EAAQwzD,EAAgBjE,QAC/B,IAAK,SACJA,EAAQiE,EAAgBjE,MACxB,MACD,IAAK,WACJA,EAAQiE,EAAgBjE,MAAM7uD,GAC9B,MACD,IAAK,SACJ,GAAIJ,MAAM2F,QAAQutD,EAAgBjE,OAAQ,CACzC,IAAIjQ,EAAO,IAAMkU,EAAgBjE,MAAMvuD,OACvC,IAAI4B,EAAQX,KAAK0Y,MAAMm7C,EAAexW,GAEtC18C,EAAQX,KAAK+K,IAAIpK,EAAO4wD,EAAgBjE,MAAMvuD,OAAS,GACvD4B,EAAQX,KAAKC,IAAIU,EAAO,GACxB2sD,EAAQiE,EAAgBjE,MAAM3sD,GAC9B,KACL,CACG,QACC2sD,EAAQ,UAIV,OAAQvvD,EAAQwzD,EAAgBwC,SAC/B,IAAK,SACJA,EAASxC,EAAgBwC,OACzB,MACD,IAAK,WACJA,EAASxC,EAAgBwC,OAAOt1D,GAChC,MACD,IAAK,UACJs1D,EAASt1D,EACT,MACD,QACCs1D,EAAS,MAIX,OAAQh2D,EAAQwzD,EAAgByC,cAC/B,IAAK,SACJA,EAAczC,EAAgByC,YAC9B,MACD,IAAK,WACJA,EAAczC,EAAgByC,YAAYv1D,GAC1C,MACD,IAAK,SACJ,GAAIJ,MAAM2F,QAAQutD,EAAgByC,aAAc,CAC/C,IAAI3W,EAAO,IAAMkU,EAAgByC,YAAYj1D,OAC7C,IAAI4B,EAAQX,KAAK0Y,MAAMm7C,EAAexW,GAEtC18C,EAAQX,KAAK+K,IAAIpK,EAAO4wD,EAAgByC,YAAYj1D,OAAS,GAC7D4B,EAAQX,KAAKC,IAAIU,EAAO,GACxBqzD,EAAczC,EAAgByC,YAAYrzD,EAC/C,CACI,MACD,QACCqzD,EAAc,OAGhB1yD,EAAQ0B,MAAMyI,SAAW,OACzBnK,EAAQ0B,MAAMmH,SAAW,WAEzB7I,EAAQgQ,aAAa,aAAcuiD,GAEnC,IAAII,EAAQjyD,SAASC,cAAc,OACnCgyD,EAAMjxD,MAAMoV,QAAU,eACtB67C,EAAMjxD,MAAMmH,SAAW,WACvB8pD,EAAMjxD,MAAMyF,MAAQorD,EAAe,IACnCI,EAAMjxD,MAAMimD,gBAAkBqE,EAC9B2G,EAAMjxD,MAAMsD,OAAS,OAErB2tD,EAAM3iD,aAAa,WAAYrR,GAC/Bg0D,EAAM3iD,aAAa,WAAYvG,GAE/B,GAAIgpD,EAAQ,CACX,IAAIG,EAAWlyD,SAASC,cAAc,OACtCiyD,EAASlxD,MAAMmH,SAAW,WAC1B+pD,EAASlxD,MAAMsZ,IAAM,MACrB43C,EAASlxD,MAAMJ,KAAO,EACtBsxD,EAASlxD,MAAM6S,UAAYi+C,EAC3BI,EAASlxD,MAAMyF,MAAQ,OACvByrD,EAASlxD,MAAMsqD,MAAQ0G,EACvBE,EAASj9C,UAAY88C,CACxB,CAEEp9C,GAAW,WAGV,KAAM1M,aAAgBunB,GAAgB,CACrC,IAAI3I,EAAW7mB,SAASC,cAAc,OACtC4mB,EAAS7lB,MAAMmH,SAAW,WAC1B0e,EAAS7lB,MAAMsZ,IAAM,MACrBuM,EAAS7lB,MAAMgwB,OAAS,MACxBnK,EAAS7lB,MAAMJ,KAAO,MACtBimB,EAAS7lB,MAAMmwB,MAAQ,MAEvB7xB,EAAQyE,YAAY8iB,GAEpBvnB,EAAUunB,CACd,CAEGvnB,EAAQyE,YAAYkuD,GAEpB,GAAIF,EAAQ,CACXzyD,EAAQyE,YAAYmuD,EACxB,CACA,IAEE,MAAO,EACT,EAGC5G,MAAO,SAASA,EAAMrjD,EAAMsnD,EAAiB56C,GAC5C1M,EAAKxH,aAAaO,MAAMimD,gBAAkBtqD,KAAKyyD,aAAannD,EAAK6M,YACjE,MAAO,EACT,EAGCq9C,WAAY,SAASA,EAAWlqD,EAAMsnD,EAAiB56C,GACtD,MAAO,okBACT,EAGCy9C,YAAa,SAASA,EAAYnqD,EAAMsnD,EAAiB56C,GACxD,MAAO,0rBACT,EAGC09C,OAAQ,SAASA,EAAOpqD,EAAMsnD,EAAiB56C,GAC9C,OAAOhY,KAAKuC,MAAMM,WAAWwH,WAAWpJ,QAAQqK,EAAK4nB,SAAS9qB,YAAc,CAC9E,EAGC2hD,OAAQ,SAASA,EAAOz+C,EAAMsnD,EAAiB56C,GAC9C1M,EAAKxH,aAAaP,UAAUC,IAAI,wBAChC,MAAO,kLACT,EAECmyD,mBAAoB,SAASA,EAAmBrqD,EAAMsnD,EAAiB56C,GACnE,IAEC5U,EAAKC,SAASC,cAAc,OAC5BsH,EAASU,EAAK4nB,SAASjG,KAAKzoB,QAAQyB,iBAExC7C,EAAGG,UAAUC,IAAI,wCACjBJ,EAAGkV,UAAY,oIAEfhN,EAAKxH,aAAaP,UAAUC,IAAI,wBAEhC,SAASoyD,EAAWC,GACnB,IAAItb,EAAa3vC,EAAOjI,QAExBiI,EAAOisC,KAAOgf,EAEd,GAAItb,EAAY,CAEf,GAAI3vC,EAAOisC,KAAM,CAChBzzC,EAAGG,UAAUC,IAAI,QACjB+2C,EAAWl2C,MAAMoV,QAAU,EAChC,KAAW,CACNrW,EAAGG,UAAUmkB,OAAO,QACpB6yB,EAAWl2C,MAAMoV,QAAU,MAChC,CACA,CACA,CAEErW,EAAGuR,iBAAiB,SAAS,SAAUC,GACtCA,EAAE0vC,2BACFsR,GAAYhrD,EAAOisC,KACtB,IAEE+e,EAAWhrD,EAAOisC,MAElB,OAAOzzC,CACT,EAEC0yD,aAAc,SAASA,EAAaxqD,EAAMsnD,EAAiB56C,GAC1D,IAAI+9C,EAAU/1D,KAEd,IAAIg2D,EAAW3yD,SAASC,cAAc,SAEtC0yD,EAAS/nD,KAAO,WAEhB,GAAIjO,KAAKuC,MAAMgC,UAAU,YAAa,MAAO,CAE5CyxD,EAASrhD,iBAAiB,SAAS,SAAUC,GAC5CA,EAAE0C,iBACN,IAEG,UAAWhM,EAAK4nB,QAAU,WAAY,CACrC,IAAInuB,EAAMuG,EAAK4nB,SAEf,GAAInuB,aAAeoZ,EAAc,CAEhC63C,EAASrhD,iBAAiB,UAAU,SAAUC,GAC7C7P,EAAI4oB,cACV,IAEKqoC,EAASjL,QAAUhmD,EAAI8oB,YAAc9oB,EAAI8oB,aACzC7tB,KAAKuC,MAAMiC,QAAQsb,UAAUm2C,0BAA0BlxD,EAAKixD,EACjE,KAAW,CACNA,EAAW,EAChB,CACA,KAAU,CACNA,EAASrhD,iBAAiB,UAAU,SAAUC,GAC7C,GAAImhD,EAAQxzD,MAAMiC,QAAQsb,UAAU6G,aAAavmB,OAAQ,CACxD21D,EAAQxzD,MAAM8lC,aACpB,KAAY,CACN0tB,EAAQxzD,MAAMud,UAAU8yC,EAAgBpa,SAC9C,CACA,IAEIx4C,KAAKuC,MAAMiC,QAAQsb,UAAUo2C,6BAA6BF,EAC9D,CACA,CACE,OAAOA,CACT,GAGAtoD,EAAUjO,UAAU6rC,eAAe,SAAU2mB,GAE7C,IAAIkE,EAAgB,SAASA,EAAc5zD,GAC1CvC,KAAKuC,MAAQA,EACbvC,KAAKo2D,YAAc,GACnBp2D,KAAKq2D,aAAe,GACpBr2D,KAAKqiD,WAAa,EAClBriD,KAAKsiD,YAAc,EACnBtiD,KAAKs2D,aAAe,EACpBt2D,KAAKu2D,mBAAqB,OAC1Bv2D,KAAKsJ,OAAS,MACdtJ,KAAKw2D,eAAiB,KACvB,EAGAL,EAAc12D,UAAUoG,MAAQ,WAC/B7F,KAAKu2D,mBAAqB,OAC1Bv2D,KAAKo2D,YAAc,GACnBp2D,KAAKq2D,aAAe,GACpBr2D,KAAKqiD,WAAa,EAClBriD,KAAKsiD,YAAc,EACnBtiD,KAAKsiD,YAAc,EACnBtiD,KAAKsJ,OAAS,MAEdtJ,KAAKuC,MAAMmI,cAAcjI,eAAe4B,MAAMC,WAAa,EAC3DtE,KAAKuC,MAAMmI,cAAc/H,QAAQ0B,MAAM0nB,aAAe,CACvD,EAGAoqC,EAAc12D,UAAU2U,iBAAmB,SAAU3N,GACpD,IAAImE,EAAS,CAAE4d,OAAQ,EAAGiuC,KAAM,OAEhC,IAAKhwD,EAAO8D,QAAS,CAEpB,GAAIvK,KAAK02D,YAAYjwD,GAAS,CAE7BmE,EAAOY,SAAWxL,KAAKu2D,mBAEvB,GAAIv2D,KAAKu2D,oBAAsB,OAAQ,CACtCv2D,KAAKo2D,YAAY7wD,KAAKkB,EAC1B,KAAU,CACNzG,KAAKq2D,aAAalvD,QAAQV,EAC9B,CAEGzG,KAAKsJ,OAAS,KAEd7C,EAAOjC,QAAQomB,OAAShgB,CAC3B,KAAS,CACN5K,KAAKu2D,mBAAqB,OAC7B,CACA,CACA,EAEAJ,EAAc12D,UAAUi3D,YAAc,SAAUjwD,GAG/C,GAAIA,EAAO6D,OAAOC,SAAW9D,EAAOH,WAAWskB,OAAQ,CACtDve,QAAQC,KAAK,wGACf,CAEC,GAAI7F,EAAO6D,OAAOC,QAAS,CAC1B,OAAOvK,KAAK02D,YAAYjwD,EAAO6D,OACjC,KAAQ,CACN,OAAO7D,EAAOH,WAAWskB,MAC3B,CAGA,EAGAurC,EAAc12D,UAAUuE,iBAAmB,WAC1C,IAAI2yD,EAAU32D,KAEd,IAAIiL,EAEJ,GAAIjL,KAAKsJ,OAAQ,CAChBgM,aAAatV,KAAKw2D,gBAGlBx2D,KAAKw2D,eAAiBjhD,YAAW,WAChCohD,EAAQvpD,QACX,GAAK,KAEHnC,EAAOjL,KAAKuC,MAAMM,WAAWujB,iBAE7BpmB,KAAK42D,cAEL52D,KAAK62D,uBAEL72D,KAAK82D,iBAEL7rD,EAAKzF,SAAQ,SAAUT,GACtB,GAAIA,EAAIkJ,OAAS,MAAO,CACvB0oD,EAAQvmC,UAAUrrB,EACtB,CACA,IAEE/E,KAAKuC,MAAMM,WAAW6Y,aAAarX,MAAM82C,YAAcn7C,KAAKsiD,WAC9D,CACA,EAGA6T,EAAc12D,UAAUm3D,YAAc,WACrC52D,KAAKqiD,WAAariD,KAAK+2D,WAAW/2D,KAAKo2D,YAAap2D,KAAKo2D,YAAYh2D,QAAU,KAC/EJ,KAAKuC,MAAMmI,cAAcjI,eAAe4B,MAAMC,WAAatE,KAAKqiD,WAEhEriD,KAAKsiD,YAActiD,KAAK+2D,WAAW/2D,KAAKq2D,aAAcr2D,KAAKq2D,aAAaj2D,QAAU,KAClFJ,KAAKuC,MAAMmI,cAAc/H,QAAQ0B,MAAM0nB,aAAe/rB,KAAKsiD,YAG3DtiD,KAAKs2D,aAAet2D,KAAKuC,MAAMM,WAAWF,QAAQyB,YAAcpE,KAAKuC,MAAMmI,cAAczH,UAC1F,EAGAkzD,EAAc12D,UAAUq3D,eAAiB,WACxC,GAAI92D,KAAKuC,MAAMgC,UAAU,eAAgB,CACxC,GAAIvE,KAAKuC,MAAMiC,QAAQ2F,YAAYqrC,gBAAkBx1C,KAAKuC,MAAMiC,QAAQ2F,YAAYsc,OAAQ,CAC3FzmB,KAAKowB,UAAUpwB,KAAKuC,MAAMiC,QAAQ2F,YAAYsc,OACjD,CACE,GAAIzmB,KAAKuC,MAAMiC,QAAQ2F,YAAYsrC,gBAAkBz1C,KAAKuC,MAAMiC,QAAQ2F,YAAYorC,OAAQ,CAC3Fv1C,KAAKowB,UAAUpwB,KAAKuC,MAAMiC,QAAQ2F,YAAYorC,OACjD,CACA,CACA,EAGA4gB,EAAc12D,UAAUo3D,qBAAuB,SAAUG,GACxD,IAAIC,EAAUj3D,KAEd,IAAIk3D,EAAc,GAElBl3D,KAAKo2D,YAAY5wD,SAAQ,SAAUiB,EAAQX,GAC1CW,EAAOjC,QAAQomB,OAAOpC,OAASyuC,EAAQF,WAAWE,EAAQb,YAAatwD,GAAKmxD,EAAQ10D,MAAMmI,cAAczH,WAAa,KAErH,GAAI6C,GAAKmxD,EAAQb,YAAYh2D,OAAS,EAAG,CACxCqG,EAAOjC,QAAQomB,OAAO6rC,KAAO,IAChC,KAAS,CACNhwD,EAAOjC,QAAQomB,OAAO6rC,KAAO,KAChC,CAEE,GAAIhwD,EAAO6D,OAAOC,QAAS,CAC1B,IAAI4sD,EAAWF,EAAQG,yBAAyB3wD,GAChD,IAAKywD,EAAYr2D,SAASs2D,GAAW,CACpCF,EAAQ/gC,cAAcihC,EAAU1wD,GAChCywD,EAAY3xD,KAAK4xD,EACrB,CAEG,GAAI1wD,EAAOjC,QAAQomB,OAAO6rC,KAAM,CAC/BU,EAAS5zD,UAAUC,IAAI,oBAAsBiD,EAAOjC,QAAQomB,OAAOpf,SACvE,CACA,KAAS,CACNyrD,EAAQ/gC,cAAczvB,EAAO3C,aAAc2C,EAC9C,CAEE,GAAIuwD,EAAU,CACbvwD,EAAO4E,MAAM7F,SAAQ,SAAU8F,GAC9B2rD,EAAQ/gC,cAAc5qB,EAAKxH,WAAW,MAAO2C,EACjD,GACA,CACA,IAECzG,KAAKq2D,aAAa7wD,SAAQ,SAAUiB,EAAQX,GAC3CW,EAAOjC,QAAQomB,OAAOpC,OAASyuC,EAAQX,aAAeW,EAAQF,WAAWE,EAAQZ,aAAcvwD,EAAI,GAAK,KAExG,GAAIA,GAAKmxD,EAAQZ,aAAaj2D,OAAS,EAAG,CACzCqG,EAAOjC,QAAQomB,OAAO6rC,KAAO,IAChC,KAAS,CACNhwD,EAAOjC,QAAQomB,OAAO6rC,KAAO,KAChC,CAEE,GAAIhwD,EAAO6D,OAAOC,QAAS,CAC1B0sD,EAAQ/gC,cAAc+gC,EAAQG,yBAAyB3wD,GAASA,EACnE,KAAS,CACNwwD,EAAQ/gC,cAAczvB,EAAO3C,aAAc2C,EAC9C,CAEE,GAAIuwD,EAAU,CACbvwD,EAAO4E,MAAM7F,SAAQ,SAAU8F,GAC9B2rD,EAAQ/gC,cAAc5qB,EAAKxH,WAAW,MAAO2C,EACjD,GACA,CACA,GACA,EAEA0vD,EAAc12D,UAAU23D,yBAA2B,SAAU3wD,GAC5D,OAAOA,EAAO6D,OAAOC,QAAUvK,KAAKo3D,yBAAyB3wD,EAAO6D,QAAU7D,EAAO3C,YACtF,EAGAqyD,EAAc12D,UAAU2N,OAAS,WAC7B,IAACzH,EAAO3F,KAGX,GAAI2F,EAAK2D,OAAQ,CAGhBtJ,KAAK42D,cAOLjxD,EAAKpD,MAAMM,WAAW6b,iBAAiBlZ,SAAQ,SAAUT,GACxD,GAAIA,EAAIkJ,OAAS,MAAO,CACvBtI,EAAKyqB,UAAUrrB,EACnB,CACA,IAGE/E,KAAK82D,iBAGL92D,KAAK62D,qBAAqB,MAM1B72D,KAAKuC,MAAMM,WAAW6Y,aAAarX,MAAM82C,YAAcn7C,KAAKsiD,WAC9D,CACA,EAEA6T,EAAc12D,UAAU2wB,UAAY,SAAUrrB,GAC7C,IAAIsyD,EAAUr3D,KAEd,IAAI2e,EAAQ5Z,EAAIjB,aAEhB6a,EAAMta,MAAMynB,YAAc9rB,KAAKqiD,WAG/BriD,KAAKo2D,YAAY5wD,SAAQ,SAAUiB,GAClC,IAAI6E,EAAOvG,EAAImhB,QAAQzf,GAEvB,GAAI6E,EAAM,CACT+rD,EAAQnhC,cAAc5qB,EAAKxH,WAAW,MAAO2C,EAChD,CACA,IAECzG,KAAKq2D,aAAa7wD,SAAQ,SAAUiB,GACnC,IAAI6E,EAAOvG,EAAImhB,QAAQzf,GAEvB,GAAI6E,EAAM,CACT+rD,EAAQnhC,cAAc5qB,EAAKxH,WAAW,MAAO2C,EAChD,CACA,GACA,EAEA0vD,EAAc12D,UAAUy2B,cAAgB,SAAUvzB,EAAS8D,GAE1D,GAAIA,EAAOjC,QAAQomB,OAAQ,CAC1BjoB,EAAQ0B,MAAMmH,SAAW,WACzB7I,EAAQ0B,MAAMJ,KAAOwC,EAAOjC,QAAQomB,OAAOpC,OAE3C7lB,EAAQY,UAAUC,IAAI,oBAEtB,GAAIiD,EAAOjC,QAAQomB,OAAO6rC,KAAM,CAC/B9zD,EAAQY,UAAUC,IAAI,oBAAsBiD,EAAOjC,QAAQomB,OAAOpf,SACrE,CACA,CACA,EAEA2qD,EAAc12D,UAAUs3D,WAAa,SAAUj0D,EAASd,GACvD,IAAI8H,EAAQ,EAEZ,IAAK,IAAIwtD,EAAO,EAAGA,EAAOt1D,EAAOs1D,IAAQ,CACxC,GAAIx0D,EAAQw0D,GAAMtuD,QAAS,CAC1Bc,GAAShH,EAAQw0D,GAAMztD,UAC1B,CACA,CAEC,OAAOC,CACR,EAEA4D,EAAUjO,UAAU6rC,eAAe,gBAAiB6qB,GACpD,IAAIoB,EAAa,SAASA,EAAWh1D,GACpCvC,KAAKuC,MAAQA,EACbvC,KAAKq1C,WAAahyC,SAASC,cAAc,OACzCtD,KAAKiL,KAAO,GACZjL,KAAK4gB,aAAe,CACrB,EAEA22C,EAAW93D,UAAUkE,WAAa,WACjC3D,KAAKiL,KAAO,GAEZjL,KAAKq1C,WAAW9xC,UAAUC,IAAI,gCAG9BxD,KAAKuC,MAAMmI,cAAc5G,aAAaZ,aAAalD,KAAKq1C,WAAYr1C,KAAKuC,MAAMmI,cAAcjI,eAAeyE,YAC7G,EAEAqwD,EAAW93D,UAAUimB,gBAAkB,SAAU1jB,GAChDhC,KAAK4gB,aAAe5e,CACrB,EAEAu1D,EAAW93D,UAAUgmB,gBAAkB,WACtC,OAAOzlB,KAAK4gB,YACb,EAEA22C,EAAW93D,UAAU+lB,SAAW,WAC/B,QAASxlB,KAAKiL,KAAK7K,MACpB,EAGAm3D,EAAW93D,UAAUmkB,QAAU,SAAU3Y,GACrC,IAEC1B,EAAS0B,EAAKoa,MAAM,GAExBrlB,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3B,IAAI/C,EAAQuH,EAAOtI,QAAQ8D,GAE3B,GAAI/C,GAAS,EAAG,CACfuH,EAAOvC,OAAOhF,EAAO,EACxB,CACA,IAEC,OAAOuH,CACR,EAEAguD,EAAW93D,UAAUuuB,UAAY,SAAUjpB,GAC1C,IAAKA,EAAIP,QAAQomB,OAAQ,CACxB7lB,EAAIP,QAAQomB,OAAS,KACrB5qB,KAAKq1C,WAAWjuC,YAAYrC,EAAIjB,cAChCiB,EAAIpB,aACJoB,EAAIojB,kBACJnoB,KAAKuC,MAAMM,WAAWmF,kBAEtBhI,KAAKiL,KAAK1F,KAAKR,GAEf/E,KAAKuC,MAAMM,WAAWqd,kBAAkB,WAExClgB,KAAKw3D,WACP,KAAQ,CACNnrD,QAAQC,KAAK,uCACf,CACA,EAEAirD,EAAW93D,UAAUyuB,YAAc,SAAUnpB,GAChC/E,KAAKiL,KAAKhK,QAAQ8D,GAE9B,GAAIA,EAAIP,QAAQomB,OAAQ,CAEvB7lB,EAAIP,QAAQomB,OAAS,MAErB5qB,KAAK2yB,UAAU5tB,GAEf/E,KAAKuC,MAAMM,WAAWmF,kBAEtBhI,KAAKuC,MAAMM,WAAWqd,kBAAkB,WAExC,GAAIlgB,KAAKiL,KAAK7K,OAAQ,CACrBJ,KAAKw3D,WACR,CACA,KAAQ,CACNnrD,QAAQC,KAAK,yCACf,CACA,EAEAirD,EAAW93D,UAAUkzB,UAAY,SAAU5tB,GAC1C,IAAI/C,EAAQhC,KAAKiL,KAAKhK,QAAQ8D,GAE9B,GAAI/C,GAAS,EAAG,CACf,IAAI2c,EAAQ5Z,EAAIjB,aAChB6a,EAAM1X,WAAWrB,YAAY+Y,GAE7B3e,KAAKiL,KAAKjE,OAAOhF,EAAO,EAC1B,CACA,EAEAu1D,EAAW93D,UAAU+3D,UAAY,SAAUzyD,GAC1C,IAAIY,EAAO3F,KAEXA,KAAKiL,KAAKzF,SAAQ,SAAUT,EAAKe,GAChCH,EAAKpD,MAAMM,WAAWogB,SAASle,EAAKe,EACtC,GACA,EAEA4H,EAAUjO,UAAU6rC,eAAe,aAAcisB,GAGjD,IAAIE,EAAiB,SAASA,EAAepsC,GAC5CrrB,KAAKg9C,OAAS3xB,EACdrrB,KAAKiO,KAAO,gBACb,EAEAwpD,EAAeh4D,UAAU23C,OAAS,WACjC,OAAOp3C,KAAKg9C,OAAO/3C,GACpB,EAEAwyD,EAAeh4D,UAAU+N,SAAW,WACnC,OAAOxN,KAAKg9C,OAAO73C,KACpB,EAEAsyD,EAAeh4D,UAAUqE,WAAa,WACrC,OAAO9D,KAAKg9C,OAAOr6C,OACpB,EAEA80D,EAAeh4D,UAAUmkB,QAAU,WAClC,OAAO5jB,KAAKg9C,OAAOp5B,QAAQ,KAC5B,EAEA6zC,EAAeh4D,UAAU+3C,aAAe,WACvC,OAAOx3C,KAAKg9C,OAAOxF,aAAa,KACjC,EAEAigB,EAAeh4D,UAAUi4D,eAAiB,WACzC,OAAO13D,KAAKg9C,OAAO1yC,OAAStK,KAAKg9C,OAAO1yC,OAAOV,eAAiB,KACjE,EAEA6tD,EAAeh4D,UAAU0O,cAAgB,WACxC9B,QAAQC,KAAK,mFACb,OAAOtM,KAAKg9C,OAAOh0C,OACpB,EAEAyuD,EAAeh4D,UAAU2O,UAAY,WACpC,OAAOpO,KAAKg9C,OAAOh0C,OACpB,EAEAyuD,EAAeh4D,UAAU4O,KAAO,WAC/BrO,KAAKg9C,OAAO3uC,MACb,EAEAopD,EAAeh4D,UAAU6O,KAAO,WAC/BtO,KAAKg9C,OAAO1uC,MACb,EAEAmpD,EAAeh4D,UAAU8O,OAAS,WACjCvO,KAAKg9C,OAAO2a,kBACb,EAEAF,EAAeh4D,UAAU2I,SAAW,WACnC,OAAOpI,KAAKg9C,MACb,EAEAya,EAAeh4D,UAAUmP,SAAW,WACnC,OAAO5O,KAAKg9C,OAAO4a,aAAar1D,KACjC,EAMA,IAAIkgB,EAAQ,SAASA,EAAMm1C,EAActtD,EAAQ0lC,EAAO/qC,EAAKE,EAAOgpD,EAAW0J,GAE9E73D,KAAK43D,aAAeA,EACpB53D,KAAKsK,OAASA,EACdtK,KAAKiF,IAAMA,EACXjF,KAAKgwC,MAAQA,EACbhwC,KAAKmF,MAAQA,EACbnF,KAAK83D,aAAe9nB,EAAQ4nB,EAAaG,eAAe33D,OAAS,EACjEJ,KAAKkhB,OAASlhB,KAAK83D,aAAe93D,KAAKg4D,eAAiBh4D,KAAKi4D,QAC7Dj4D,KAAKiO,KAAO,QACZjO,KAAK0rB,IAAMmsC,EACX73D,KAAKiL,KAAO,GACZjL,KAAKopC,OAAS,GACdppC,KAAKk4D,UAAY,GACjBl4D,KAAKmuD,UAAYA,EACjBnuD,KAAKm4D,gBAAkB,MACvBn4D,KAAK2H,OAAS,EACd3H,KAAKgvB,YAAc,EACnBhvB,KAAK8oB,YAAc,MACnB9oB,KAAK62B,MAAQ,GACb72B,KAAK8oB,YAAc,MACnB9oB,KAAKwE,QAAU,GACfxE,KAAKo4D,aAAe,MAEpBp4D,KAAKgJ,QAAU6uD,EAAWA,EAAS7uD,eAAiB4uD,EAAajd,UAAU3K,KAAW,YAAc4nB,EAAajd,UAAU3K,GAAS4nB,EAAajd,UAAU,GAE3J36C,KAAKgS,UAAY,KAEjBhS,KAAKq4D,iBACLr4D,KAAKs4D,cAELt4D,KAAKu4D,mBACN,EAEA91C,EAAMhjB,UAAU4gB,KAAO,WACtB,GAAIrgB,KAAKk4D,UAAU93D,OAAQ,CAC1BJ,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChCA,EAAMhL,MACT,GACA,KAAQ,CACNrgB,KAAK2C,QAAU,MACf3C,KAAKo4D,aAAe,MACpBp4D,KAAKm4D,gBAAkB,KACzB,CACA,EAEA11C,EAAMhjB,UAAU44D,eAAiB,WAChC,IAAIG,EAAQn1D,SAASC,cAAc,OACnCk1D,EAAMj1D,UAAUC,IAAI,mBAEpBxD,KAAK2C,QAAUU,SAASC,cAAc,OACtCtD,KAAK2C,QAAQY,UAAUC,IAAI,iBAC3BxD,KAAK2C,QAAQY,UAAUC,IAAI,mBAC3BxD,KAAK2C,QAAQY,UAAUC,IAAI,yBAA2BxD,KAAKgwC,OAC3DhwC,KAAK2C,QAAQgQ,aAAa,OAAQ,YAElC3S,KAAKo4D,aAAe/0D,SAASC,cAAc,OAC3CtD,KAAKo4D,aAAa70D,UAAUC,IAAI,0BAChCxD,KAAKo4D,aAAahxD,YAAYoxD,GAG9B,GAAIx4D,KAAK43D,aAAar1D,MAAMkB,QAAQ6O,cAAgB,OAAStS,KAAK43D,aAAar1D,MAAMgC,UAAU,WAAY,CAC1GvE,KAAK43D,aAAar1D,MAAMiC,QAAQ+N,QAAQkmD,sBAAsBz4D,KAChE,CACA,EAEAyiB,EAAMhjB,UAAU84D,kBAAoB,WACnC,IAAIG,EAAU14D,KAEd,IAAIgwC,EAAQhwC,KAAKgwC,MAAQ,EACzB,GAAIhwC,KAAK43D,aAAae,eAAiB34D,KAAK43D,aAAae,cAAc3oB,GAAQ,CAC9EhwC,KAAK43D,aAAae,cAAc3oB,GAAOxqC,SAAQ,SAAU1F,GACxD44D,EAAQE,aAAa94D,EAAOkwC,EAC/B,GACA,CACA,EAEAvtB,EAAMhjB,UAAU64D,YAAc,WAC7B,IAAI3yD,EAAO3F,KACP6U,EACAC,EACAC,EACA8jD,EAGJ,GAAIlzD,EAAKiyD,aAAar1D,MAAMkB,QAAQ68B,WAAY,CAC/C36B,EAAKhD,QAAQgS,iBAAiB,SAAS,SAAUC,GAChDjP,EAAKiyD,aAAar1D,MAAMkB,QAAQ68B,WAAW7/B,KAAKkF,EAAKiyD,aAAar1D,MAAOqS,EAAGjP,EAAKiE,eACpF,GACA,CAEC,GAAIjE,EAAKiyD,aAAar1D,MAAMkB,QAAQ88B,cAAe,CAClD56B,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnDjP,EAAKiyD,aAAar1D,MAAMkB,QAAQ88B,cAAc9/B,KAAKkF,EAAKiyD,aAAar1D,MAAOqS,EAAGjP,EAAKiE,eACvF,GACA,CAEC,GAAIjE,EAAKiyD,aAAar1D,MAAMkB,QAAQ+8B,aAAc,CACjD76B,EAAKhD,QAAQgS,iBAAiB,eAAe,SAAUC,GACtDjP,EAAKiyD,aAAar1D,MAAMkB,QAAQ+8B,aAAa//B,KAAKkF,EAAKiyD,aAAar1D,MAAOqS,EAAGjP,EAAKiE,eACtF,GACA,CAEC,IAAKjE,EAAKiyD,aAAar1D,MAAMkB,QAAQg9B,kBAAoB96B,EAAKiyD,aAAar1D,MAAMkB,QAAQi9B,iBAAmB/6B,EAAKiyD,aAAar1D,MAAMgC,UAAU,QAAS,CACtJoB,EAAKiyD,aAAar1D,MAAMiC,QAAQyR,KAAK6iD,gBAAgBr4D,KAAKkF,EAAKiyD,aAAar1D,MAAMiC,QAAQyR,KAAMtQ,EAClG,CAEC,GAAIA,EAAKiyD,aAAar1D,MAAMkB,QAAQk9B,SAAU,CAE7C5rB,EAAM,MAENpP,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDG,EAAM,IACT,GAAK,CAAEK,QAAS,OAEdzP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnD,GAAIG,EAAK,CACRpP,EAAKiyD,aAAar1D,MAAMkB,QAAQk9B,SAAS/rB,EAAGjP,EAAKiE,eACrD,CAEGmL,EAAM,KACT,GACA,CAEC,GAAIpP,EAAKiyD,aAAar1D,MAAMkB,QAAQm9B,YAAa,CAEhD/rB,EAAS,KAETlP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GAEnD,GAAIC,EAAQ,CACXS,aAAaT,GACbA,EAAS,KAETlP,EAAKiyD,aAAar1D,MAAMkB,QAAQm9B,YAAYhsB,EAAGjP,EAAKiE,eACxD,KAAU,CAENiL,EAASU,YAAW,WACnBD,aAAaT,GACbA,EAAS,IACd,GAAO,IACP,CACA,GACA,CAEC,GAAIlP,EAAKiyD,aAAar1D,MAAMkB,QAAQo9B,aAAc,CAEjD/rB,EAAU,KAEVnP,EAAKhD,QAAQgS,iBAAiB,cAAc,SAAUC,GACrDU,aAAaR,GAEbA,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVC,EAAM,MACNpP,EAAKiyD,aAAar1D,MAAMkB,QAAQo9B,aAAajsB,EAAGjP,EAAKiE,eACzD,GAAM,IACN,GAAK,CAAEwL,QAAS,OAEdzP,EAAKhD,QAAQgS,iBAAiB,YAAY,SAAUC,GACnDU,aAAaR,GACbA,EAAU,IACb,GACA,CAEC,GAAInP,EAAKiyD,aAAar1D,MAAMkB,QAAQw8B,mBAAoB,CACvD44B,EAAgBlzD,EAAKiyD,aAAar1D,MAAMkB,QAAQw8B,oBAAsB,QAAUt6B,EAAKyyD,aAAezyD,EAAKhD,QAEzGk2D,EAAclkD,iBAAiB,SAAS,SAAUC,GACjDA,EAAE0C,kBACF1C,EAAE0vC,2BACF3+C,EAAKgyD,kBACR,GACA,CACA,EAEAl1C,EAAMhjB,UAAUm5D,aAAe,SAAUG,EAAS/oB,GACjD,IAAIgpB,EAAWhpB,EAAQ,IAAM+oB,EAC7B,IAAI1tC,EAAQ,IAAI5I,EAAMziB,KAAK43D,aAAc53D,KAAMgwC,EAAO+oB,EAAS/4D,KAAK43D,aAAaG,eAAe/nB,GAAO7qC,MAAOnF,KAAK43D,aAAaqB,gBAAgBjpB,IAAUhwC,KAAK43D,aAAaqB,gBAAgB,GAAIj5D,KAAK0rB,IAAM1rB,KAAK0rB,IAAI0d,OAAO4vB,GAAY,OAEvOh5D,KAAKopC,OAAO4vB,GAAY3tC,EACxBrrB,KAAKk4D,UAAU3yD,KAAK8lB,EACrB,EAEA5I,EAAMhjB,UAAUu4D,eAAiB,SAAUjzD,GAE1C,IAAIirC,EAAQhwC,KAAKgwC,MAAQ,EAEzB,GAAIhwC,KAAK83D,aAAc,CACtB,IAAIiB,EAAU/4D,KAAK43D,aAAaG,eAAe/nB,GAAO2f,KAAK5qD,EAAIic,WAC3Dg4C,EAAWhpB,EAAQ,IAAM+oB,EAE7B,GAAI/4D,KAAK43D,aAAae,eAAiB34D,KAAK43D,aAAae,cAAc3oB,GAAQ,CAC9E,GAAIhwC,KAAKopC,OAAO4vB,GAAW,CAC1Bh5D,KAAKopC,OAAO4vB,GAAU93C,OAAOnc,EACjC,CACA,KAAS,CACN,IAAK/E,KAAKopC,OAAO4vB,GAAW,CAC3Bh5D,KAAK44D,aAAaG,EAAS/oB,EAC/B,CAEGhwC,KAAKopC,OAAO4vB,GAAU93C,OAAOnc,EAChC,CACA,CACA,EAEA0d,EAAMhjB,UAAUw4D,QAAU,SAAUlzD,GACnC/E,KAAKiL,KAAK1F,KAAKR,GACfA,EAAIP,QAAQ6mB,MAAQrrB,IACrB,EAEAyiB,EAAMhjB,UAAUqjB,UAAY,SAAU/d,EAAKhD,EAAIkI,GAC9C,IAAItF,EAAO3E,KAAKk5D,eAAe,IAE/Bn0D,EAAIwoB,WAAW5oB,GAEf,IAAIqG,EAAUhL,KAAKiL,KAAKhK,QAAQc,GAEhC,GAAIiJ,GAAW,EAAG,CACjB,GAAIf,EAAO,CACVjK,KAAKiL,KAAKjE,OAAOgE,EAAU,EAAG,EAAGjG,EACpC,KAAS,CACN/E,KAAKiL,KAAKjE,OAAOgE,EAAS,EAAGjG,EAChC,CACA,KAAQ,CACN,GAAIkF,EAAO,CACVjK,KAAKiL,KAAK1F,KAAKR,EAClB,KAAS,CACN/E,KAAKiL,KAAK9D,QAAQpC,EACrB,CACA,CAECA,EAAIP,QAAQ6mB,MAAQrrB,KAEpBA,KAAKm5D,8BAEL,GAAIn5D,KAAK43D,aAAar1D,MAAMgC,UAAU,gBAAkBvE,KAAK43D,aAAar1D,MAAMkB,QAAQ0G,aAAe,QAAS,CAC/GnK,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYisC,YAAYp2C,KAC1D,CAECA,KAAK43D,aAAa32C,gBAAgB,KACnC,EAEAwB,EAAMhjB,UAAU25D,aAAe,SAAUn1D,GACxCjE,KAAKo4D,aAAa/zD,MAAMC,WAAaL,EAErCjE,KAAKk4D,UAAU1yD,SAAQ,SAAUqU,GAChCA,EAAMu/C,aAAan1D,EACrB,GACA,EAEAwe,EAAMhjB,UAAU0jB,YAAc,SAAUpe,GAAK,EAG7C0d,EAAMhjB,UAAUy5D,eAAiB,SAAUv0D,GAC1C,GAAI3E,KAAKmF,MAAO,CACfR,EAAK3E,KAAKmF,OAASnF,KAAKiF,GAC1B,KAAQ,CACNoH,QAAQC,KAAK,8FACf,CAEC,GAAItM,KAAKsK,OAAQ,CAChB3F,EAAO3E,KAAKsK,OAAO4uD,eAAev0D,EACpC,CAEC,OAAOA,CACR,EAEA8d,EAAMhjB,UAAUojB,UAAY,SAAU9d,GACrC,IAAI/C,EAAQhC,KAAKiL,KAAKhK,QAAQ8D,GAC9B,IAAI3B,EAAK2B,EAAIjB,aAEb,GAAI9B,GAAS,EAAG,CACfhC,KAAKiL,KAAKjE,OAAOhF,EAAO,EAC1B,CAEC,IAAKhC,KAAK43D,aAAar1D,MAAMkB,QAAQg6B,cAAgBz9B,KAAKiL,KAAK7K,OAAQ,CACtE,GAAIJ,KAAKsK,OAAQ,CAChBtK,KAAKsK,OAAO+uD,YAAYr5D,KAC3B,KAAS,CACNA,KAAK43D,aAAayB,YAAYr5D,KACjC,CAEEA,KAAK43D,aAAa32C,gBAAgB,KACpC,KAAQ,CAEN,GAAI7d,EAAG6D,WAAY,CAClB7D,EAAG6D,WAAWrB,YAAYxC,EAC7B,CAEEpD,KAAKm5D,8BAEL,GAAIn5D,KAAK43D,aAAar1D,MAAMgC,UAAU,gBAAkBvE,KAAK43D,aAAar1D,MAAMkB,QAAQ0G,aAAe,QAAS,CAC/GnK,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYisC,YAAYp2C,KAC3D,CACA,CACA,EAEAyiB,EAAMhjB,UAAU45D,YAAc,SAAUhuC,GACvC,IAAI2tC,EAAW3tC,EAAM2kB,MAAQ,IAAM3kB,EAAMpmB,IACrCjD,EAEJ,GAAIhC,KAAKopC,OAAO4vB,GAAW,QACnBh5D,KAAKopC,OAAO4vB,GAEnBh3D,EAAQhC,KAAKk4D,UAAUj3D,QAAQoqB,GAE/B,GAAIrpB,GAAS,EAAG,CACfhC,KAAKk4D,UAAUlxD,OAAOhF,EAAO,EAChC,CAEE,IAAKhC,KAAKk4D,UAAU93D,OAAQ,CAC3B,GAAIJ,KAAKsK,OAAQ,CAChBtK,KAAKsK,OAAO+uD,YAAYr5D,KAC5B,KAAU,CACNA,KAAK43D,aAAayB,YAAYr5D,KAClC,CACA,CACA,CACA,EAEAyiB,EAAMhjB,UAAU65D,kBAAoB,SAAUC,GAC7C,IAAIhwD,EAAS,GAEbA,EAAOhE,KAAKvF,MAEZA,KAAKw5D,UAEL,GAAIx5D,KAAKgJ,QAAS,CACjB,GAAIhJ,KAAKk4D,UAAU93D,OAAQ,CAC1BJ,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChC9hB,EAASA,EAAO4B,OAAOkgB,EAAMiuC,kBAAkBC,GACnD,GACA,KAAS,CACN,IAAKA,GAAUv5D,KAAK43D,aAAar1D,MAAMkB,QAAQ0G,aAAe,SAAWnK,KAAK43D,aAAar1D,MAAMgC,UAAU,gBAAkBvE,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAY+sC,cAAe,CACvL,GAAIl3C,KAAK62B,MAAMlZ,IAAK,CACnB3d,KAAK62B,MAAMlZ,IAAIyR,gBACfpvB,KAAK62B,MAAMlZ,IAAIwS,aACpB,CAEInwB,KAAK62B,MAAMlZ,IAAM3d,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYusC,eAAe12C,KAAKiL,MACjF1B,EAAOhE,KAAKvF,KAAK62B,MAAMlZ,IAC3B,CAEGpU,EAASA,EAAO4B,OAAOnL,KAAKiL,MAE5B,IAAKsuD,GAAUv5D,KAAK43D,aAAar1D,MAAMkB,QAAQ0G,aAAe,SAAWnK,KAAK43D,aAAar1D,MAAMgC,UAAU,gBAAkBvE,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYgtC,iBAAkB,CAC1L,GAAIn3C,KAAK62B,MAAMxC,OAAQ,CACtBr0B,KAAK62B,MAAMxC,OAAOjF,gBAClBpvB,KAAK62B,MAAMxC,OAAOlE,aACvB,CAEInwB,KAAK62B,MAAMxC,OAASr0B,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYwsC,kBAAkB32C,KAAKiL,MACvF1B,EAAOhE,KAAKvF,KAAK62B,MAAMxC,OAC3B,CACA,CACA,KAAQ,CACN,IAAKr0B,KAAKk4D,UAAU93D,QAAUJ,KAAK43D,aAAar1D,MAAMkB,QAAQ0G,aAAe,QAAS,CAErF,GAAInK,KAAK43D,aAAar1D,MAAMgC,UAAU,eAAgB,CAErD,IAAKg1D,GAAUv5D,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAY+sC,cAAe,CACzE,GAAIl3C,KAAK62B,MAAMlZ,IAAK,CACnB3d,KAAK62B,MAAMlZ,IAAIyR,gBACfpvB,KAAK62B,MAAMlZ,IAAIwS,aACrB,CAEK,GAAInwB,KAAK43D,aAAar1D,MAAMkB,QAAQy8B,qBAAsB,CACzDlgC,KAAK62B,MAAMlZ,IAAM3d,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYusC,eAAe12C,KAAKiL,MACjF1B,EAAOhE,KAAKvF,KAAK62B,MAAMlZ,IAC7B,CACA,CAEI,IAAK47C,GAAUv5D,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYgtC,iBAAkB,CAC5E,GAAIn3C,KAAK62B,MAAMxC,OAAQ,CACtBr0B,KAAK62B,MAAMxC,OAAOjF,gBAClBpvB,KAAK62B,MAAMxC,OAAOlE,aACxB,CAEK,GAAInwB,KAAK43D,aAAar1D,MAAMkB,QAAQy8B,qBAAsB,CACzDlgC,KAAK62B,MAAMxC,OAASr0B,KAAK43D,aAAar1D,MAAMiC,QAAQ2F,YAAYwsC,kBAAkB32C,KAAKiL,MACvF1B,EAAOhE,KAAKvF,KAAK62B,MAAMxC,OAC7B,CACA,CACA,CACA,CACA,CAEC,OAAO9qB,CACR,EAEAkZ,EAAMhjB,UAAUuhB,QAAU,SAAUhY,EAAS2a,GACzC,IACCpa,EAAS,GAEbvJ,KAAKw5D,UAEL,IAAKxwD,GAAWA,GAAWhJ,KAAKgJ,QAAS,CACxChJ,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3BwE,EAAOhE,KAAKR,EAAIic,QAAQ2C,GAAa,QACxC,GACA,CAEC,OAAOpa,CACR,EAQAkZ,EAAMhjB,UAAUw9C,YAAc,WAC7B,IAAIvX,EAAQ,EAEZ,GAAI1lC,KAAKk4D,UAAU93D,OAAQ,CAC1BJ,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChCqa,GAASra,EAAM4xB,aAClB,GACA,KAAQ,CACNvX,EAAQ1lC,KAAKiL,KAAK7K,MACpB,CACC,OAAOslC,CACR,EAEAjjB,EAAMhjB,UAAUk4D,iBAAmB,WAClC,GAAI33D,KAAKgJ,QAAS,CACjBhJ,KAAKsO,MACP,KAAQ,CACNtO,KAAKqO,MACP,CACA,EAEAoU,EAAMhjB,UAAU6O,KAAO,WACtBtO,KAAKgJ,QAAU,MAEf,GAAIhJ,KAAK43D,aAAar1D,MAAMM,WAAW+jB,iBAAmB,YAAc5mB,KAAK43D,aAAar1D,MAAMkB,QAAQ6b,WAAY,CAEnHtf,KAAK2C,QAAQY,UAAUmkB,OAAO,2BAE9B,GAAI1nB,KAAKk4D,UAAU93D,OAAQ,CAC1BJ,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAEhC,IAAIpgB,EAAOogB,EAAMiuC,oBAEjBruD,EAAKzF,SAAQ,SAAUT,GACtBA,EAAIqqB,eACT,GACA,GACA,KAAS,CACNpvB,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3B,IAAI4Z,EAAQ5Z,EAAIjB,aAChB6a,EAAM1X,WAAWrB,YAAY+Y,EACjC,GACA,CAEE3e,KAAK43D,aAAar1D,MAAMM,WAAW+iB,eAAe5lB,KAAK43D,aAAa32C,kBAAmBjhB,KAAK43D,aAAanyC,mBAEzGzlB,KAAK43D,aAAar1D,MAAMM,WAAWykB,kCACrC,KAAQ,CACNtnB,KAAK43D,aAAa32C,gBAAgB,KACpC,CAECjhB,KAAK43D,aAAar1D,MAAMkB,QAAQ48B,uBAAuB5/B,KAAKT,KAAKuC,MAAOvC,KAAK4J,eAAgB,MAC9F,EAEA6Y,EAAMhjB,UAAU4O,KAAO,WACtB,IAAI1I,EAAO3F,KAEX2F,EAAKqD,QAAU,KAEf,GAAIhJ,KAAK43D,aAAar1D,MAAMM,WAAW+jB,iBAAmB,YAAc5mB,KAAK43D,aAAar1D,MAAMkB,QAAQ6b,WAAY,CAEnHtf,KAAK2C,QAAQY,UAAUC,IAAI,2BAE3B,IAAIuzB,EAAOpxB,EAAK7B,aAEhB,GAAI9D,KAAKk4D,UAAU93D,OAAQ,CAC1BJ,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChC,IAAIpgB,EAAOogB,EAAMiuC,oBAEjBruD,EAAKzF,SAAQ,SAAUT,GACtB,IAAI4Z,EAAQ5Z,EAAIjB,aAChBizB,EAAK9vB,WAAW/D,aAAayb,EAAOoY,EAAK7vB,aACzCnC,EAAIpB,aACJozB,EAAOpY,CACZ,GACA,GACA,KAAS,CACNhZ,EAAKsF,KAAKzF,SAAQ,SAAUT,GAC3B,IAAI4Z,EAAQ5Z,EAAIjB,aAChBizB,EAAK9vB,WAAW/D,aAAayb,EAAOoY,EAAK7vB,aACzCnC,EAAIpB,aACJozB,EAAOpY,CACX,GACA,CAEE3e,KAAK43D,aAAar1D,MAAMM,WAAW+iB,eAAe5lB,KAAK43D,aAAa32C,kBAAmBjhB,KAAK43D,aAAanyC,mBAEzGzlB,KAAK43D,aAAar1D,MAAMM,WAAWykB,kCACrC,KAAQ,CACNtnB,KAAK43D,aAAa32C,gBAAgB,KACpC,CAECjhB,KAAK43D,aAAar1D,MAAMkB,QAAQ48B,uBAAuB5/B,KAAKT,KAAKuC,MAAOvC,KAAK4J,eAAgB,KAC9F,EAEA6Y,EAAMhjB,UAAU+5D,QAAU,WACzB,IAAI70D,EAAO,GAEX,UAAW3E,KAAKgJ,SAAW,WAAY,CAEtChJ,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3BJ,EAAKY,KAAKR,EAAIic,UACjB,IAEEhhB,KAAKgJ,QAAUhJ,KAAKgJ,QAAQhJ,KAAKiF,IAAKjF,KAAKi9C,cAAet4C,EAAM3E,KAAK4J,eACvE,CACA,EAEA6Y,EAAMhjB,UAAU42C,YAAc,SAAUtxC,GACvC,IAAIO,EAAQ,MACZ,GAAItF,KAAKk4D,UAAU93D,OAAQ,CAC1BJ,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChC,IAAIvb,EAASub,EAAMgrB,YAAYtxC,GAE/B,GAAI+K,EAAQ,CACXxK,EAAQwK,CACZ,CACA,GACA,KAAQ,CACN,GAAI9P,KAAKiL,KAAKvK,MAAK,SAAUghB,GAC5B,OAAOA,IAAS3c,CACnB,IAAM,CACHO,EAAQtF,IACX,CACA,CAEC,OAAOsF,CACR,EAEAmd,EAAMhjB,UAAU+3C,aAAe,SAAUxlC,GACxC,IAAIzI,EAAS,GAEbvJ,KAAKk4D,UAAU1yD,SAAQ,SAAUqU,GAChCtQ,EAAOhE,KAAKyM,EAAY6H,EAAMjQ,eAAiBiQ,EACjD,IAEC,OAAOtQ,CACR,EAEAkZ,EAAMhjB,UAAUmkB,QAAU,SAAU61C,GACnC,IAAIlwD,EAAS,GAEbvJ,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3BwE,EAAOhE,KAAKk0D,EAAY10D,EAAI6E,eAAiB7E,EAC/C,IAEC,OAAOwE,CACR,EAEAkZ,EAAMhjB,UAAU05D,4BAA8B,WAC7C,IAAIx0D,EAAO,GAEX3E,KAAKiL,KAAKzF,SAAQ,SAAUT,GAC3BJ,EAAKY,KAAKR,EAAIic,UAChB,IAEChhB,KAAKm4D,gBAAkBn4D,KAAKmuD,UAAUnuD,KAAKiF,IAAKjF,KAAKi9C,cAAet4C,EAAM3E,KAAK4J,gBAE/E,MAAO5J,KAAK2C,QAAQQ,WAAY,CAC/BnD,KAAK2C,QAAQiD,YAAY5F,KAAK2C,QAAQQ,WACxC,CAAE,UAAWnD,KAAKm4D,kBAAoB,SAAU,CAC9Cn4D,KAAK2C,QAAQ2V,UAAYtY,KAAKm4D,eAChC,KAAQ,CACNn4D,KAAK2C,QAAQyE,YAAYpH,KAAKm4D,gBAChC,CAECn4D,KAAK2C,QAAQO,aAAalD,KAAKo4D,aAAcp4D,KAAK2C,QAAQQ,WAC3D,EAEAsf,EAAMhjB,UAAUi6D,QAAU,WACzB,IAAInqB,EAAOjvC,UAAUF,OAAS,GAAKE,UAAU,KAAOK,UAAYL,UAAU,GAAK,GAE/EivC,EAAKpoC,QAAQnH,KAAKiF,KAClB,GAAIjF,KAAKsK,OAAQ,CAChBtK,KAAKsK,OAAOovD,QAAQnqB,EACtB,CACC,OAAOA,CACR,EAGA9sB,EAAMhjB,UAAUqE,WAAa,WAC5B9D,KAAK25D,aAAe,MAEpB35D,KAAKw5D,UAEL,GAAIx5D,KAAKgJ,QAAS,CACjBhJ,KAAK2C,QAAQY,UAAUC,IAAI,0BAC7B,KAAQ,CACNxD,KAAK2C,QAAQY,UAAUmkB,OAAO,0BAChC,CAEC,IAAK,IAAI5hB,EAAI,EAAGA,EAAI9F,KAAK2C,QAAQi3D,WAAWx5D,SAAU0F,EAAG,CACxD9F,KAAK2C,QAAQi3D,WAAW9zD,GAAGmB,WAAWrB,YAAY5F,KAAK2C,QAAQi3D,WAAW9zD,GAC5E,CAEC9F,KAAKm5D,8BAIL,OAAOn5D,KAAK2C,OACb,EAEA8f,EAAMhjB,UAAU2vB,cAAgB,WAC/B,GAAIpvB,KAAK2C,SAAW3C,KAAK2C,QAAQsE,WAAY,CAC5CjH,KAAK2C,QAAQsE,WAAWrB,YAAY5F,KAAK2C,QAC3C,CACA,EAGA8f,EAAMhjB,UAAU0oB,gBAAkB,WACjCnoB,KAAK0wB,UAAU1wB,KAAK2C,QAAQkK,aAC7B,EAEA4V,EAAMhjB,UAAUkE,WAAa,SAAU8J,GACtC,IAAKzN,KAAK8oB,aAAerb,EAAO,CAC/BzN,KAAKmoB,kBACLnoB,KAAK8oB,YAAc,IACrB,CACA,EAEArG,EAAMhjB,UAAU2G,aAAe,WAC9BpG,KAAK8oB,YAAc,MACnB9oB,KAAK2H,OAAS,EAEd,GAAI+F,EAAUjO,UAAUkO,QAAQC,UAAU5N,KAAK2C,SAAU,CACxD3C,KAAK2D,WAAW,KAClB,CACA,EAEA8e,EAAMhjB,UAAUixB,UAAY,SAAU/oB,GACrC,GAAI3H,KAAK2H,QAAUA,EAAQ,CAC1B3H,KAAK2H,OAASA,EACd3H,KAAKgvB,YAAchvB,KAAK2C,QAAQoW,YAClC,CACA,EAGA0J,EAAMhjB,UAAUoI,UAAY,WAC3B,OAAO7H,KAAKgvB,WACb,EAEAvM,EAAMhjB,UAAUwiB,SAAW,WAC1B,OAAOjiB,IACR,EAEAyiB,EAAMhjB,UAAU+wB,mBAAqB,WAAY,EACjD/N,EAAMhjB,UAAU2a,WAAa,WAAY,EACzCqI,EAAMhjB,UAAU4a,cAAgB,WAAY,EAC5CoI,EAAMhjB,UAAU0a,gBAAkB,WAAY,EAG9CsI,EAAMhjB,UAAUmK,aAAe,WAC9B,IAAK5J,KAAKgS,UAAW,CACpBhS,KAAKgS,UAAY,IAAIylD,EAAez3D,KACtC,CAEC,OAAOA,KAAKgS,SACb,EAMA,IAAI6nD,EAAY,SAASA,EAAUt3D,GAElCvC,KAAKuC,MAAQA,EAEbvC,KAAK+3D,eAAiB,MACtB/3D,KAAK26C,UAAY,CAAC,WACjB,OAAO,KACT,GACC36C,KAAKi5D,gBAAkB,CAAC,WACvB,MAAO,EACT,GACCj5D,KAAKk4D,UAAY,GACjBl4D,KAAK24D,cAAgB,MACrB34D,KAAKopC,OAAS,GACdppC,KAAK4gB,aAAe,CACrB,EAGAi5C,EAAUp6D,UAAUkE,WAAa,WAChC,IAAIgC,EAAO3F,KACPwd,EAAU7X,EAAKpD,MAAMkB,QAAQ+Z,QAC7Bm9B,EAAYh1C,EAAKpD,MAAMkB,QAAQ+5B,eAC/BE,EAAc/3B,EAAKpD,MAAMkB,QAAQi6B,YAErC19B,KAAK24D,cAAgBhzD,EAAKpD,MAAMkB,QAAQg6B,YAExC,GAAI/9B,MAAM2F,QAAQmY,IAAY9d,MAAM2F,QAAQq4B,IAAgBlgB,EAAQpd,OAASs9B,EAAYt9B,OAAQ,CAChGiM,QAAQC,KAAK,gFACf,CAEC3G,EAAKszD,gBAAkB,CAAC,WACvB,MAAO,EACT,GACCj5D,KAAK26C,UAAY,CAAC,WACjB,OAAO,KACT,GAECh1C,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,eAAe,SAAUkmD,EAAWhrB,GACpEnpC,EAAKszD,gBAAgB,GAAK,SAAUn5D,EAAO4lC,EAAO/gC,GAEjD,cAAe7E,IAAU,YAAc,GAAKA,GAAS,UAAY4lC,EAAQ,KAAOA,IAAU,EAAIo0B,EAAYhrB,EAAK1F,OAAOgH,OAAS,UAClI,CACA,IAECpwC,KAAK+3D,eAAiB,GAEtB,GAAIr4D,MAAM2F,QAAQmY,IAAYA,EAAS,CACtC,GAAIxd,KAAKuC,MAAMgC,UAAU,gBAAkBvE,KAAKuC,MAAMkB,QAAQ0G,aAAe,SAAWnK,KAAKuC,MAAMkB,QAAQ0G,aAAe,OAAQ,CACjInK,KAAKuC,MAAMiC,QAAQ2F,YAAY8rC,aAClC,CACA,KAAQ,CACN,GAAIj2C,KAAKuC,MAAMgC,UAAU,gBAAkBvE,KAAKuC,MAAMkB,QAAQ0G,aAAe,QAAS,CAErF,IAAIvF,EAAO5E,KAAKuC,MAAMmI,cAAcxB,iBAEpCtE,EAAKY,SAAQ,SAAUN,GACtB,GAAIA,EAAIoB,WAAWmO,QAAS,CAC3B9O,EAAKpD,MAAMiC,QAAQ2F,YAAY2rC,kBACpC,CAEI,GAAI5wC,EAAIoB,WAAWoO,WAAY,CAC9B/O,EAAKpD,MAAMiC,QAAQ2F,YAAY6rC,qBACpC,CACA,GACA,CACA,CAEC,IAAKt2C,MAAM2F,QAAQmY,GAAU,CAC5BA,EAAU,CAACA,EACb,CAECA,EAAQhY,SAAQ,SAAU6lB,EAAOvlB,GAChC,IAAIi0D,EAAYtzD,EAEhB,UAAW4kB,GAAS,WAAY,CAC/B0uC,EAAa1uC,CAChB,KAAS,CACN5kB,EAASd,EAAKpD,MAAMmI,cAAcpC,iBAAiB+iB,GAEnD,GAAI5kB,EAAQ,CACXszD,EAAa,SAASA,EAAWp1D,GAChC,OAAO8B,EAAOgK,cAAc9L,EACjC,CACA,KAAU,CACNo1D,EAAa,SAASA,EAAWp1D,GAChC,OAAOA,EAAK0mB,EACjB,CACA,CACA,CAEE1lB,EAAKoyD,eAAexyD,KAAK,CACxBJ,aAAckmB,IAAU,WAAa,MAAQA,EAC7CskC,KAAMoK,EACNxwB,OAAQ5jC,EAAKgzD,cAAgBhzD,EAAKgzD,cAAc7yD,GAAK,OAExD,IAEC,GAAI60C,EAAW,CAEd,IAAKj7C,MAAM2F,QAAQs1C,GAAY,CAC9BA,EAAY,CAACA,EAChB,CAEEA,EAAUn1C,SAAQ,SAAUwqC,GAI9B,IAEErqC,EAAKg1C,UAAYA,CACnB,CAEC,GAAIjd,EAAa,CAChB/3B,EAAKszD,gBAAkBv5D,MAAM2F,QAAQq4B,GAAeA,EAAc,CAACA,EACrE,CAEC19B,KAAK8oB,YAAc,IACpB,EAEA+wC,EAAUp6D,UAAUimB,gBAAkB,SAAU1jB,GAC/ChC,KAAK4gB,aAAe5e,CACrB,EAEA63D,EAAUp6D,UAAUgmB,gBAAkB,WACrC,OAAOzlB,KAAK4gB,YACb,EAGAi5C,EAAUp6D,UAAUmkB,QAAU,SAAU3Y,GACvC,GAAIjL,KAAK+3D,eAAe33D,OAAQ,CAE/BJ,KAAKuC,MAAMkB,QAAQ08B,aAAa1/B,KAAKT,KAAKuC,OAE1CvC,KAAKg6D,eAAe/uD,GAEpB,GAAIjL,KAAKuC,MAAMkB,QAAQ28B,YAAa,CACnCpgC,KAAKuC,MAAMkB,QAAQ28B,YAAY3/B,KAAKT,KAAKuC,MAAOvC,KAAKsrB,UAAU,MAClE,CAEE,OAAOtrB,KAAKihB,iBACd,KAAQ,CACN,OAAOhW,EAAKoa,MAAM,EACpB,CACA,EAEAw0C,EAAUp6D,UAAU6rB,UAAY,SAAUmuC,GACzC,IAAIQ,EAAkB,GAEtBj6D,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChC4uC,EAAgB10D,KAAKk0D,EAAYpuC,EAAMzhB,eAAiByhB,EAC1D,IAEC,OAAO4uC,CACR,EAEAJ,EAAUp6D,UAAU82C,eAAiB,SAAUlrB,GAC9C,IAAI6uC,EAAUl6D,KAEd,IAAIi6D,EAAkB,GAEtB,IAAK5uC,EAAO,CACXA,EAAQrrB,IACV,CAECqrB,EAAM6sC,UAAU1yD,SAAQ,SAAUqU,GACjC,GAAIA,EAAMq+C,UAAU93D,OAAQ,CAC3B65D,EAAkBA,EAAgB9uD,OAAO+uD,EAAQ3jB,eAAe18B,GACnE,KAAS,CACNogD,EAAgB10D,KAAKsU,EACxB,CACA,IAEC,OAAOogD,CACR,EAEAJ,EAAUp6D,UAAU4gB,KAAO,WAC1BrgB,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChCA,EAAMhL,MACR,GACA,EAEAw5C,EAAUp6D,UAAU06D,kBAAoB,SAAUjC,GACjD,IAAIvyD,EAAO3F,KACX,IAAIo6D,EAAgB,GAEpBlC,EAAU1yD,SAAQ,SAAU6lB,GAC3B,IAAIqS,EAAc,GAClBA,EAAYsS,MAAQ,EACpBtS,EAAY28B,SAAW,EACvB38B,EAAY48B,cAAgB,GAC5B,IAAIte,EAAY,GAEhB,GAAI3wB,EAAMysC,aAAc,CACvB9b,EAAYr2C,EAAKw0D,kBAAkB9uC,EAAM6sC,WAEzCx6B,EAAYsS,MAAQ3kB,EAAM2kB,MAC1BtS,EAAY28B,SAAWre,EAAU57C,OAASirB,EAAM6sC,UAAU93D,OAC1Ds9B,EAAY48B,cAAgBjvC,EAAM8iC,UAAU9iC,EAAMpmB,IAAKy4B,EAAY28B,SAAUhvC,EAAMpgB,KAAMogB,GAEzF+uC,EAAc70D,KAAKm4B,GACnB08B,EAAgBA,EAAcjvD,OAAO6wC,EACxC,KAAS,CACNte,EAAYsS,MAAQ3kB,EAAM2kB,MAC1BtS,EAAY48B,cAAgBjvC,EAAM8iC,UAAU9iC,EAAMpmB,IAAKomB,EAAMpgB,KAAK7K,OAAQirB,EAAMpgB,KAAMogB,GACtFqS,EAAY28B,SAAWhvC,EAAMzH,UAAUxjB,OAEvCg6D,EAAc70D,KAAKm4B,GAEnBrS,EAAMzH,UAAUpe,SAAQ,SAAUT,GACjCq1D,EAAc70D,KAAKR,EAAIic,QAAQ,QACnC,GACA,CACA,IAEC,OAAOo5C,CACR,EAEAP,EAAUp6D,UAAUgqC,eAAiB,WAEpC,OAAOzpC,KAAKm6D,kBAAkBn6D,KAAKk4D,UACpC,EAEA2B,EAAUp6D,UAAU42C,YAAc,SAAUtxC,GAC3C,IAAIO,EAAQ,MAEZtF,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChC,IAAIvb,EAASub,EAAMgrB,YAAYtxC,GAE/B,GAAI+K,EAAQ,CACXxK,EAAQwK,CACX,CACA,IAEC,OAAOxK,CACR,EAEAu0D,EAAUp6D,UAAU4oB,YAAc,WACjC,OAAOroB,KAAKk4D,UAAU93D,MACvB,EAEAy5D,EAAUp6D,UAAUu6D,eAAiB,SAAU/uD,GAC9C,IAAItF,EAAO3F,KACPu6D,EAAY50D,EAAKyjC,OAErBzjC,EAAKyjC,OAAS,GACdzjC,EAAKuyD,UAAY,GAEjB,GAAIl4D,KAAK24D,eAAiB34D,KAAK24D,cAAc,GAAI,CAChD34D,KAAK24D,cAAc,GAAGnzD,SAAQ,SAAU1F,GACvC6F,EAAK60D,YAAY16D,EAAO,EAAGy6D,EAC9B,IAEEtvD,EAAKzF,SAAQ,SAAUT,GACtBY,EAAK80D,yBAAyB11D,EAAKw1D,EACtC,GACA,KAAQ,CACNtvD,EAAKzF,SAAQ,SAAUT,GACtBY,EAAKqc,iBAAiBjd,EAAKw1D,EAC9B,GACA,CACA,EAEAV,EAAUp6D,UAAU+6D,YAAc,SAAUzB,EAAS/oB,EAAOuqB,GAC3D,IAAIvB,EAAWhpB,EAAQ,IAAM+oB,EACzB1tC,EAEJkvC,EAAYA,GAAa,GAEzBlvC,EAAQ,IAAI5I,EAAMziB,KAAM,MAAOgwC,EAAO+oB,EAAS/4D,KAAK+3D,eAAe,GAAG5yD,MAAOnF,KAAKi5D,gBAAgB,GAAIsB,EAAUvB,IAEhHh5D,KAAKopC,OAAO4vB,GAAY3tC,EACxBrrB,KAAKk4D,UAAU3yD,KAAK8lB,EACrB,EAaAwuC,EAAUp6D,UAAUg7D,yBAA2B,SAAU11D,EAAKw1D,GAC7D,IAAIxB,EAAU/4D,KAAK+3D,eAAe,GAAGpI,KAAK5qD,EAAIic,WAC1Cg4C,EAAW,KAAOD,EAEtB,GAAI/4D,KAAKopC,OAAO4vB,GAAW,CAC1Bh5D,KAAKopC,OAAO4vB,GAAU93C,OAAOnc,EAC/B,CACA,EAEA80D,EAAUp6D,UAAUuiB,iBAAmB,SAAUjd,EAAKw1D,GACrD,IAAIxB,EAAU/4D,KAAK+3D,eAAe,GAAGpI,KAAK5qD,EAAIic,WAC1C05C,GAAkB16D,KAAKopC,OAAO,KAAO2vB,GAEzC,GAAI2B,EAAgB,CACnB16D,KAAKw6D,YAAYzB,EAAS,EAAGwB,EAC/B,CAECv6D,KAAKopC,OAAO,KAAO2vB,GAAS73C,OAAOnc,GAEnC,OAAQ21D,CACT,EAEAb,EAAUp6D,UAAUgyB,mBAAqB,SAAU1sB,GAClD,IAAI41D,EAAc51D,EAAIkd,WAClB24C,EAAeD,EAAYjB,UAC3BmB,EAAe76D,KAAK86D,gBAAgB/1D,GACpCg2D,EAAW,KAEf,IAAIA,EAAWH,EAAax6D,QAAUy6D,EAAaz6D,QAAUw6D,EAAaI,OAAM,SAAUr4D,EAASX,GAClG,OAAOW,IAAYk4D,EAAa74D,EAClC,IAEC,IAAK+4D,EAAU,CACdJ,EAAY93C,UAAU9d,GACtB/E,KAAKgiB,iBAAiBjd,EAAKY,KAAKyjC,QAChCppC,KAAKuC,MAAMM,WAAWqd,kBAAkB,QAAS,MAAO,KAC1D,CACA,EAEA25C,EAAUp6D,UAAUq7D,gBAAkB,SAAU/1D,GAC/C,IAAIk2D,EAAY,GACZzkB,EAAUzxC,EAAIic,UAClBhhB,KAAK+3D,eAAevyD,SAAQ,SAAU01D,GACrCD,EAAU11D,KAAK21D,EAAQvL,KAAKnZ,GAC9B,IACC,OAAOykB,CACR,EAEApB,EAAUp6D,UAAUwhB,gBAAkB,SAAUxT,GAC5C,IAAC9H,EAAO3F,KACPuJ,EAAS,GAGb5D,EAAKuyD,UAAU1yD,SAAQ,SAAU6lB,GAChC9hB,EAASA,EAAO4B,OAAOkgB,EAAMiuC,oBAC/B,IAGC,GAAI7rD,EAAO,CAEV,IAAImT,EAAejb,EAAKpD,MAAMM,WAAW+iB,eAAerc,EAAQvJ,KAAKylB,mBAErE,GAAI7E,IAAiB,KAAM,CAC1B5gB,KAAK0lB,gBAAgB9E,EACxB,CAEEjb,EAAKpD,MAAMM,WAAWqd,kBAAkB,QAAS,KAAM,KACzD,CAEC,OAAO3W,CACR,EAEAswD,EAAUp6D,UAAUie,cAAgB,SAAUzZ,GAC7C,GAAIjE,KAAKuC,MAAMkB,QAAQyC,cAAe,CACrCjC,GAAQjE,KAAKuC,MAAM4D,QAAQokB,WAC7B,CAECtmB,EAAOA,EAAO,KAEdjE,KAAKk4D,UAAU1yD,SAAQ,SAAU6lB,GAChCA,EAAM+tC,aAAan1D,EACrB,GACA,EAEA41D,EAAUp6D,UAAU45D,YAAc,SAAUhuC,GAC3C,IAAI2tC,EAAW3tC,EAAM2kB,MAAQ,IAAM3kB,EAAMpmB,IACrCjD,EAEJ,GAAIhC,KAAKopC,OAAO4vB,GAAW,QACnBh5D,KAAKopC,OAAO4vB,GAEnBh3D,EAAQhC,KAAKk4D,UAAUj3D,QAAQoqB,GAE/B,GAAIrpB,GAAS,EAAG,CACfhC,KAAKk4D,UAAUlxD,OAAOhF,EAAO,EAChC,CACA,CACA,EAEA0L,EAAUjO,UAAU6rC,eAAe,YAAauuB,GAChD,IAAIsB,EAAU,SAASA,EAAQ54D,GAC9BvC,KAAKuC,MAAQA,EAEbvC,KAAK4f,QAAU,GACf5f,KAAKgC,OAAS,CACf,EAEAm5D,EAAQ17D,UAAUogB,MAAQ,WACzB7f,KAAK4f,QAAU,GACf5f,KAAKgC,OAAS,CACf,EAEAm5D,EAAQ17D,UAAU4hB,OAAS,SAAUpT,EAAM+D,EAAWrN,GAErD3E,KAAK4f,QAAU5f,KAAK4f,QAAQyF,MAAM,EAAGrlB,KAAKgC,MAAQ,GAElDhC,KAAK4f,QAAQra,KAAK,CACjB0I,KAAMA,EACN+D,UAAWA,EACXrN,KAAMA,IAGP3E,KAAKgC,OACN,EAEAm5D,EAAQ17D,UAAU+qC,mBAAqB,WACtC,OAAOxqC,KAAKgC,MAAQ,CACrB,EAEAm5D,EAAQ17D,UAAUgrC,mBAAqB,WACtC,OAAOzqC,KAAK4f,QAAQxf,QAAUJ,KAAKgC,MAAQ,EAC5C,EAEAm5D,EAAQ17D,UAAUm3B,sBAAwB,SAAU5kB,GACnD,IAAIhQ,EAAQhC,KAAK4f,QAAQjgB,WAAU,SAAU+hB,GAC5C,OAAOA,EAAK1P,YAAcA,CAC5B,IAEC,GAAIhQ,GAAS,EAAG,CACfhC,KAAK4f,QAAQ5Y,OAAOhF,EAAO,GAC3B,GAAIA,GAAShC,KAAKgC,MAAO,CACxBhC,KAAKgC,OACR,CAEEhC,KAAK42B,sBAAsB5kB,EAC7B,CACA,EAEAmpD,EAAQ17D,UAAU6qC,KAAO,WAExB,GAAItqC,KAAKgC,OAAS,EAAG,CACpB,IAAIqf,EAASrhB,KAAK4f,QAAQ5f,KAAKgC,OAE/BhC,KAAKo7D,QAAQ/5C,EAAOpT,MAAMxN,KAAKT,KAAMqhB,GAErCrhB,KAAKgC,QAELhC,KAAKuC,MAAMkB,QAAQy9B,YAAYzgC,KAAKT,KAAKuC,MAAO8e,EAAOpT,KAAMoT,EAAOrP,UAAUpI,eAAgByX,EAAO1c,MAErG,OAAO,IACT,KAAQ,CACN0H,QAAQC,KAAK,gDACb,OAAO,KACT,CACA,EAEA6uD,EAAQ17D,UAAU8qC,KAAO,WACxB,GAAIvqC,KAAK4f,QAAQxf,OAAS,EAAIJ,KAAKgC,MAAO,CAEzChC,KAAKgC,QAEL,IAAIqf,EAASrhB,KAAK4f,QAAQ5f,KAAKgC,OAE/BhC,KAAKq7D,QAAQh6C,EAAOpT,MAAMxN,KAAKT,KAAMqhB,GAErCrhB,KAAKuC,MAAMkB,QAAQ09B,YAAY1gC,KAAKT,KAAKuC,MAAO8e,EAAOpT,KAAMoT,EAAOrP,UAAUpI,eAAgByX,EAAO1c,MAErG,OAAO,IACT,KAAQ,CACN0H,QAAQC,KAAK,gDACb,OAAO,KACT,CACA,EAEA6uD,EAAQ17D,UAAU27D,QAAU,CAC3BE,SAAU,SAASA,EAASj6C,GAC3BA,EAAOrP,UAAUuf,oBAAoBlQ,EAAO1c,KAAKqvB,SACnD,EAECunC,OAAQ,SAASA,EAAOl6C,GACvBA,EAAOrP,UAAUsgB,cACnB,EAECE,UAAW,SAASA,EAAUnR,GAC7B,IAAIm6C,EAASx7D,KAAKuC,MAAMM,WAAWue,aAAaC,EAAO1c,KAAKA,KAAM0c,EAAO1c,KAAKwc,IAAKE,EAAO1c,KAAK3C,OAE/F,GAAIhC,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpEvE,KAAKuC,MAAMiC,QAAQiZ,UAAUwD,gBAAgB,KAChD,CAEEjhB,KAAKy7D,WAAWp6C,EAAOrP,UAAWwpD,EACpC,EAECE,QAAS,SAASA,EAAQr6C,GACzBrhB,KAAKuC,MAAMM,WAAWyf,cAAcjB,EAAOrP,UAAWhS,KAAKuC,MAAMM,WAAWoI,KAAKoW,EAAO1c,KAAKyd,UAAWf,EAAO1c,KAAKsF,OACpHjK,KAAKuC,MAAMM,WAAWwD,QACxB,GAGA80D,EAAQ17D,UAAU47D,QAAU,CAC3BC,SAAU,SAASA,EAASj6C,GAC3BA,EAAOrP,UAAUuf,oBAAoBlQ,EAAO1c,KAAKyxB,SACnD,EAECmlC,OAAQ,SAASA,EAAOl6C,GACvB,IAAIm6C,EAASx7D,KAAKuC,MAAMM,WAAWue,aAAaC,EAAO1c,KAAKA,KAAM0c,EAAO1c,KAAKwc,IAAKE,EAAO1c,KAAK3C,OAE/F,GAAIhC,KAAKuC,MAAMkB,QAAQ+Z,SAAWxd,KAAKuC,MAAMgC,UAAU,aAAc,CACpEvE,KAAKuC,MAAMiC,QAAQiZ,UAAUwD,gBAAgB,KAChD,CAEEjhB,KAAKy7D,WAAWp6C,EAAOrP,UAAWwpD,EACpC,EAEChpC,UAAW,SAASA,EAAUnR,GAC7BA,EAAOrP,UAAUsgB,cACnB,EAECopC,QAAS,SAASA,EAAQr6C,GACzBrhB,KAAKuC,MAAMM,WAAWyf,cAAcjB,EAAOrP,UAAWhS,KAAKuC,MAAMM,WAAWoI,KAAKoW,EAAO1c,KAAK0d,OAAQhB,EAAO1c,KAAKsF,OACjHjK,KAAKuC,MAAMM,WAAWwD,QACxB,GAIA80D,EAAQ17D,UAAUg8D,WAAa,SAAUE,EAAQH,GAChDx7D,KAAK4f,QAAQpa,SAAQ,SAAU6b,GAC9B,GAAIA,EAAOrP,qBAAqBkM,EAAK,CACpC,GAAImD,EAAOrP,YAAc2pD,EAAQ,CAChCt6C,EAAOrP,UAAYwpD,CACvB,CACA,MAAS,GAAIn6C,EAAOrP,qBAAqB4I,EAAM,CAC5C,GAAIyG,EAAOrP,UAAUjN,MAAQ42D,EAAQ,CACpC,IAAIx2D,EAAQkc,EAAOrP,UAAUvL,OAAO+G,WAEpC,GAAIrI,EAAO,CACVkc,EAAOrP,UAAYwpD,EAAOt1C,QAAQ/gB,EACvC,CACA,CACA,CACA,GACA,EAEAuI,EAAUjO,UAAU6rC,eAAe,UAAW6vB,GAC9C,IAAIS,EAAkB,SAASA,EAAgBr5D,GAC9CvC,KAAKuC,MAAQA,EACbvC,KAAK67D,WAAa,GAClB77D,KAAK87D,SAAW,KACjB,EAEAF,EAAgBn8D,UAAUsiC,WAAa,WACnC,IAACp8B,EAAO3F,KACP2C,EAAUgD,EAAKpD,MAAMI,QACrBc,EAAUkC,EAAKpD,MAAMkB,QAErB0wC,EAAUxxC,EAAQumD,qBAAqB,MACvCj+C,EAAOtI,EAAQumD,qBAAqB,SAAS,GAC7CvkD,EAAO,GAGXgB,EAAKm2D,SAAW,MAEhBn2D,EAAKpD,MAAMkB,QAAQ87B,cAAc9+B,KAAKT,KAAKuC,OAE3C0I,EAAOA,EAAOA,EAAKi+C,qBAAqB,MAAQ,GAGhDvjD,EAAKo2D,gBAAgBp5D,EAASc,GAE9B,GAAI0wC,EAAQ/zC,OAAQ,CACnBuF,EAAKq2D,gBAAgB7nB,EAASlpC,EAChC,KAAQ,CACNtF,EAAKs2D,sBAAsB9nB,EAASlpC,EACtC,CAGC,IAAK,IAAIjJ,EAAQ,EAAGA,EAAQiJ,EAAK7K,OAAQ4B,IAAS,CACjD,IAAI+C,EAAMkG,EAAKjJ,GACXqJ,EAAQtG,EAAImkD,qBAAqB,MACjCxnC,EAAO,GAGX,IAAK/b,EAAKm2D,SAAU,CACnBp6C,EAAKje,EAAQzB,OAASA,CACzB,CAEE,IAAK,IAAI8D,EAAI,EAAGA,EAAIuF,EAAMjL,OAAQ0F,IAAK,CACtC,IAAIwF,EAAOD,EAAMvF,GACjB,UAAW9F,KAAK67D,WAAW/1D,KAAO,YAAa,CAC9C4b,EAAK1hB,KAAK67D,WAAW/1D,IAAMwF,EAAKgN,SACpC,CACA,CAGE3T,EAAKY,KAAKmc,EACZ,CAGC,IAAIw6C,EAAa74D,SAASC,cAAc,OAGxC,IAAI64D,EAAax5D,EAAQw5D,WAIzB,IAAK,IAAIr2D,KAAKq2D,EAAY,CACzB,GAAI/8D,EAAQ+8D,EAAWr2D,KAAO,SAAU,CACvCo2D,EAAWvpD,aAAawpD,EAAWr2D,GAAGqlC,KAAMgxB,EAAWr2D,GAAGhG,MAC7D,CACA,CAGC6C,EAAQsE,WAAWs0C,aAAa2gB,EAAYv5D,GAE5Cc,EAAQkB,KAAOA,EAEfgB,EAAKpD,MAAMkB,QAAQ+7B,aAAa/+B,KAAKT,KAAKuC,OAI1CvC,KAAKuC,MAAMI,QAAUu5D,CACtB,EAGAN,EAAgBn8D,UAAUs8D,gBAAkB,SAAUp5D,EAASc,EAAS00B,GACvE,IAAIgkC,EAAax5D,EAAQw5D,WACzB,IAAIC,EAAajkC,EAAiBv4B,OAAOgC,OAAO,GAAIu2B,GAAkBv4B,OAAO+I,KAAKlF,GAClF,IAAI44D,EAAc,GAElBD,EAAW52D,SAAQ,SAAUkc,GAC5B26C,EAAY36C,EAAKguB,eAAiBhuB,CACpC,IAEC,IAAK,IAAI1f,KAASm6D,EAAY,CAC7B,IAAIG,EAASH,EAAWn6D,GACxB,IAAImpC,EAEJ,GAAImxB,WAAkBA,IAAW,YAAc,YAAcl9D,EAAQk9D,KAAY,UAAYA,EAAOnxB,MAAQmxB,EAAOnxB,KAAKlqC,QAAQ,gBAAkB,EAAG,CACpJkqC,EAAOmxB,EAAOnxB,KAAKgP,QAAQ,aAAc,IAEzC,UAAWkiB,EAAYlxB,KAAU,YAAa,CAC7C1nC,EAAQ44D,EAAYlxB,IAASnrC,KAAKu8D,aAAaD,EAAOx8D,MAC1D,CACA,CACA,CACA,EAGA87D,EAAgBn8D,UAAU88D,aAAe,SAAUz8D,GAClD,GAAIA,IAAU,OAAQ,CACrB,OAAO,IACT,CAEC,GAAIA,IAAU,QAAS,CACtB,OAAO,KACT,CAEC,OAAOA,CACR,EAGA87D,EAAgBn8D,UAAU+8D,SAAW,SAAUp3D,GAC9C,IAAIE,EAAQtF,KAAKuC,MAAMkB,QAAQX,QAAQpC,MAAK,SAAU+F,GACrD,OAAOA,EAAOrB,QAAUA,CAC1B,IAEC,OAAOE,GAAS,KACjB,EAGAs2D,EAAgBn8D,UAAUu8D,gBAAkB,SAAU7nB,EAASlpC,GAC9D,IAAK,IAAIjJ,EAAQ,EAAGA,EAAQmyC,EAAQ/zC,OAAQ4B,IAAS,CACjD,IAAC+7C,EAAS5J,EAAQnyC,GACjBy6D,EAAS,MACTv3D,EAAMlF,KAAKw8D,SAASze,EAAO2e,aAC3B5yD,EAGJ,GAAI5E,EAAK,CACRu3D,EAAS,IACZ,KAAS,CACNv3D,EAAM,CAAEE,MAAO24C,EAAO2e,YAAYhqB,OACrC,CAEE,IAAKxtC,EAAIC,MAAO,CACfD,EAAIC,MAAQ44C,EAAO2e,YAAYhqB,OAAOhD,cAAcyK,QAAQ,IAAK,IACpE,CAEErwC,EAAQi0C,EAAO8F,aAAa,SAE5B,GAAI/5C,IAAU5E,EAAI4E,MAAO,CACxB5E,EAAI4E,MAAQA,CACf,CAME9J,KAAK+7D,gBAAgBhe,EAAQ74C,EAAKwB,EAAOjH,UAAUoT,mBAEnD7S,KAAK67D,WAAW75D,GAASkD,EAAIC,MAE7B,GAAID,EAAIC,OAASnF,KAAKuC,MAAMkB,QAAQzB,MAAO,CAC1ChC,KAAK87D,SAAW,IACnB,CAEE,IAAKW,EAAQ,CACZz8D,KAAKuC,MAAMkB,QAAQX,QAAQyC,KAAKL,EACnC,CACA,CACA,EAGA02D,EAAgBn8D,UAAUw8D,sBAAwB,SAAU9nB,EAASlpC,GACpE,IAAK,IAAIjJ,EAAQ,EAAGA,EAAQmyC,EAAQ/zC,OAAQ4B,IAAS,CACpD,IAAI+7C,EAAS5J,EAAQnyC,GACjBkD,EAAM,CAAEE,MAAO,GAAID,MAAO,MAAQnD,GAEtChC,KAAK67D,WAAW75D,GAASkD,EAAIC,MAE7B,IAAI2E,EAAQi0C,EAAO8F,aAAa,SAEhC,GAAI/5C,EAAO,CACV5E,EAAI4E,MAAQA,CACf,CAEE9J,KAAKuC,MAAMkB,QAAQX,QAAQyC,KAAKL,EAClC,CACA,EAEAwI,EAAUjO,UAAU6rC,eAAe,kBAAmBswB,GACtD,IAAIe,EAAc,SAASA,EAAYp6D,GACtCvC,KAAKuC,MAAQA,EACbvC,KAAK48D,UAAY,KACjB58D,KAAK68D,YAAc,KACnB78D,KAAK88D,aAAe,MACpB98D,KAAK+8D,eAAiB,KACvB,EAEAJ,EAAYl9D,UAAUkE,WAAa,WAClC,IAAIorC,EAAW/uC,KAAKuC,MAAMkB,QAAQq1B,YAC9BkkC,EAAiB,GAErBh9D,KAAK48D,UAAY,GACjB58D,KAAK68D,YAAc,GAEnB,GAAI9tB,IAAa,MAAO,CAEvB,IAAK,IAAI9pC,KAAOjF,KAAK+uC,SAAU,CAC9BiuB,EAAe/3D,GAAOjF,KAAK+uC,SAAS9pC,EACvC,CAEE,GAAIrF,OAAO+I,KAAKomC,GAAU3uC,OAAQ,CAEjC,IAAK,IAAI68D,KAAQluB,EAAU,CAC1BiuB,EAAeC,GAAQluB,EAASkuB,EACpC,CACA,CAEEj9D,KAAKk9D,YAAYF,GACjBh9D,KAAKm9D,YACP,CACA,EAEAR,EAAYl9D,UAAUy9D,YAAc,SAAUnuB,GAC7C,IAAIquB,EAAUp9D,KAEd,IAAI2F,EAAO3F,KAEX,IAAIq9D,EAAS,SAASA,EAAOp4D,GAE5B,GAAIm4D,EAAQE,QAAQr4D,GAAM,CAEzB,GAAI8pC,EAAS9pC,GAAM,CAElB,GAAI7F,EAAQ2vC,EAAS9pC,MAAU,SAAU,CACxC8pC,EAAS9pC,GAAO,CAAC8pC,EAAS9pC,GAC/B,CAEI8pC,EAAS9pC,GAAKO,SAAQ,SAAU2qC,GAC/BxqC,EAAK43D,WAAWt4D,EAAKkrC,EAC1B,GACA,CACA,KAAS,CACN9jC,QAAQC,KAAK,sCAAuCrH,EACvD,CACA,EAEC,IAAK,IAAIA,KAAO8pC,EAAU,CACzBsuB,EAAOp4D,EACT,CACA,EAEA03D,EAAYl9D,UAAU89D,WAAa,SAAUl8C,EAAQm8C,GACpD,IAAI73D,EAAO3F,KAEX,IAAImwC,EAAU,CACb9uB,OAAQrhB,KAAKs9D,QAAQj8C,GACrB1Y,KAAM,GACN80D,KAAM,MACNvjB,MAAO,MACPwjB,KAAM,OAGP,IAAIC,EAAUH,EAAYrlB,WAAWzI,cAAc7mC,MAAM,KAAK6qC,KAAK,IAAI7qC,MAAM,KAE7E80D,EAAQn4D,SAAQ,SAAU49C,GACzB,OAAQA,GACP,IAAK,OACJjT,EAAQstB,KAAO,KACf,MAED,IAAK,QACJttB,EAAQ+J,MAAQ,KAChB,MAED,IAAK,OACJ/J,EAAQutB,KAAO,KACf,MAED,QACCta,EAASn2C,SAASm2C,GAClBjT,EAAQxnC,KAAKpD,KAAK69C,GAElB,IAAKz9C,EAAKi3D,UAAUxZ,GAAS,CAC5Bz9C,EAAKi3D,UAAUxZ,GAAU,EAC9B,CAEIz9C,EAAKi3D,UAAUxZ,GAAQ79C,KAAK4qC,GAEhC,GACA,EAEAwsB,EAAYl9D,UAAU09D,WAAa,WAClC,IAAIx3D,EAAO3F,KAEXA,KAAK88D,aAAe,SAAUloD,GAC7B,IAAIgpD,EAAOhpD,EAAE0uC,QACb,IAAIvU,EAAWppC,EAAKi3D,UAAUgB,GAE9B,GAAI7uB,EAAU,CAEbppC,EAAKk3D,YAAYt3D,KAAKq4D,GAEtB7uB,EAASvpC,SAAQ,SAAU2qC,GAC1BxqC,EAAKk4D,aAAajpD,EAAGu7B,EACzB,GACA,CACA,EAECnwC,KAAK+8D,eAAiB,SAAUnoD,GAC/B,IAAIgpD,EAAOhpD,EAAE0uC,QACb,IAAIvU,EAAWppC,EAAKi3D,UAAUgB,GAE9B,GAAI7uB,EAAU,CAEb,IAAI/sC,EAAQ2D,EAAKk3D,YAAY57D,QAAQ28D,GAErC,GAAI57D,GAAS,EAAG,CACf2D,EAAKk3D,YAAY71D,OAAOhF,EAAO,EACnC,CACA,CACA,EAEChC,KAAKuC,MAAMI,QAAQgS,iBAAiB,UAAW3U,KAAK88D,cAEpD98D,KAAKuC,MAAMI,QAAQgS,iBAAiB,QAAS3U,KAAK+8D,eACnD,EAEAJ,EAAYl9D,UAAUujC,cAAgB,WACrC,GAAIhjC,KAAK88D,aAAc,CACtB98D,KAAKuC,MAAMI,QAAQ+hD,oBAAoB,UAAW1kD,KAAK88D,aACzD,CAEC,GAAI98D,KAAK+8D,eAAgB,CACxB/8D,KAAKuC,MAAMI,QAAQ+hD,oBAAoB,QAAS1kD,KAAK+8D,eACvD,CACA,EAEAJ,EAAYl9D,UAAUo+D,aAAe,SAAUjpD,EAAGu7B,GACjD,IAAIxqC,EAAO3F,KACPsF,EAAQ,KAEZ,GAAIsP,EAAEkpD,SAAW3tB,EAAQstB,MAAQ7oD,EAAEmpD,UAAY5tB,EAAQ+J,OAAStlC,EAAEopD,SAAW7tB,EAAQutB,KAAM,CAC1FvtB,EAAQxnC,KAAKnD,SAAQ,SAAUP,GAC9B,IAAIjD,EAAQ2D,EAAKk3D,YAAY57D,QAAQgE,GAErC,GAAIjD,IAAU,EAAG,CAChBsD,EAAQ,KACZ,CACA,IAEE,GAAIA,EAAO,CACV6qC,EAAQ9uB,OAAO5gB,KAAKkF,EAAMiP,EAC7B,CAEE,OAAO,IACT,CAEC,OAAO,KACR,EAGA+nD,EAAYl9D,UAAUsvC,SAAW,CAChCkvB,QAAS,YACTC,QAAS,EACTC,MAAO,GACPC,QAAS,GACTC,aAAc,GACdC,eAAgB,GAChBC,cAAe,GACfC,YAAa,GACbl0B,KAAM,YACNC,KAAM,YACNhE,gBAAiB,aAIlBo2B,EAAYl9D,UAAU69D,QAAU,CAC/BmB,SAAU,SAASA,EAAS7pD,GAC3BA,EAAE0C,kBACF1C,EAAEwgB,gBACJ,EACCipC,aAAc,SAASA,EAAazpD,GAChC,IAAC/R,EAAa7C,KAAKuC,MAAMM,WACxB67D,EAAS77D,EAAWsZ,UAAYtZ,EAAW8E,OAG/CiN,EAAEwgB,iBAEF,GAAIvyB,EAAWqZ,iBAAkB,CAChC,GAAIwiD,GAAU,EAAG,CAChB77D,EAAWF,QAAQwZ,UAAYuiD,CACnC,KAAU,CACN77D,EAAW0b,YAAY1b,EAAW6b,iBAAiB,GACvD,CACA,CAEE1e,KAAKuC,MAAMI,QAAQ4U,OACrB,EACC+mD,eAAgB,SAASA,EAAe1pD,GACvC,IAAI/R,EAAa7C,KAAKuC,MAAMM,WACxB67D,EAAS77D,EAAWsZ,UAAYtZ,EAAW8E,OAC3Cg3D,EAAY97D,EAAWF,QAAQiK,aAEnCgI,EAAEwgB,iBAEF,GAAIvyB,EAAWqZ,iBAAkB,CAChC,GAAIwiD,GAAUC,EAAW,CACxB97D,EAAWF,QAAQwZ,UAAYuiD,CACnC,KAAU,CACN77D,EAAW0b,YAAY1b,EAAW6b,iBAAiB7b,EAAWqZ,iBAAmB,GACrF,CACA,CAEElc,KAAKuC,MAAMI,QAAQ4U,OACrB,EACCgnD,cAAe,SAASA,EAAc3pD,GACrC,IAAI/R,EAAa7C,KAAKuC,MAAMM,WAE5B+R,EAAEwgB,iBAEF,GAAIvyB,EAAWqZ,iBAAkB,CAChCrZ,EAAW0b,YAAY1b,EAAW6b,iBAAiB,GACtD,CAEE1e,KAAKuC,MAAMI,QAAQ4U,OACrB,EACCinD,YAAa,SAASA,EAAY5pD,GACjC,IAAI/R,EAAa7C,KAAKuC,MAAMM,WAE5B+R,EAAEwgB,iBAEF,GAAIvyB,EAAWqZ,iBAAkB,CAChCrZ,EAAW0b,YAAY1b,EAAW6b,iBAAiB7b,EAAWqZ,iBAAmB,GACpF,CAEElc,KAAKuC,MAAMI,QAAQ4U,OACrB,EACC0mD,QAAS,SAASA,EAAQrpD,GACzB,IAAItJ,EAAO,MAEX,GAAItL,KAAKuC,MAAMgC,UAAU,QAAS,CACjC+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF9pB,EAAKwoB,MAAMiD,MACf,CACA,CACA,EAECmnC,QAAS,SAASA,EAAQtpD,GACzB,IAAItJ,EAAO,MACX,IAAIkwD,EAASx7D,KAAKuC,MAAMkB,QAAQs1B,aAChC,IAAIjF,EAEJ,GAAI9zB,KAAKuC,MAAMgC,UAAU,QAAS,CACjC+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBAEFtB,EAAMxoB,EAAKwoB,MAEX,IAAKA,EAAIgD,OAAQ,CAChB,GAAI0kC,EAAQ,CAEXlwD,EAAKxH,aAAaX,WAAWu/C,OAE7B,GAAI8Y,IAAW,KAAM,CACpBA,EAASx7D,KAAKuC,MAAM2e,OAAO,GAClC,KAAa,CACN,UAAWs6C,GAAU,WAAY,CAChCA,EAASx7D,KAAKuC,MAAM2e,OAAOs6C,EAAOlwD,EAAKvG,IAAI6E,gBACnD,KAAc,CACN4xD,EAASx7D,KAAKuC,MAAM2e,OAAOthB,OAAOgC,OAAO,GAAI45D,GACrD,CACA,CAEMA,EAAOpgD,MAAK,WACX7F,YAAW,WACVue,EAAIgD,MACZ,GACA,GACA,CACA,CACA,CACA,CACA,EAEC8nC,QAAS,SAASA,EAAQhqD,GACzB,IAAItJ,EAAO,MAEX,GAAItL,KAAKuC,MAAMgC,UAAU,QAAS,CACjC+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF9pB,EAAKwoB,MAAM7vB,MACf,CACA,CACA,EAEC46D,SAAU,SAASA,EAASjqD,GAC3B,IAAItJ,EAAO,MAEX,GAAItL,KAAKuC,MAAMgC,UAAU,QAAS,CACjC+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF9pB,EAAKwoB,MAAMU,OACf,CACA,CACA,EAEC2pC,MAAO,SAASA,EAAMvpD,GACrB,IAAItJ,EAAO,MAEX,GAAItL,KAAKuC,MAAMgC,UAAU,QAAS,CACjC+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF9pB,EAAKwoB,MAAMkD,IACf,CACA,CACA,EAEConC,QAAS,SAASA,EAAQxpD,GACzB,IAAItJ,EAAO,MAEX,GAAItL,KAAKuC,MAAMgC,UAAU,QAAS,CACjC+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,GAAIjP,EAAM,CACTsJ,EAAEwgB,iBACF9pB,EAAKwoB,MAAMmD,MACf,CACA,CACA,EAECqT,KAAM,SAASA,EAAK11B,GACnB,IAAItJ,EAAO,MACX,GAAItL,KAAKuC,MAAMkB,QAAQmc,SAAW5f,KAAKuC,MAAMgC,UAAU,YAAcvE,KAAKuC,MAAMgC,UAAU,QAAS,CAElG+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,IAAKjP,EAAM,CACVsJ,EAAEwgB,iBACFp1B,KAAKuC,MAAMiC,QAAQob,QAAQ0qB,MAC/B,CACA,CACA,EAECC,KAAM,SAASA,EAAK31B,GACnB,IAAItJ,EAAO,MACX,GAAItL,KAAKuC,MAAMkB,QAAQmc,SAAW5f,KAAKuC,MAAMgC,UAAU,YAAcvE,KAAKuC,MAAMgC,UAAU,QAAS,CAElG+G,EAAOtL,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAE/B,IAAKjP,EAAM,CACVsJ,EAAEwgB,iBACFp1B,KAAKuC,MAAMiC,QAAQob,QAAQ2qB,MAC/B,CACA,CACA,EAEChE,gBAAiB,SAASA,EAAgB3xB,GACzC,IAAK5U,KAAKuC,MAAMiC,QAAQ6R,KAAKkE,YAAa,CACzC,GAAIva,KAAKuC,MAAMgC,UAAU,YAAa,MAAO,CAC5CvE,KAAKuC,MAAMiC,QAAQw0B,UAAUyN,KAAK,MAAO,KAC7C,CACA,CACA,GAGA/4B,EAAUjO,UAAU6rC,eAAe,cAAeqxB,GAClD,IAAImC,EAAO,SAASA,EAAKv8D,GACxBvC,KAAKuC,MAAQA,EACbvC,KAAK++D,aAAe,GACpB/+D,KAAKg/D,UAAYh/D,KAAKi/D,SAASrrD,KAAK5T,MACpCA,KAAKk/D,SAAWl/D,KAAKm/D,QAAQvrD,KAAK5T,MAClCA,KAAKo/D,gBAAkB,MACvBp/D,KAAKq/D,kBAAoB,KAC1B,EAEAP,EAAKr/D,UAAUyW,uBAAyB,SAAUzP,GACjD,IAAI64D,EAAUt/D,KAEd,IAAIu/D,EAEJ,GAAI94D,EAAOH,WAAWwP,kBAAmB,CACxCrP,EAAO3C,aAAa6Q,iBAAiB,cAAe3U,KAAKw/D,cAAc5rD,KAAK5T,KAAMyG,EAAQA,EAAOH,WAAWwP,oBAC5G9V,KAAK8U,QAAQrO,EAAQA,EAAOH,WAAWwP,kBACzC,CAMC,GAAIrP,EAAOH,WAAW0P,WAAY,CAEjCupD,EAAel8D,SAASC,cAAc,QACtCi8D,EAAah8D,UAAUC,IAAI,gCAC3B+7D,EAAajnD,UAAY,WAEzBinD,EAAa5qD,iBAAiB,SAAS,SAAUC,GAChDA,EAAE0C,kBACF1C,EAAEwgB,iBAEFkqC,EAAQE,cAAc/4D,EAAQA,EAAOH,WAAW0P,WAAYpB,EAC/D,IAEEnO,EAAOyJ,aAAahN,aAAaq8D,EAAc94D,EAAOyJ,aAAa/M,WACrE,CACA,EAEA27D,EAAKr/D,UAAU+/D,cAAgB,SAAUxtD,EAAWiE,EAAMrB,GACzDqB,SAAcA,GAAQ,WAAaA,EAAKxV,KAAKT,KAAKuC,MAAOyP,EAAUpI,eAAgBgL,GAAKqB,EAMxFjW,KAAKy/D,SAAS7qD,EAAG5C,EAAWiE,EAC7B,EAEA6oD,EAAKr/D,UAAUqV,QAAU,SAAU9C,EAAWiE,GAC7C,IAAIypD,EAAU1/D,KAEd,IAAI2C,EAAUqP,EAAUlO,aACpBgR,EAAU,KACVmf,EAAS,MAEbtxB,EAAQgS,iBAAiB,cAAc,SAAUC,GAChDU,aAAaR,GACbmf,EAAS,MAETnf,EAAUS,YAAW,WACpBD,aAAaR,GACbA,EAAU,KACVmf,EAAS,KAETyrC,EAAQF,cAAcxtD,EAAWiE,EAAMrB,EAC1C,GAAK,IACL,GAAI,CAAEQ,QAAS,OAEdzS,EAAQgS,iBAAiB,YAAY,SAAUC,GAC9CU,aAAaR,GACbA,EAAU,KAEV,GAAImf,EAAQ,CACXrf,EAAEwgB,gBACL,CACA,GACA,EAEA0pC,EAAKr/D,UAAU01B,eAAiB,SAAU7pB,GACzC,GAAIA,EAAK7E,OAAOH,WAAWgwB,YAAa,CACvChrB,EAAKxH,WAAW,MAAM6Q,iBAAiB,cAAe3U,KAAKw/D,cAAc5rD,KAAK5T,KAAMsL,EAAMA,EAAK7E,OAAOH,WAAWgwB,cACjHt2B,KAAK8U,QAAQxJ,EAAMA,EAAK7E,OAAOH,WAAWgwB,YAC5C,CAEC,GAAIhrB,EAAK7E,OAAOH,WAAWiwB,UAAW,CACrCjrB,EAAKxH,WAAW,MAAM6Q,iBAAiB,QAAS3U,KAAKw/D,cAAc5rD,KAAK5T,KAAMsL,EAAMA,EAAK7E,OAAOH,WAAWiwB,WAC7G,CACA,EAEAuoC,EAAKr/D,UAAUstB,cAAgB,SAAUhoB,GACxC,GAAI/E,KAAKuC,MAAMkB,QAAQ4rB,eAAgB,CACtCtqB,EAAIjB,aAAa6Q,iBAAiB,cAAe3U,KAAKw/D,cAAc5rD,KAAK5T,KAAM+E,EAAK/E,KAAKuC,MAAMkB,QAAQ4rB,iBACvGrvB,KAAK8U,QAAQ/P,EAAK/E,KAAKuC,MAAMkB,QAAQ4rB,eACvC,CAEC,GAAIrvB,KAAKuC,MAAMkB,QAAQ6rB,aAAc,CACpCvqB,EAAIjB,aAAa6Q,iBAAiB,QAAS3U,KAAKw/D,cAAc5rD,KAAK5T,KAAM+E,EAAK/E,KAAKuC,MAAMkB,QAAQ6rB,cACnG,CACA,EAEAwvC,EAAKr/D,UAAUq5D,gBAAkB,SAAUztC,GAC1C,GAAIrrB,KAAKuC,MAAMkB,QAAQg9B,iBAAkB,CACxCpV,EAAMvnB,aAAa6Q,iBAAiB,cAAe3U,KAAKw/D,cAAc5rD,KAAK5T,KAAMqrB,EAAOrrB,KAAKuC,MAAMkB,QAAQg9B,mBAC3GzgC,KAAK8U,QAAQuW,EAAOrrB,KAAKuC,MAAMkB,QAAQg9B,iBACzC,CAEC,GAAIzgC,KAAKuC,MAAMkB,QAAQi9B,eAAgB,CACtCrV,EAAMvnB,aAAa6Q,iBAAiB,QAAS3U,KAAKw/D,cAAc5rD,KAAK5T,KAAMqrB,EAAOrrB,KAAKuC,MAAMkB,QAAQi9B,gBACvG,CACA,EAEAo+B,EAAKr/D,UAAUggE,SAAW,SAAU7qD,EAAG5C,EAAWiE,EAAMkhD,GACvD,IAAIwI,EAAU3/D,KAEd,IAAI4/D,IAAUhrD,aAAairD,YAE3B,IAAIC,EAASz8D,SAASC,cAAc,OACpCw8D,EAAOv8D,UAAUC,IAAI,kBAErB,IAAKo8D,EAAO,CACXhrD,EAAEwgB,gBACJ,CAGC,IAAKnf,IAASA,EAAK7V,OAAQ,CAC1B,MACF,CAEC,IAAK+2D,EAAU,CACd,GAAIn3D,KAAKo/D,gBAAiB,CAEzB,GAAIp/D,KAAK61D,SAAU,CAClB,MACJ,CACA,KAAS,CACN71D,KAAKo/D,gBAAkB7pD,YAAW,WACjCoqD,EAAQP,gBAAkB,KAC9B,GAAM,IACN,CAEEp/D,KAAKi/D,WACLj/D,KAAK++D,aAAe,EACtB,CAEC9oD,EAAKzQ,SAAQ,SAAUkc,GACtB,IAAIq+C,EAAS18D,SAASC,cAAc,OAChCyiD,EAAQrkC,EAAKqkC,MACbia,EAAWt+C,EAAKs+C,SAEpB,GAAIt+C,EAAK+vC,UAAW,CACnBsO,EAAOx8D,UAAUC,IAAI,2BACxB,KAAS,CACNu8D,EAAOx8D,UAAUC,IAAI,uBAErB,UAAWuiD,GAAS,WAAY,CAC/BA,EAAQA,EAAMtlD,KAAKk/D,EAAQp9D,MAAOyP,EAAUpI,eAChD,CAEG,GAAIm8C,aAAiB1tC,KAAM,CAC1B0nD,EAAO34D,YAAY2+C,EACvB,KAAU,CACNga,EAAOznD,UAAYytC,CACvB,CAEG,UAAWia,GAAY,WAAY,CAClCA,EAAWA,EAASv/D,KAAKk/D,EAAQp9D,MAAOyP,EAAUpI,eACtD,CAEG,GAAIo2D,EAAU,CACbD,EAAOx8D,UAAUC,IAAI,gCACrBu8D,EAAOprD,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,iBACP,GACA,KAAU,CACN,GAAIoK,EAAKzL,MAAQyL,EAAKzL,KAAK7V,OAAQ,CAClC2/D,EAAOprD,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,kBACFqoD,EAAQM,gBAAgBH,GACxBH,EAAQF,SAAS7qD,EAAG5C,EAAW0P,EAAKzL,KAAM8pD,EAChD,GACA,KAAW,CACN,GAAIr+C,EAAKL,OAAQ,CAChB0+C,EAAOprD,iBAAiB,SAAS,SAAUC,GAC1C8M,EAAKL,OAAOzM,EAAG5C,EAAUpI,eAChC,GACA,CACA,CACA,CAEG,GAAI8X,EAAKzL,MAAQyL,EAAKzL,KAAK7V,OAAQ,CAClC2/D,EAAOx8D,UAAUC,IAAI,8BACzB,CACA,CAEEs8D,EAAO14D,YAAY24D,EACrB,IAECD,EAAOnrD,iBAAiB,SAAS,SAAUC,GAC1C+qD,EAAQV,UACV,IAECj/D,KAAK++D,aAAax5D,KAAKu6D,GACvB9/D,KAAKkgE,aAAaJ,EAAQ3I,EAAUyI,EAAOhrD,EAC5C,EAEAkqD,EAAKr/D,UAAUwgE,gBAAkB,SAAUH,GAC1C,IAAI99D,EAAQhC,KAAK++D,aAAa99D,QAAQ6+D,GAEtC,GAAI99D,GAAS,EAAG,CACf,IAAK,IAAIm+D,EAAOngE,KAAK++D,aAAa3+D,OAAS,EAAG+/D,EAAOn+D,EAAOm+D,IAAQ,CACnE,IAAI/8D,EAAKpD,KAAK++D,aAAaoB,GAE3B,GAAI/8D,EAAG6D,WAAY,CAClB7D,EAAG6D,WAAWrB,YAAYxC,EAC9B,CAEGpD,KAAK++D,aAAaqB,KACrB,CACA,CACA,EAEAtB,EAAKr/D,UAAUygE,aAAe,SAAUv9D,EAASw0D,EAAUyI,EAAOhrD,GACjE,IAAIyrD,EAAUrgE,KAEd,IAAIsgE,EAAYj/D,KAAKC,IAAI+B,SAASkyB,KAAKxc,aAAc2R,OAAO61C,aACxD9+D,EACAC,EACA8+D,EAEJ,IAAKrJ,EAAU,CACd11D,EAAIm+D,EAAQhrD,EAAE6rD,QAAQ,GAAGC,MAAQ9rD,EAAE8rD,MACnCh/D,EAAIk+D,EAAQhrD,EAAE6rD,QAAQ,GAAGE,MAAQ/rD,EAAE+rD,MAEnC3gE,KAAKq/D,kBAAoB,KAC3B,KAAQ,CACNmB,EAAe9yD,EAAUjO,UAAUkO,QAAQoR,SAASo4C,GACpD11D,EAAI++D,EAAav8D,KAAOkzD,EAAShrD,YACjCzK,EAAI8+D,EAAa7iD,IAAM,CACzB,CAEChb,EAAQ0B,MAAMsZ,IAAMjc,EAAI,KACxBiB,EAAQ0B,MAAMJ,KAAOxC,EAAI,KAEzB8T,YAAW,WACV8qD,EAAQ99D,MAAMM,WAAWF,QAAQgS,iBAAiB,SAAU0rD,EAAQrB,WACpE37D,SAASkyB,KAAK5gB,iBAAiB,QAAS0rD,EAAQrB,WAChD37D,SAASkyB,KAAK5gB,iBAAiB,cAAe0rD,EAAQrB,WACtDt0C,OAAO/V,iBAAiB,SAAU0rD,EAAQrB,WAC1C37D,SAASkyB,KAAK5gB,iBAAiB,UAAW0rD,EAAQnB,SACpD,GAAI,KAEH77D,SAASkyB,KAAKnuB,YAAYzE,GAG1B,GAAIjB,EAAIiB,EAAQoW,cAAgBunD,EAAW,CAC1C39D,EAAQ0B,MAAMsZ,IAAM,GAEpB,GAAIw5C,EAAU,CACbx0D,EAAQ0B,MAAMgwB,OAASisC,EAAYE,EAAa7iD,IAAMw5C,EAASp+C,aAAe,EAAI,IACrF,KAAS,CACNpW,EAAQ0B,MAAMgwB,OAASisC,EAAY5+D,EAAI,IAC1C,CACA,CAGC,GAAID,EAAIkB,EAAQwJ,aAAe9I,SAASkyB,KAAKppB,aAAenM,KAAKq/D,kBAAmB,CACnF18D,EAAQ0B,MAAMJ,KAAO,GAErB,GAAIkzD,EAAU,CACbx0D,EAAQ0B,MAAMmwB,MAAQnxB,SAASsoC,gBAAgBx/B,YAAcq0D,EAAav8D,KAAO,IACpF,KAAS,CACNtB,EAAQ0B,MAAMmwB,MAAQnxB,SAASsoC,gBAAgBx/B,YAAc1K,EAAI,IACpE,CAEEzB,KAAKq/D,kBAAoB,IAC3B,CACA,EAEAP,EAAKr/D,UAAUo2D,OAAS,WACvB,QAAS71D,KAAK++D,aAAa3+D,MAC5B,EAEA0+D,EAAKr/D,UAAU0/D,QAAU,SAAUvqD,GAClC,GAAIA,EAAE0uC,SAAW,GAAI,CACpBtjD,KAAKi/D,UACP,CACA,EAEAH,EAAKr/D,UAAUw/D,SAAW,WACzBj/D,KAAK++D,aAAav5D,SAAQ,SAAUs6D,GACnC,GAAIA,EAAO74D,WAAY,CACtB64D,EAAO74D,WAAWrB,YAAYk6D,EACjC,CACA,IAECz8D,SAASkyB,KAAKmvB,oBAAoB,UAAW1kD,KAAKk/D,UAClD77D,SAASkyB,KAAKmvB,oBAAoB,QAAS1kD,KAAKg/D,WAChD37D,SAASkyB,KAAKmvB,oBAAoB,cAAe1kD,KAAKg/D,WACtDt0C,OAAOg6B,oBAAoB,SAAU1kD,KAAKg/D,WAC1Ch/D,KAAKuC,MAAMM,WAAWF,QAAQ+hD,oBAAoB,SAAU1kD,KAAKg/D,UAClE,EAGAF,EAAKr/D,UAAUmhE,MAAQ,GAEvBlzD,EAAUjO,UAAU6rC,eAAe,OAAQwzB,GAC3C,IAAI+B,EAAc,SAASA,EAAYt+D,GACtCvC,KAAKuC,MAAQA,EACbvC,KAAK8gE,mBAAqB9gE,KAAK+gE,2BAC/B/gE,KAAKghE,aAAe,MACpBhhE,KAAKihE,aAAe,MACpBjhE,KAAKkhE,YAAc,IACnBlhE,KAAKmhE,OAAS,MACdnhE,KAAKohE,MAAQ,MACbphE,KAAKqhE,WAAa,MAClBrhE,KAAKshE,OAAS,EACdthE,KAAKuhE,iBAAmB,GACxBvhE,KAAKwhE,eAAiB,EACtBxhE,KAAKyhE,kBAAoB,MACzBzhE,KAAK0hE,UAAY,MAEjB1hE,KAAK2hE,UAAY3hE,KAAK2hE,UAAU/tD,KAAK5T,MACrCA,KAAK4hE,QAAU5hE,KAAK4hE,QAAQhuD,KAAK5T,KAClC,EAEA6gE,EAAYphE,UAAUshE,yBAA2B,WAChD,IAAI39D,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGG,UAAUC,IAAI,6BAEjB,OAAOJ,CACR,EAEAy9D,EAAYphE,UAAU2U,iBAAmB,SAAU3N,GAClD,IAAId,EAAO3F,KACP4K,EAAS,GACTjE,EAEJ,IAAKF,EAAOjC,QAAQomB,OAAQ,CAE3BjkB,EAAQF,EAAO3C,aAEf8G,EAAOi3D,UAAY,SAAUjtD,GAC5B,GAAInO,EAAO6D,SAAW3E,EAAKw7D,OAAO72D,OAAQ,CACzC,IAAK3E,EAAK+7D,UAAY9sD,EAAE6rD,QAAQ,GAAGC,MAAQ9rD,EAAE8rD,OAAShzD,EAAUjO,UAAUkO,QAAQoR,SAASpY,GAAO1C,KAAO0B,EAAKpD,MAAMmI,cAAc/H,QAAQM,WAAawD,EAAOoD,WAAa,EAAG,CAC7K,GAAIlE,EAAKy7D,QAAU36D,IAAWd,EAAK07D,WAAY,CAC9C16D,EAAMM,WAAW/D,aAAayC,EAAKm7D,mBAAoBn6D,EAAMO,aAC7DvB,EAAKoE,WAAWtD,EAAQ,KAC9B,CACA,KAAW,CACN,GAAId,EAAKy7D,QAAU36D,GAAUd,EAAK07D,WAAY,CAC7C16D,EAAMM,WAAW/D,aAAayC,EAAKm7D,mBAAoBn6D,GACvDhB,EAAKoE,WAAWtD,EAAQ,MAC9B,CACA,CACA,CACA,EAAImN,KAAKjO,GAEPgB,EAAMgO,iBAAiB,aAAa,SAAUC,GAC7CjP,EAAK+7D,UAAY,MACjB,GAAI9sD,EAAEktD,QAAU,EAAG,CAClBn8D,EAAKs7D,aAAe1rD,YAAW,WAC9B5P,EAAKo8D,UAAUntD,EAAGnO,EACvB,GAAOd,EAAKu7D,YACZ,CACA,IAEEv6D,EAAMgO,iBAAiB,WAAW,SAAUC,GAC3C,GAAIA,EAAEktD,QAAU,EAAG,CAClB,GAAIn8D,EAAKs7D,aAAc,CACtB3rD,aAAa3P,EAAKs7D,aACvB,CACA,CACA,IAEEt7D,EAAKq8D,gBAAgBv7D,EACvB,CAECA,EAAOjC,QAAQuF,WAAaa,CAC7B,EAEAi2D,EAAYphE,UAAUuiE,gBAAkB,SAAUv7D,GAC9C,IAACd,EAAO3F,KACP2G,EAAQF,EAAO3C,aACfm+D,EAAa,MAIb3yD,EACAG,EACA4+B,EACA6zB,EACAC,EACAC,EAEJz7D,EAAMgO,iBAAiB,cAAc,SAAUC,GAC9CjP,EAAKs7D,aAAe1rD,YAAW,WAC9B5P,EAAK+7D,UAAY,KAEjBpyD,EAAU7I,EAAO8I,aACjB8+B,EAAe/+B,EAAUA,EAAQzF,WAAa,EAAI,EAClD4F,EAAUhJ,EAAOiJ,aACjBwyD,EAAezyD,EAAUA,EAAQ5F,WAAa,EAAI,EAClDs4D,EAAmB,EACnBC,EAAmB,EACnBH,EAAa,MAEbt8D,EAAKo8D,UAAUntD,EAAGnO,EACrB,GAAKd,EAAKu7D,YACV,GAAI,CAAE9rD,QAAS,OAEdzO,EAAMgO,iBAAiB,aAAa,SAAUC,GAC1C,IAAUkS,EAAMu7C,EAEnB,GAAI18D,EAAKw7D,OAAQ,CAChBx7D,EAAKg8D,UAAU/sD,GAEf,IAAKqtD,EAAY,CAChBA,EAAartD,EAAE6rD,QAAQ,GAAGC,KAC9B,CAEG55C,EAAOlS,EAAE6rD,QAAQ,GAAGC,MAAQuB,EAE5B,GAAIn7C,EAAO,EAAG,CACb,GAAIxX,GAAWwX,EAAOq7C,EAAmB9zB,EAAc,CACtDg0B,EAAY/yD,EAEZ,GAAI+yD,IAAc57D,EAAQ,CACzBw7D,EAAartD,EAAE6rD,QAAQ,GAAGC,MAC1B2B,EAAUv+D,aAAamD,WAAW/D,aAAayC,EAAKm7D,mBAAoBuB,EAAUv+D,aAAaoD,aAC/FvB,EAAKoE,WAAWs4D,EAAW,KACjC,CACA,CACA,KAAU,CACN,GAAI5yD,IAAYqX,EAAOs7C,EAAmBF,EAAc,CACvDG,EAAY5yD,EAEZ,GAAI4yD,IAAc57D,EAAQ,CACzBw7D,EAAartD,EAAE6rD,QAAQ,GAAGC,MAC1B2B,EAAUv+D,aAAamD,WAAW/D,aAAayC,EAAKm7D,mBAAoBuB,EAAUv+D,cAClF6B,EAAKoE,WAAWs4D,EAAW,MACjC,CACA,CACA,CAEG,GAAIA,EAAW,CAEd/yD,EAAU+yD,EAAU9yD,aACpB4yD,EAAmB9zB,EACnBA,EAAe/+B,EAAUA,EAAQzF,WAAa,EAAI,EAClD4F,EAAU4yD,EAAU3yD,aACpB0yD,EAAmBF,EACnBA,EAAezyD,EAAUA,EAAQ5F,WAAa,EAAI,CACtD,CACA,CACA,GAAI,CAAEuL,QAAS,OAEdzO,EAAMgO,iBAAiB,YAAY,SAAUC,GAC5C,GAAIjP,EAAKs7D,aAAc,CACtB3rD,aAAa3P,EAAKs7D,aACrB,CACE,GAAIt7D,EAAKw7D,OAAQ,CAChBx7D,EAAKi8D,QAAQhtD,EAChB,CACA,GACA,EAEAisD,EAAYphE,UAAUsiE,UAAY,SAAUntD,EAAGnO,GAC9C,IAAI9D,EAAU8D,EAAO3C,aAErB9D,KAAKmhE,OAAS16D,EACdzG,KAAKshE,QAAUthE,KAAK0hE,UAAY9sD,EAAE6rD,QAAQ,GAAGC,MAAQ9rD,EAAE8rD,OAAShzD,EAAUjO,UAAUkO,QAAQoR,SAASpc,GAASsB,KAE9GjE,KAAKuC,MAAMI,QAAQY,UAAUC,IAAI,0BAGjCxD,KAAK8gE,mBAAmBz8D,MAAMyF,MAAQrD,EAAOoD,WAAa,KAC1D7J,KAAK8gE,mBAAmBz8D,MAAMsD,OAASlB,EAAOoB,YAAc,KAE5DlF,EAAQsE,WAAW/D,aAAalD,KAAK8gE,mBAAoBn+D,GACzDA,EAAQsE,WAAWrB,YAAYjD,GAG/B3C,KAAKghE,aAAer+D,EAAQu4C,UAAU,MACtCl7C,KAAKghE,aAAaz9D,UAAUC,IAAI,oBAEhCxD,KAAKuC,MAAMmI,cAAc5G,aAAasD,YAAYpH,KAAKghE,cAEvDhhE,KAAKghE,aAAa38D,MAAMJ,KAAO,IAC/BjE,KAAKghE,aAAa38D,MAAMgwB,OAAS,IAEjC,IAAKr0B,KAAK0hE,UAAW,CACpB1hE,KAAKsiE,iBAELj/D,SAASkyB,KAAK5gB,iBAAiB,YAAa3U,KAAK2hE,WACjDt+D,SAASkyB,KAAK5gB,iBAAiB,UAAW3U,KAAK4hE,QACjD,CAEC5hE,KAAK2hE,UAAU/sD,EAChB,EAEAisD,EAAYphE,UAAU6iE,eAAiB,WACtCtiE,KAAKuC,MAAMmI,cAAc3H,eAAeyC,SAAQ,SAAUiB,GACzD,GAAIA,EAAOjC,QAAQuF,WAAW83D,UAAW,CACxCp7D,EAAO3C,aAAa6Q,iBAAiB,YAAalO,EAAOjC,QAAQuF,WAAW83D,UAC/E,CACA,GACA,EAEAhB,EAAYphE,UAAU8iE,iBAAmB,WACxCviE,KAAKuC,MAAMmI,cAAc3H,eAAeyC,SAAQ,SAAUiB,GACzD,GAAIA,EAAOjC,QAAQuF,WAAW83D,UAAW,CACxCp7D,EAAO3C,aAAa4gD,oBAAoB,YAAaj+C,EAAOjC,QAAQuF,WAAW83D,UAClF,CACA,GACA,EAEAhB,EAAYphE,UAAUsK,WAAa,SAAUtD,EAAQwD,GACpD,IAAIu4D,EAAcxiE,KAAKmhE,OAAOjzD,WAE9BlO,KAAKohE,MAAQ36D,EACbzG,KAAKqhE,WAAap3D,EAElB,GAAIA,EAAO,CACVxD,EAAOyH,WAAW1I,SAAQ,SAAU8F,EAAMxF,GACzC,IAAI67C,EAASr2C,EAAKxH,WAAW,MAC7B69C,EAAO16C,WAAW/D,aAAas/D,EAAY18D,GAAGhC,aAAc69C,EAAOz6C,YACtE,GACA,KAAQ,CACNT,EAAOyH,WAAW1I,SAAQ,SAAU8F,EAAMxF,GACzC,IAAI67C,EAASr2C,EAAKxH,WAAW,MAC7B69C,EAAO16C,WAAW/D,aAAas/D,EAAY18D,GAAGhC,aAAc69C,EAC/D,GACA,CACA,EAEAkf,EAAYphE,UAAUmiE,QAAU,SAAUhtD,GACzC,GAAIA,EAAEktD,QAAU,GAAK9hE,KAAK0hE,UAAW,CACpC1hE,KAAKuiE,mBAELviE,KAAK8gE,mBAAmB75D,WAAW/D,aAAalD,KAAKmhE,OAAOr9D,aAAc9D,KAAK8gE,mBAAmB55D,aAClGlH,KAAK8gE,mBAAmB75D,WAAWrB,YAAY5F,KAAK8gE,oBACpD9gE,KAAKghE,aAAa/5D,WAAWrB,YAAY5F,KAAKghE,cAE9ChhE,KAAKuC,MAAMI,QAAQY,UAAUmkB,OAAO,0BAEpC,GAAI1nB,KAAKohE,MAAO,CACfphE,KAAKuC,MAAMmI,cAAcR,iBAAiBlK,KAAKmhE,OAAQnhE,KAAKohE,MAAOphE,KAAKqhE,WAC3E,CAEErhE,KAAKmhE,OAAS,MACdnhE,KAAKohE,MAAQ,MACbphE,KAAKqhE,WAAa,MAElB,IAAKrhE,KAAK0hE,UAAW,CACpBr+D,SAASkyB,KAAKmvB,oBAAoB,YAAa1kD,KAAK2hE,WACpDt+D,SAASkyB,KAAKmvB,oBAAoB,UAAW1kD,KAAK4hE,QACrD,CACA,CACA,EAEAf,EAAYphE,UAAUkiE,UAAY,SAAU/sD,GAC3C,IAAIjP,EAAO3F,KACPyiE,EAAe98D,EAAKpD,MAAMmI,cAAc5G,aACxCb,EAAaw/D,EAAax/D,WAC1By/D,GAAQ/8D,EAAK+7D,UAAY9sD,EAAE6rD,QAAQ,GAAGC,MAAQ9rD,EAAE8rD,OAAShzD,EAAUjO,UAAUkO,QAAQoR,SAAS0jD,GAAcx+D,KAAOhB,EACnH0/D,EAEJh9D,EAAKq7D,aAAa38D,MAAMJ,KAAOy+D,EAAO/8D,EAAK27D,OAAS,KAEpD,GAAIoB,EAAOz/D,EAAa0C,EAAK47D,iBAAkB,CAC9C,IAAK57D,EAAK87D,kBAAmB,CAC5B97D,EAAK87D,kBAAoBlsD,YAAW,WACnCotD,EAAYthE,KAAKC,IAAI,EAAG2B,EAAa,GACrC0C,EAAKpD,MAAMM,WAAWiB,aAAab,WAAa0/D,EAChDh9D,EAAK87D,kBAAoB,KAC7B,GAAM,EACN,CACA,CAEC,GAAIx+D,EAAaw/D,EAAar+D,YAAcs+D,EAAO/8D,EAAK47D,iBAAkB,CACzE,IAAK57D,EAAK87D,kBAAmB,CAC5B97D,EAAK87D,kBAAoBlsD,YAAW,WACnCotD,EAAYthE,KAAK+K,IAAIq2D,EAAar+D,YAAanB,EAAa,GAC5D0C,EAAKpD,MAAMM,WAAWiB,aAAab,WAAa0/D,EAChDh9D,EAAK87D,kBAAoB,KAC7B,GAAM,EACN,CACA,CACA,EAEA/zD,EAAUjO,UAAU6rC,eAAe,aAAcu1B,GAEjD,IAAI+B,EAAW,SAASA,EAASrgE,GAEhCvC,KAAKuC,MAAQA,EACbvC,KAAK8gE,mBAAqB9gE,KAAK+gE,2BAC/B/gE,KAAKghE,aAAe,MACpBhhE,KAAKihE,aAAe,MACpBjhE,KAAKkhE,YAAc,IACnBlhE,KAAKmhE,OAAS,MACdnhE,KAAKoyB,MAAQ,MACbpyB,KAAK6iE,WAAa,MAClB7iE,KAAK8iE,UAAY,MACjB9iE,KAAK+iE,OAAS,EACd/iE,KAAKshE,OAAS,EAEdthE,KAAK2hE,UAAY3hE,KAAK2hE,UAAU/tD,KAAK5T,MACrCA,KAAK4hE,QAAU5hE,KAAK4hE,QAAQhuD,KAAK5T,MACjCA,KAAKgjE,kBAAoB,MAEzBhjE,KAAK0hE,UAAY,MAEjB1hE,KAAKkxC,WAAa,MAClBlxC,KAAKijE,0BAA4B,MACjCjjE,KAAKkjE,4BAA8B,MACnCljE,KAAKmjE,mBAAqB,GAC1BnjE,KAAKixC,YAAc,GAEnBjxC,KAAKojE,eAAiB,MACtBpjE,KAAKqjE,aAAe,KACrB,EAEAT,EAASnjE,UAAUshE,yBAA2B,WAC7C,IAAI39D,EAAKC,SAASC,cAAc,OAEhCF,EAAGG,UAAUC,IAAI,iBACjBJ,EAAGG,UAAUC,IAAI,6BAEjB,OAAOJ,CACR,EAEAw/D,EAASnjE,UAAUkE,WAAa,SAAUomD,GACzC/pD,KAAKijE,0BAA4BjjE,KAAKuC,MAAMkB,QAAQu6B,2BACpDh+B,KAAKkjE,4BAA8BljE,KAAKuC,MAAMkB,QAAQw6B,6BAEtDj+B,KAAKkxC,WAAalxC,KAAKijE,2BAA6BjjE,KAAKkjE,2BAC1D,EAEAN,EAASnjE,UAAU+S,UAAY,SAAUu3C,GACxC/pD,KAAK8iE,UAAY/Y,CAClB,EAEA6Y,EAASnjE,UAAUg5D,sBAAwB,SAAUptC,GACjD,IAAC1lB,EAAO3F,KACP4K,EAAS,GAIbA,EAAO04D,QAAU,SAAU1uD,GAC1BjP,EAAK49D,aAAa3uD,EAAG7P,IACvB,EAAG6O,KAAKjO,GAGPiF,EAAOi3D,UAAY,SAAUjtD,GAC5B,GAAIA,EAAE+rD,MAAQjzD,EAAUjO,UAAUkO,QAAQoR,SAASsM,EAAM1oB,SAASgb,IAAMhY,EAAKpD,MAAMM,WAAWF,QAAQwZ,UAAYkP,EAAMxjB,YAAc,EAAG,CACxI,GAAIlC,EAAKysB,QAAU/G,IAAU1lB,EAAKk9D,WAAY,CAC7C,IAAIlkD,EAAQ0M,EAAMvnB,aAClB6a,EAAM1X,WAAW/D,aAAayC,EAAKm7D,mBAAoBniD,EAAMzX,aAC7DvB,EAAK4M,QAAQ8Y,EAAO,KACxB,CACA,KAAS,CACN,GAAI1lB,EAAKysB,QAAU/G,GAAS1lB,EAAKk9D,WAAY,CAC5C,IAAIlkD,EAAQ0M,EAAMvnB,aAClB,GAAI6a,EAAM6kD,gBAAiB,CAC1B7kD,EAAM1X,WAAW/D,aAAayC,EAAKm7D,mBAAoBniD,GACvDhZ,EAAK4M,QAAQ8Y,EAAO,MACzB,CACA,CACA,CACA,EAAGzX,KAAKjO,GAEP0lB,EAAM7mB,QAAQ+N,QAAU3H,CACzB,EAEAg4D,EAASnjE,UAAUstB,cAAgB,SAAUhoB,GAC5C,IAAIY,EAAO3F,KACP4K,EAAS,GACT+T,EAGJ/T,EAAO04D,QAAU,SAAU1uD,GAC1BjP,EAAK49D,aAAa3uD,EAAG7P,EACvB,EAAG6O,KAAKjO,GAGPiF,EAAOi3D,UAAY,SAAUjtD,GAC5B,IAAI+J,EAAQ5Z,EAAIjB,aAEhB,GAAI8Q,EAAE+rD,MAAQjzD,EAAUjO,UAAUkO,QAAQoR,SAASJ,GAAOhB,IAAMhY,EAAKpD,MAAMM,WAAWF,QAAQwZ,UAAYpX,EAAI8C,YAAc,EAAG,CAC9H,GAAIlC,EAAKysB,QAAUrtB,IAAQY,EAAKk9D,WAAY,CAC3ClkD,EAAM1X,WAAW/D,aAAayC,EAAKm7D,mBAAoBniD,EAAMzX,aAC7DvB,EAAK4M,QAAQxN,EAAK,KACtB,CACA,KAAS,CACN,GAAIY,EAAKysB,QAAUrtB,GAAOY,EAAKk9D,WAAY,CAC1ClkD,EAAM1X,WAAW/D,aAAayC,EAAKm7D,mBAAoBniD,GACvDhZ,EAAK4M,QAAQxN,EAAK,MACtB,CACA,CACA,EAAG6O,KAAKjO,GAEP,IAAK3F,KAAK8iE,UAAW,CAEpBnkD,EAAQ5Z,EAAIjB,aAEZ6a,EAAMhK,iBAAiB,aAAa,SAAUC,GAC7C,GAAIA,EAAEktD,QAAU,EAAG,CAClBn8D,EAAKs7D,aAAe1rD,YAAW,WAC9B5P,EAAKo8D,UAAUntD,EAAG7P,EACvB,GAAOY,EAAKu7D,YACZ,CACA,IAEEviD,EAAMhK,iBAAiB,WAAW,SAAUC,GAC3C,GAAIA,EAAEktD,QAAU,EAAG,CAClB,GAAIn8D,EAAKs7D,aAAc,CACtB3rD,aAAa3P,EAAKs7D,aACvB,CACA,CACA,IAEEjhE,KAAKgiE,gBAAgBj9D,EAAKA,EAAIjB,aAChC,CAECiB,EAAIP,QAAQ+N,QAAU3H,CACvB,EAEAg4D,EAASnjE,UAAU01B,eAAiB,SAAU7pB,GAC7C,IAAI3F,EAAO3F,KACP2hD,EAASr2C,EAAKxH,WAAW,MAE7B69C,EAAOhtC,iBAAiB,aAAa,SAAUC,GAC9C,GAAIA,EAAEktD,QAAU,EAAG,CAClBn8D,EAAKs7D,aAAe1rD,YAAW,WAC9B5P,EAAKo8D,UAAUntD,EAAGtJ,EAAKvG,IAC3B,GAAMY,EAAKu7D,YACX,CACA,IAECvf,EAAOhtC,iBAAiB,WAAW,SAAUC,GAC5C,GAAIA,EAAEktD,QAAU,EAAG,CAClB,GAAIn8D,EAAKs7D,aAAc,CACtB3rD,aAAa3P,EAAKs7D,aACtB,CACA,CACA,IAECjhE,KAAKgiE,gBAAgB12D,EAAKvG,IAAK48C,EAChC,EAEAihB,EAASnjE,UAAUuiE,gBAAkB,SAAUj9D,EAAKpC,GAChD,IAACgD,EAAO3F,KACPyjE,EAAa,MAIbjgD,EACAC,EACAigD,EACAC,EACAC,EACAC,EAEJlhE,EAAQgS,iBAAiB,cAAc,SAAUC,GAChDjP,EAAKs7D,aAAe1rD,YAAW,WAC9B5P,EAAK+7D,UAAY,KAEjBl+C,EAAUze,EAAIye,UACdkgD,EAAgBlgD,EAAUA,EAAQ3b,YAAc,EAAI,EACpD4b,EAAU1e,EAAI0e,UACdkgD,EAAgBlgD,EAAUA,EAAQ5b,YAAc,EAAI,EACpD+7D,EAAoB,EACpBC,EAAoB,EACpBJ,EAAa,MAEb99D,EAAKo8D,UAAUntD,EAAG7P,EACrB,GAAKY,EAAKu7D,YACV,GAAI,CAAE9rD,QAAS,OAEdzS,EAAQgS,iBAAiB,aAAa,SAAUC,GAE5C,IAAUkS,EAAMwG,EAEnB,GAAI3nB,EAAKw7D,OAAQ,CAChBvsD,EAAEwgB,iBAEFzvB,EAAKg8D,UAAU/sD,GAEf,IAAK6uD,EAAY,CAChBA,EAAa7uD,EAAE6rD,QAAQ,GAAGE,KAC9B,CAEG75C,EAAOlS,EAAE6rD,QAAQ,GAAGE,MAAQ8C,EAE5B,GAAI38C,EAAO,EAAG,CACb,GAAItD,GAAWsD,EAAO88C,EAAoBF,EAAe,CACxDp2C,EAAY9J,EAEZ,GAAI8J,IAAcvoB,EAAK,CACtB0+D,EAAa7uD,EAAE6rD,QAAQ,GAAGE,MAC1BrzC,EAAUxpB,aAAamD,WAAW/D,aAAayC,EAAKm7D,mBAAoBxzC,EAAUxpB,aAAaoD,aAC/FvB,EAAK4M,QAAQ+a,EAAW,KAC9B,CACA,CACA,KAAU,CACN,GAAI7J,IAAYqD,EAAO+8C,EAAoBF,EAAe,CACzDr2C,EAAY7J,EAEZ,GAAI6J,IAAcvoB,EAAK,CACtB0+D,EAAa7uD,EAAE6rD,QAAQ,GAAGE,MAC1BrzC,EAAUxpB,aAAamD,WAAW/D,aAAayC,EAAKm7D,mBAAoBxzC,EAAUxpB,cAClF6B,EAAK4M,QAAQ+a,EAAW,MAC9B,CACA,CACA,CAEG,GAAIA,EAAW,CAEd9J,EAAU8J,EAAU9J,UACpBogD,EAAoBF,EACpBA,EAAgBlgD,EAAUA,EAAQ3b,YAAc,EAAI,EACpD4b,EAAU6J,EAAU7J,UACpBogD,EAAoBF,EACpBA,EAAgBlgD,EAAUA,EAAQ5b,YAAc,EAAI,CACxD,CACA,CACA,IAEClF,EAAQgS,iBAAiB,YAAY,SAAUC,GAC9C,GAAIjP,EAAKs7D,aAAc,CACtB3rD,aAAa3P,EAAKs7D,aACrB,CACE,GAAIt7D,EAAKw7D,OAAQ,CAChBx7D,EAAKi8D,QAAQhtD,GACbjP,EAAK+7D,UAAY,KACpB,CACA,GACA,EAEAkB,EAASnjE,UAAU6iE,eAAiB,WACnC,IAAI38D,EAAO3F,KAEX2F,EAAKpD,MAAMM,WAAW6b,iBAAiBlZ,SAAQ,SAAUT,GACxD,IAAKA,EAAIkJ,OAAS,OAASlJ,EAAIkJ,OAAS,UAAYlJ,EAAIP,QAAQ+N,QAAQsvD,UAAW,CAClF98D,EAAIjB,aAAa6Q,iBAAiB,YAAa5P,EAAIP,QAAQ+N,QAAQsvD,UACtE,CACA,GACA,EAEAe,EAASnjE,UAAU8iE,iBAAmB,WACrC,IAAI58D,EAAO3F,KAEX2F,EAAKpD,MAAMM,WAAW6b,iBAAiBlZ,SAAQ,SAAUT,GACxD,IAAKA,EAAIkJ,OAAS,OAASlJ,EAAIkJ,OAAS,UAAYlJ,EAAIP,QAAQ+N,QAAQsvD,UAAW,CAClF98D,EAAIjB,aAAa4gD,oBAAoB,YAAa3/C,EAAIP,QAAQ+N,QAAQsvD,UACzE,CACA,GACA,EAEAe,EAASnjE,UAAUsiE,UAAY,SAAUntD,EAAG7P,GAC3C,IAAIpC,EAAUoC,EAAIjB,aAElB9D,KAAK8jE,iBAAiBlvD,EAAG7P,GAEzB/E,KAAKmhE,OAASp8D,EAEd/E,KAAKuC,MAAMI,QAAQY,UAAUC,IAAI,0BAGjCxD,KAAK8gE,mBAAmBz8D,MAAMyF,MAAQ/E,EAAI8E,WAAa,KACvD7J,KAAK8gE,mBAAmBz8D,MAAMsD,OAAS5C,EAAI8C,YAAc,KAEzD,IAAK7H,KAAKkxC,WAAY,CACrBvuC,EAAQsE,WAAW/D,aAAalD,KAAK8gE,mBAAoBn+D,GACzDA,EAAQsE,WAAWrB,YAAYjD,EACjC,KAAQ,CACN3C,KAAKuC,MAAMI,QAAQY,UAAUC,IAAI,+BACjCxD,KAAK+jE,gBAAgBh/D,EACvB,CAGC/E,KAAKghE,aAAer+D,EAAQu4C,UAAU,MACtCl7C,KAAKghE,aAAaz9D,UAAUC,IAAI,oBAEhC,GAAIxD,KAAKkxC,WAAY,CACpB7tC,SAASkyB,KAAKnuB,YAAYpH,KAAKghE,cAC/BhhE,KAAKghE,aAAa38D,MAAMJ,KAAO,IAC/BjE,KAAKghE,aAAa38D,MAAMsZ,IAAM,IAC9B3d,KAAKghE,aAAa38D,MAAMyF,MAAQ9J,KAAKuC,MAAMI,QAAQyB,YAAc,KACjEpE,KAAKghE,aAAa38D,MAAM6/C,WAAa,SACrClkD,KAAKghE,aAAa38D,MAAMslD,SAAW,SACnC3pD,KAAKghE,aAAa38D,MAAM2/D,cAAgB,MAC1C,KAAQ,CACNhkE,KAAKuC,MAAMM,WAAWua,kBAAkBhW,YAAYpH,KAAKghE,cAEzDhhE,KAAKghE,aAAa38D,MAAMJ,KAAO,IAC/BjE,KAAKghE,aAAa38D,MAAMsZ,IAAM,IAE9B3d,KAAKsiE,gBACP,CAECj/D,SAASkyB,KAAK5gB,iBAAiB,YAAa3U,KAAK2hE,WACjDt+D,SAASkyB,KAAK5gB,iBAAiB,UAAW3U,KAAK4hE,SAE/C5hE,KAAK2hE,UAAU/sD,EAChB,EAEAguD,EAASnjE,UAAUqkE,iBAAmB,SAAUlvD,EAAG7P,GAClD,IAAI27D,EAAQ1gE,KAAK0hE,UAAY9sD,EAAE6rD,QAAQ,GAAGC,MAAQ9rD,EAAE8rD,MAChDC,EAAQ3gE,KAAK0hE,UAAY9sD,EAAE6rD,QAAQ,GAAGE,MAAQ/rD,EAAE+rD,MAChDh+D,EACA6I,EAEJ7I,EAAUoC,EAAIjB,aACd,GAAI9D,KAAKkxC,WAAY,CACpB1lC,EAAW7I,EAAQwmB,wBAEnBnpB,KAAKshE,OAAS91D,EAASvH,KAAOy8D,EAAQh2C,OAAOmhB,YAC7C7rC,KAAK+iE,OAASv3D,EAASmS,IAAMgjD,EAAQj2C,OAAOghB,WAC9C,KAAQ,CACN1rC,KAAK+iE,OAASpC,EAAQh+D,EAAQwmB,wBAAwBxL,GACxD,CACA,EAEAilD,EAASnjE,UAAUmiE,QAAU,SAAUhtD,GACtC,IAAKA,GAAKA,EAAEktD,QAAU,GAAK9hE,KAAK0hE,UAAW,CAC1C1hE,KAAKuiE,mBAEL,IAAKviE,KAAKkxC,WAAY,CACrBlxC,KAAK8gE,mBAAmB75D,WAAW/D,aAAalD,KAAKmhE,OAAOr9D,aAAc9D,KAAK8gE,mBAAmB55D,aAClGlH,KAAK8gE,mBAAmB75D,WAAWrB,YAAY5F,KAAK8gE,mBACvD,CAEE9gE,KAAKghE,aAAa/5D,WAAWrB,YAAY5F,KAAKghE,cAE9ChhE,KAAKuC,MAAMI,QAAQY,UAAUmkB,OAAO,0BAEpC,GAAI1nB,KAAKoyB,MAAO,CACfpyB,KAAKuC,MAAMM,WAAW0P,QAAQvS,KAAKmhE,OAAQnhE,KAAKoyB,MAAOpyB,KAAK6iE,WAC/D,CAEE7iE,KAAKmhE,OAAS,MACdnhE,KAAKoyB,MAAQ,MACbpyB,KAAK6iE,WAAa,MAElBx/D,SAASkyB,KAAKmvB,oBAAoB,YAAa1kD,KAAK2hE,WACpDt+D,SAASkyB,KAAKmvB,oBAAoB,UAAW1kD,KAAK4hE,SAElD,GAAI5hE,KAAKkxC,WAAY,CACpBlxC,KAAKuC,MAAMI,QAAQY,UAAUmkB,OAAO,+BACpC1nB,KAAKikE,sBACR,CACA,CACA,EAEArB,EAASnjE,UAAU8S,QAAU,SAAUxN,EAAKkF,GAC3CjK,KAAKoyB,MAAQrtB,EACb/E,KAAK6iE,WAAa54D,CACnB,EAEA24D,EAASnjE,UAAUkiE,UAAY,SAAU/sD,GACxC,GAAI5U,KAAKkxC,WAAY,CACpBlxC,KAAKkkE,qBAAqBzjE,KAAKT,KAAM4U,EACvC,KAAQ,CACN5U,KAAKmkE,eAAe1jE,KAAKT,KAAM4U,EACjC,CACA,EAEAguD,EAASnjE,UAAU0kE,eAAiB,SAAUvvD,GAC1C,IAACwvD,EAAYpkE,KAAKuC,MAAMM,WAAWiB,aAClCqY,EAAYioD,EAAUjoD,UACtBkoD,GAAQrkE,KAAK0hE,UAAY9sD,EAAE6rD,QAAQ,GAAGE,MAAQ/rD,EAAE+rD,OAASyD,EAAUj7C,wBAAwBxL,IAAMxB,EAGrGnc,KAAKghE,aAAa38D,MAAMsZ,IAAM0mD,EAAOrkE,KAAK+iE,OAAS,IACpD,EAEAH,EAASnjE,UAAUykE,qBAAuB,SAAUtvD,GACnD5U,KAAKghE,aAAa38D,MAAMJ,KAAOjE,KAAKshE,QAAUthE,KAAK0hE,UAAY9sD,EAAE6rD,QAAQ,GAAGC,MAAQ9rD,EAAE8rD,OAAS,KAC/F1gE,KAAKghE,aAAa38D,MAAMsZ,IAAM3d,KAAK+iE,QAAU/iE,KAAK0hE,UAAY9sD,EAAE6rD,QAAQ,GAAGE,MAAQ/rD,EAAE+rD,OAAS,IAC/F,EAEAiC,EAASnjE,UAAU6kE,eAAiB,SAAU1vD,EAAGjS,EAASoC,GACzD,GAAI/E,KAAKuC,MAAMkB,QAAQm7B,uBAAwB,CAC9C5+B,KAAKuC,MAAMkB,QAAQm7B,uBAAuBhqB,EAAGjS,EAASoC,EAAMA,EAAI6E,eAAiB,MACnF,CACA,EAGAg5D,EAASnjE,UAAUskE,gBAAkB,SAAUh/D,GAC9C,IAAIw/D,EAAUvkE,KAEd,IAAIwkE,EAEJ,GAAIxkE,KAAKijE,0BAA2B,CACnCuB,EAAmBxkE,KAAKuC,MAAMiC,QAAQyzB,MAAM8Y,eAAe/wC,KAAKijE,2BAEhEjjE,KAAKuC,MAAMkB,QAAQ26B,wBAAwB39B,KAAKT,KAAKuC,MAAOiiE,GAE5DxkE,KAAKuC,MAAMiC,QAAQyzB,MAAMmZ,KAAKpxC,KAAKijE,0BAA2B,UAAW,UAAW,CACnFl+D,IAAKA,GAER,CAEC,GAAI/E,KAAKkjE,4BAA6B,CAErCljE,KAAKmjE,mBAAqB,GAE1B,IAAKzjE,MAAM2F,QAAQrF,KAAKkjE,6BAA8B,CACrDljE,KAAKkjE,4BAA8B,CAACljE,KAAKkjE,4BAC5C,CAEEljE,KAAKkjE,4BAA4B19D,SAAQ,SAAU4mC,GAClD,UAAWA,IAAU,SAAU,CAC9Bm4B,EAAQpB,mBAAqBoB,EAAQpB,mBAAmBh4D,OAAOzL,MAAMD,UAAU4lB,MAAM5kB,KAAK4C,SAASipC,iBAAiBF,IACxH,KAAU,CACNm4B,EAAQpB,mBAAmB59D,KAAK6mC,EACpC,CACA,IAEEpsC,KAAKmjE,mBAAmB39D,SAAQ,SAAU7C,GACzC,IAAI8hE,EAAY,SAASA,EAAU7vD,GAClC2vD,EAAQD,eAAe1vD,EAAGjS,EAAS4hE,EAAQpD,OAC/C,EAEGx+D,EAAQgS,iBAAiB,UAAW8vD,GACpC9hE,EAAQ+hE,0BAA4BD,EAEpC9hE,EAAQY,UAAUC,IAAI,gCACzB,GACA,CACA,EAGAo/D,EAASnjE,UAAUwkE,qBAAuB,WACzC,IAAIO,EAEJ,GAAIxkE,KAAKijE,0BAA2B,CACnCuB,EAAmBxkE,KAAKuC,MAAMiC,QAAQyzB,MAAM8Y,eAAe/wC,KAAKijE,2BAEhEjjE,KAAKuC,MAAMkB,QAAQ86B,uBAAuB99B,KAAKT,KAAKuC,MAAOiiE,GAE3DxkE,KAAKuC,MAAMiC,QAAQyzB,MAAMmZ,KAAKpxC,KAAKijE,0BAA2B,UAAW,aAC3E,CAECjjE,KAAKmjE,mBAAmB39D,SAAQ,SAAU7C,GACzCA,EAAQY,UAAUmkB,OAAO,iCACzB/kB,EAAQ+hD,oBAAoB,UAAW/hD,EAAQ+hE,kCACxC/hE,EAAQ+hE,yBACjB,GACA,EAGA9B,EAASnjE,UAAUklE,QAAU,SAAUpiE,EAAOwC,GAC7C,IAAIY,EAAO3F,KACX,IAAKA,KAAKojE,eAAgB,CACzBpjE,KAAKojE,eAAiB7gE,EACtBvC,KAAKqjE,aAAet+D,EAEpB/E,KAAKuC,MAAMI,QAAQY,UAAUC,IAAI,iCAEjCmC,EAAKpD,MAAMM,WAAW6b,iBAAiBlZ,SAAQ,SAAUT,GACxD,GAAIA,EAAIkJ,OAAS,OAASlJ,EAAIP,QAAQ+N,SAAWxN,EAAIP,QAAQ+N,QAAQ+wD,QAAS,CAC7Ev+D,EAAIjB,aAAa6Q,iBAAiB,UAAW5P,EAAIP,QAAQ+N,QAAQ+wD,QACrE,CACA,IAEE39D,EAAKq9D,kBAAoBr9D,EAAK49D,aAAa3vD,KAAKjO,GAEhDA,EAAKpD,MAAMI,QAAQgS,iBAAiB,UAAWhP,EAAKq9D,mBAEpDhjE,KAAKuC,MAAMkB,QAAQ+6B,0BAA0B/9B,KAAKT,KAAKuC,MAAOwC,EAAKxC,GAEnE,OAAO,IACT,KAAQ,CACN8J,QAAQC,KAAK,+EAAgFtM,KAAKojE,gBAClG,OAAO,KACT,CACA,EAGAR,EAASnjE,UAAUmlE,WAAa,SAAUriE,GACzC,IAAIoD,EAAO3F,KACX,GAAIuC,IAAUvC,KAAKojE,eAAgB,CAClCpjE,KAAKojE,eAAiB,MACtBpjE,KAAKqjE,aAAe,MAEpBrjE,KAAKuC,MAAMI,QAAQY,UAAUmkB,OAAO,iCAEpC/hB,EAAKpD,MAAMM,WAAW6b,iBAAiBlZ,SAAQ,SAAUT,GACxD,GAAIA,EAAIkJ,OAAS,OAASlJ,EAAIP,QAAQ+N,SAAWxN,EAAIP,QAAQ+N,QAAQ+wD,QAAS,CAC7Ev+D,EAAIjB,aAAa4gD,oBAAoB,UAAW3/C,EAAIP,QAAQ+N,QAAQ+wD,QACxE,CACA,IAEE39D,EAAKpD,MAAMI,QAAQ+hD,oBAAoB,UAAW/+C,EAAKq9D,mBAEvDhjE,KAAKuC,MAAMkB,QAAQk7B,yBAAyBl+B,KAAKT,KAAKuC,MAAOA,EAC/D,KAAQ,CACN8J,QAAQC,KAAK,iEACf,CACA,EAEAs2D,EAASnjE,UAAUolE,aAAe,SAAUtiE,EAAOwC,EAAK09C,GACvD,IAAIqiB,EAAS,MAEb,GAAIriB,EAAS,CAEZ,OAAQrjD,EAAQY,KAAKuC,MAAMkB,QAAQy6B,oBAClC,IAAK,SACJ4mC,EAAS9kE,KAAK+kE,QAAQ/kE,KAAKuC,MAAMkB,QAAQy6B,mBACzC,MAED,IAAK,WACJ4mC,EAAS9kE,KAAKuC,MAAMkB,QAAQy6B,kBAC5B,MAGF,GAAI4mC,EAAQ,CACXA,EAAOrkE,KAAKT,KAAMA,KAAKmhE,OAAOv3D,eAAgB7E,EAAMA,EAAI6E,eAAiBjJ,UAAW4B,EACvF,KAAS,CACN,GAAIvC,KAAKuC,MAAMkB,QAAQy6B,kBAAmB,CACzC7xB,QAAQC,KAAK,8CAA+CtM,KAAKuC,MAAMkB,QAAQy6B,kBACnF,CACA,CAEEl+B,KAAKuC,MAAMkB,QAAQ46B,gBAAgB59B,KAAKT,KAAKuC,MAAOvC,KAAKmhE,OAAOv3D,eAAgB7E,EAAMA,EAAI6E,eAAiBjJ,UAAW4B,EACxH,KAAQ,CACNvC,KAAKuC,MAAMkB,QAAQ66B,sBAAsB79B,KAAKT,KAAKuC,MAAOvC,KAAKmhE,OAAOv3D,eAAgB7E,EAAMA,EAAI6E,eAAiBjJ,UAAW4B,EAC9H,CAECvC,KAAK4hE,SACN,EAEAgB,EAASnjE,UAAU8jE,aAAe,SAAU3uD,EAAG7P,GAC9C,IAAIigE,EAAW,MACXviB,EAAU,MAEd7tC,EAAE0vC,2BAEF,OAAQllD,EAAQY,KAAKuC,MAAMkB,QAAQ06B,sBAClC,IAAK,SACJ6mC,EAAWhlE,KAAKilE,UAAUjlE,KAAKuC,MAAMkB,QAAQ06B,qBAC7C,MAED,IAAK,WACJ6mC,EAAWhlE,KAAKuC,MAAMkB,QAAQ06B,oBAC9B,MAGF,GAAI6mC,EAAU,CACbviB,EAAUuiB,EAASvkE,KAAKT,KAAMA,KAAKqjE,aAAaz5D,eAAgB7E,EAAMA,EAAI6E,eAAiBjJ,UAAWX,KAAKojE,eAC7G,KAAQ,CACN/2D,QAAQC,KAAK,gDAAiDtM,KAAKuC,MAAMkB,QAAQ06B,oBACnF,CAEC,GAAIskB,EAAS,CACZziD,KAAKuC,MAAMkB,QAAQg7B,oBAAoBh+B,KAAKT,KAAKuC,MAAOvC,KAAKqjE,aAAaz5D,eAAgB7E,EAAMA,EAAI6E,eAAiBjJ,UAAWX,KAAKojE,eACvI,KAAQ,CACNpjE,KAAKuC,MAAMkB,QAAQi7B,0BAA0Bj+B,KAAKT,KAAKuC,MAAOvC,KAAKqjE,aAAaz5D,eAAgB7E,EAAMA,EAAI6E,eAAiBjJ,UAAWX,KAAKojE,eAC7I,CAECpjE,KAAKuC,MAAMiC,QAAQyzB,MAAMmZ,KAAKpxC,KAAKojE,eAAgB,UAAW,eAAgB,CAC7Er+D,IAAKA,EACL09C,QAASA,GAEX,EAEAmgB,EAASnjE,UAAUwlE,UAAY,CAC9B7qB,OAAQ,SAASA,EAAO9T,EAASlU,EAAO8yC,GACvCllE,KAAKuC,MAAM2e,OAAOolB,EAAQtlB,UAAWrgB,UAAWyxB,GAChD,OAAO,IACT,EAEC5uB,IAAK,SAASA,EAAI8iC,EAASlU,EAAO8yC,GACjCllE,KAAKuC,MAAM2e,OAAOolB,EAAQtlB,WAC1B,OAAO,IACT,EAEClT,OAAQ,SAASA,EAAOw4B,EAASlU,EAAO8yC,GACvC,GAAI9yC,EAAO,CACVA,EAAMtkB,OAAOw4B,EAAQtlB,WACrB,OAAO,IACV,CAEE,OAAO,KACT,EAECm5B,QAAS,SAASA,EAAQ7T,EAASlU,EAAO8yC,GACzC,GAAI9yC,EAAO,CACVpyB,KAAKuC,MAAM2e,OAAOolB,EAAQtlB,UAAWrgB,UAAWyxB,GAChDA,EAAM5jB,SACN,OAAO,IACV,CAEE,OAAO,KACT,GAGAo0D,EAASnjE,UAAUslE,QAAU,CAC5Bv2D,OAAQ,SAAS22D,EAAQ7+B,EAASlU,EAAOgzC,GACxC9+B,EAAQ93B,QACV,GAGAo0D,EAASnjE,UAAU4xC,cAAgB,SAAU9uC,EAAO8e,EAAQ1c,GAC3D,OAAQ0c,GACP,IAAK,UACJ,OAAOrhB,KAAK2kE,QAAQpiE,EAAOoC,EAAKI,KAGjC,IAAK,aACJ,OAAO/E,KAAK4kE,WAAWriE,GAGxB,IAAK,eACJ,OAAOvC,KAAK6kE,aAAatiE,EAAOoC,EAAKI,IAAKJ,EAAK89C,SAGlD,EAEA/0C,EAAUjO,UAAU6rC,eAAe,UAAWs3B,GAC9C,IAAIyC,EAAU,SAASA,EAAQ9iE,GAC9BvC,KAAKuC,MAAQA,EACbvC,KAAKuxC,aAAe,CAAC,GAAI,OAAQ,OAAQ,aACzCvxC,KAAKslE,QAAU,IAChB,EAGAD,EAAQ5lE,UAAU2U,iBAAmB,SAAU3N,GAC9C,IAAId,EAAO3F,KACPsF,EAAQ,MACRsF,EAAS,GAEb5K,KAAKuxC,aAAa/rC,SAAQ,SAAUyI,GACnC,IAAIhJ,EAAM,WAAagJ,EAAKujC,OAAO,GAAGC,cAAgBxjC,EAAKoX,MAAM,IAC7D9O,EAEJ,GAAI9P,EAAOH,WAAWrB,GAAM,CAC3BsR,EAAU5Q,EAAK4/D,cAAc9+D,EAAOH,WAAWrB,IAE/C,GAAIsR,EAAS,CACZjR,EAAQ,KAERsF,EAAO3F,GAAO,CACbsR,QAASA,EACTuB,OAAQrR,EAAOH,WAAWrB,EAAM,WAAa,GAElD,CACA,CACA,IAEC,GAAIK,EAAO,CACVmB,EAAOjC,QAAQ6uB,OAASzoB,CAC1B,CACA,EAEAy6D,EAAQ5lE,UAAU8lE,cAAgB,SAAUzlE,GAC3C,IAAIyW,EAAU,MAGd,cAAezW,IAAU,YAAc,YAAcV,EAAQU,IAC5D,IAAK,SACJ,GAAIE,KAAKwlE,SAAS1lE,GAAQ,CACzByW,EAAUvW,KAAKwlE,SAAS1lE,EAC5B,KAAU,CACNuM,QAAQC,KAAK,oDAAqDxM,EACtE,CACG,MAED,IAAK,WACJyW,EAAUzW,EACV,MAGF,OAAOyW,CACR,EAGA8uD,EAAQ5lE,UAAUmxB,aAAe,SAAUjsB,EAAMsJ,EAAM6iB,GACtD,IAAInrB,EAAO3F,KACPiF,EAAM,WAAagJ,EAAKujC,OAAO,GAAGC,cAAgBxjC,EAAKoX,MAAM,IAC7DvlB,EAEJ,GAAIE,KAAKslE,QAAS,CAEjB3/D,EAAKpD,MAAMmI,cAAcvB,UAAS,SAAU1C,GAC3C,IAAI8P,EAASuB,EAAQ9F,EAErB,GAAIvL,EAAOjC,QAAQ6uB,OAAQ,CAC1B9c,EAAU9P,EAAOjC,QAAQ6uB,OAAOpuB,IAAQwB,EAAOjC,QAAQ6uB,OAAO9c,SAAW,MAEzE,GAAIA,EAAS,CACZzW,EAAQ2G,EAAOgK,qBAAqBqgB,IAAgB,YAAcA,EAAcnsB,GAEhF,GAAIsJ,GAAQ,eAAiBnO,IAAU,YAAa,CACnDkS,EAAYvL,EAAOmD,eACnBkO,SAAgBvB,EAAQuB,SAAW,WAAavB,EAAQuB,OAAOhY,EAAO6E,EAAMsJ,EAAM+D,GAAauE,EAAQuB,OACvGrR,EAAOiK,cAAc/L,EAAM4R,EAAQA,QAAQzW,EAAO6E,EAAMsJ,EAAM6J,EAAQ9F,GAC5E,CACA,CACA,CACA,GACA,CAEC,OAAOrN,CACR,EAGA0gE,EAAQ5lE,UAAU42B,cAAgB,SAAU/qB,EAAMxL,GACjD,IAAIyW,EAAUjL,EAAK7E,OAAOjC,QAAQ6uB,OAAOoyC,aAAen6D,EAAK7E,OAAOjC,QAAQ6uB,OAAO9c,SAAW,MAC1Fya,EAAW,GAEf,GAAIza,EAAS,CACZya,EAAWpxB,OAAOgC,OAAOovB,EAAU1lB,EAAKvG,IAAIic,WAC5C1V,EAAK7E,OAAOiK,cAAcsgB,EAAUlxB,GACpC,OAAOyW,EAAQA,QAAQzW,EAAOkxB,EAAU,OAAQza,EAAQuB,OAAQxM,EAAK1B,eACvE,KAAQ,CACN,OAAO9J,CACT,CACA,EAEAulE,EAAQ5lE,UAAUu3C,OAAS,WAC1Bh3C,KAAKslE,QAAU,IAChB,EAEAD,EAAQ5lE,UAAUs3C,QAAU,WAC3B/2C,KAAKslE,QAAU,KAChB,EAGAD,EAAQ5lE,UAAU+lE,SAAW,GAE7B93D,EAAUjO,UAAU6rC,eAAe,UAAW+5B,GAC9C,IAAIK,EAAO,SAASA,EAAKnjE,GAExBvC,KAAKuC,MAAQA,EAEbvC,KAAK0sC,KAAO,QACZ1sC,KAAK8kB,gBAAkB,MAEvB9kB,KAAK+oC,KAAO,EACZ/oC,KAAK8hB,KAAO,EACZ9hB,KAAK0lC,MAAQ,EACb1lC,KAAKsB,IAAM,EAEXtB,KAAK4gB,aAAe,EAEpB5gB,KAAK2lE,YAAc,KAEnB3lE,KAAK4lE,UAAY,GAEjB5lE,KAAK6lE,kBAAoB,GACzB7lE,KAAK8lE,cAAgB,GAErB9lE,KAAKq4D,gBACN,EAEAqN,EAAKjmE,UAAU44D,eAAiB,WAE/B,IAAItW,EAEJ/hD,KAAK2C,QAAUU,SAASC,cAAc,QACtCtD,KAAK2C,QAAQY,UAAUC,IAAI,uBAE3BxD,KAAK+lE,aAAe1iE,SAASC,cAAc,QAC3CtD,KAAK+lE,aAAaxiE,UAAUC,IAAI,mBAEhCu+C,EAAS1+C,SAASC,cAAc,UAChCy+C,EAAOx+C,UAAUC,IAAI,kBACrBu+C,EAAOpvC,aAAa,OAAQ,UAC5BovC,EAAOpvC,aAAa,OAAQ,UAC5BovC,EAAOpvC,aAAa,aAAc,IAClCovC,EAAOpvC,aAAa,QAAS,IAE7B3S,KAAKgmE,SAAWjkB,EAAO7G,UAAU,MACjCl7C,KAAKgmE,SAASrzD,aAAa,YAAa,SAExC3S,KAAKimE,QAAUlkB,EAAO7G,UAAU,MAChCl7C,KAAKimE,QAAQtzD,aAAa,YAAa,QAEvC3S,KAAKkmE,QAAUnkB,EAAO7G,UAAU,MAChCl7C,KAAKkmE,QAAQvzD,aAAa,YAAa,QAEvC3S,KAAKmmE,QAAUpkB,EAAO7G,UAAU,MAChCl7C,KAAKmmE,QAAQxzD,aAAa,YAAa,QAEvC,GAAI3S,KAAKuC,MAAMkB,QAAQg5B,uBAAwB,CAC9Cz8B,KAAKomE,eAAiB/iE,SAASC,cAAc,UAC7CtD,KAAKomE,eAAe7iE,UAAUC,IAAI,sBACpC,CACA,EAEAkiE,EAAKjmE,UAAU4mE,2BAA6B,WAC3C,IAAIC,EAAUtmE,KAEd,IAAI4lE,EAAY,GAEhB,GAAI5lE,KAAKomE,eAAgB,CAExB,GAAI1mE,MAAM2F,QAAQrF,KAAKuC,MAAMkB,QAAQg5B,wBAAyB,CAC7DmpC,EAAY5lE,KAAKuC,MAAMkB,QAAQg5B,uBAC/Bz8B,KAAK4lE,UAAYA,EAEjB,GAAI5lE,KAAK4lE,UAAU3kE,QAAQjB,KAAK+oC,QAAU,EAAG,CAC5C68B,EAAUz+D,QAAQnH,KAAK+oC,KAC3B,CACA,KAAS,CAEN,GAAI/oC,KAAK4lE,UAAU3kE,QAAQjB,KAAK+oC,QAAU,EAAG,CAC5C68B,EAAY,GAEZ,IAAK,IAAIW,EAAO,EAAGA,EAAO,EAAGA,IAAQ,CACpCX,EAAUrgE,KAAKvF,KAAK+oC,KAAOw9B,EAChC,CAEIvmE,KAAK4lE,UAAYA,CACrB,KAAU,CACNA,EAAY5lE,KAAK4lE,SACrB,CACA,CAEE,MAAO5lE,KAAKomE,eAAejjE,WAAY,CACtCnD,KAAKomE,eAAexgE,YAAY5F,KAAKomE,eAAejjE,WACvD,CAAGyiE,EAAUpgE,SAAQ,SAAUkc,GAC5B,IAAIq+C,EAAS18D,SAASC,cAAc,UACpCy8D,EAAOjgE,MAAQ4hB,EAEf,GAAIA,IAAS,KAAM,CAClB4kD,EAAQ/jE,MAAMiC,QAAQmP,SAASC,KAAK,kBAAkB,SAAU9T,GAC/DigE,EAAOznD,UAAYxY,CACxB,GACA,KAAU,CACNigE,EAAOznD,UAAYoJ,CACvB,CAEG4kD,EAAQF,eAAeh/D,YAAY24D,EACtC,IAEE//D,KAAKomE,eAAetmE,MAAQE,KAAK+oC,IACnC,CACA,EAGA28B,EAAKjmE,UAAUkE,WAAa,SAAU6iE,GACrC,IAAI7gE,EAAO3F,KACPymE,EACAC,EACAC,EAGJ3mE,KAAK8lE,cAAgBlmE,OAAOgC,OAAO,GAAI5B,KAAKmkB,yBAC5CnkB,KAAK8lE,cAAgBlmE,OAAOgC,OAAO5B,KAAK8lE,cAAe9lE,KAAKuC,MAAMkB,QAAQk5B,oBAE1E38B,KAAK6lE,kBAAoBjmE,OAAOgC,OAAO,GAAI5B,KAAK4mE,6BAChD5mE,KAAK6lE,kBAAoBjmE,OAAOgC,OAAO5B,KAAK6lE,kBAAmB7lE,KAAKuC,MAAMkB,QAAQm5B,wBAKlFj3B,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,oBAAoB,SAAU9T,GAC9D6F,EAAKqgE,SAAS1tD,UAAYxY,CAC5B,IAEC6F,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,0BAA0B,SAAU9T,GACpE6F,EAAKqgE,SAASrzD,aAAa,aAAc7S,GACzC6F,EAAKqgE,SAASrzD,aAAa,QAAS7S,EACtC,IAEC6F,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,mBAAmB,SAAU9T,GAC7D6F,EAAKsgE,QAAQ3tD,UAAYxY,CAC3B,IAEC6F,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,yBAAyB,SAAU9T,GACnE6F,EAAKsgE,QAAQtzD,aAAa,aAAc7S,GACxC6F,EAAKsgE,QAAQtzD,aAAa,QAAS7S,EACrC,IAEC6F,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,mBAAmB,SAAU9T,GAC7D6F,EAAKugE,QAAQ5tD,UAAYxY,CAC3B,IAEC6F,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,yBAAyB,SAAU9T,GACnE6F,EAAKugE,QAAQvzD,aAAa,aAAc7S,GACxC6F,EAAKugE,QAAQvzD,aAAa,QAAS7S,EACrC,IAEC6F,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,mBAAmB,SAAU9T,GAC7D6F,EAAKwgE,QAAQ7tD,UAAYxY,CAC3B,IAEC6F,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,yBAAyB,SAAU9T,GACnE6F,EAAKwgE,QAAQxzD,aAAa,aAAc7S,GACxC6F,EAAKwgE,QAAQxzD,aAAa,QAAS7S,EACrC,IAGC6F,EAAKqgE,SAASrxD,iBAAiB,SAAS,WACvChP,EAAK+e,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GACzD,IAEC1V,EAAKsgE,QAAQtxD,iBAAiB,SAAS,WACtChP,EAAKqjC,eAAe5tB,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC7D,IAEC1V,EAAKugE,QAAQvxD,iBAAiB,SAAS,WACtChP,EAAKqY,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GACzD,IAEC1V,EAAKwgE,QAAQxxD,iBAAiB,SAAS,WACtChP,EAAK+e,QAAQ/e,EAAKrE,KAAK8Z,MAAK,WAAY,IAAIC,OAAM,WAAY,GAChE,IAEC,GAAI1V,EAAKpD,MAAMkB,QAAQi5B,kBAAmB,CACzC/2B,EAAKhD,QAAUgD,EAAKpD,MAAMkB,QAAQi5B,iBACpC,CAEC,GAAI18B,KAAKomE,eAAgB,CACxBK,EAAkBpjE,SAASC,cAAc,SAEzCqC,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,wBAAwB,SAAU9T,GAClE6F,EAAKygE,eAAezzD,aAAa,aAAc7S,GAC/C6F,EAAKygE,eAAezzD,aAAa,QAAS7S,GAC1C2mE,EAAgBnuD,UAAYxY,CAC/B,IAEE6F,EAAKhD,QAAQyE,YAAYq/D,GACzB9gE,EAAKhD,QAAQyE,YAAYzB,EAAKygE,gBAE9BzgE,EAAKygE,eAAezxD,iBAAiB,UAAU,SAAUC,GACxDjP,EAAKmjC,YAAYnjC,EAAKygE,eAAetmE,OAAS,OAAS,KAAO6F,EAAKygE,eAAetmE,OAClF6F,EAAK+e,QAAQ,GAAGtJ,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC1D,GACA,CAGC1V,EAAKhD,QAAQyE,YAAYzB,EAAKqgE,UAC9BrgE,EAAKhD,QAAQyE,YAAYzB,EAAKsgE,SAC9BtgE,EAAKhD,QAAQyE,YAAYzB,EAAKogE,cAC9BpgE,EAAKhD,QAAQyE,YAAYzB,EAAKugE,SAC9BvgE,EAAKhD,QAAQyE,YAAYzB,EAAKwgE,SAE9B,IAAKxgE,EAAKpD,MAAMkB,QAAQi5B,oBAAsB8pC,EAAQ,CACrD7gE,EAAKpD,MAAMwL,cAAcwpB,OAAO5xB,EAAKhD,QAASgD,EAChD,CAGCA,EAAK+mC,KAAO/mC,EAAKpD,MAAMkB,QAAQ6b,WAE/B,GAAI3Z,EAAKpD,MAAMkB,QAAQ64B,eAAgB,CACtC32B,EAAKojC,KAAOpjC,EAAKpD,MAAMkB,QAAQ64B,cACjC,KAAQ,CACNoqC,EAAYrjE,SAASC,cAAc,OACnCojE,EAAUnjE,UAAUC,IAAI,iBACxBkjE,EAAUriE,MAAMojB,WAAa++C,EAE7BG,EAAatjE,SAASC,cAAc,OACpCqjE,EAAWpjE,UAAUC,IAAI,kBACzBmjE,EAAWruD,UAAY,gBAEvBouD,EAAUt/D,YAAYu/D,GAEtBhhE,EAAKpD,MAAMM,WAAWua,kBAAkBhW,YAAYs/D,GAEpD/gE,EAAKojC,KAAO1nC,KAAK0Y,MAAMpU,EAAKpD,MAAMM,WAAWiB,aAAa+I,aAAe65D,EAAU3tD,cAEnFpT,EAAKpD,MAAMM,WAAWua,kBAAkBxX,YAAY8gE,EACtD,CAGC/gE,EAAK+/B,MAAQ//B,EAAKpD,MAAMkB,QAAQ+4B,sBAEhC72B,EAAK0gE,4BACN,EAEAX,EAAKjmE,UAAUqzC,sBAAwB,SAAUpG,GAChD1sC,KAAK2D,WAAW,MAChB3D,KAAK0sC,KAAO,eAAiBA,EAC7B1sC,KAAK8kB,gBAAkB,IACxB,EAEA4gD,EAAKjmE,UAAUimB,gBAAkB,SAAU1jB,GAC1ChC,KAAK4gB,aAAe5e,CACrB,EAEA0jE,EAAKjmE,UAAUgmB,gBAAkB,WAChC,OAAOzlB,KAAK4gB,YACb,EAGA8kD,EAAKjmE,UAAUomB,WAAa,SAAUw0C,GACrC,IAAKA,EAAU,CACdr6D,KAAKsB,IAAM,CACb,KAAQ,CACNtB,KAAKsB,IAAMtB,KAAK+oC,OAAS,KAAO,EAAI1nC,KAAK4mB,KAAKoyC,EAAWr6D,KAAK+oC,KAChE,CAEC,GAAI/oC,KAAK8hB,KAAO9hB,KAAKsB,IAAK,CACzBtB,KAAK8hB,KAAO9hB,KAAKsB,GACnB,CACA,EAGAokE,EAAKjmE,UAAUoG,MAAQ,SAAU4H,EAAO2R,GACvC,GAAIpf,KAAK0sC,MAAQ,SAAWj/B,EAAO,CAClCzN,KAAK8hB,KAAO,CACd,CAEC,GAAI1C,EAAgB,CACnBpf,KAAK2lE,YAAc,IACrB,CAEC,OAAO,IACR,EAGAD,EAAKjmE,UAAUmpC,WAAa,SAAUtnC,GAErCA,EAAM2L,SAAS3L,GAEftB,KAAKsB,IAAMA,GAAO,EAElB,GAAItB,KAAK8hB,KAAO9hB,KAAKsB,IAAK,CACzBtB,KAAK8hB,KAAO9hB,KAAKsB,IACjBtB,KAAK6mE,SACP,CACA,EAGAnB,EAAKjmE,UAAUilB,QAAU,SAAU5C,GAClC,IAAIglD,EAAU9mE,KAEd,IAAI2F,EAAO3F,KAEX,OAAQ8hB,GACP,IAAK,QACJ,OAAO9hB,KAAK0kB,QAAQ,GAGrB,IAAK,OACJ,OAAO1kB,KAAKgpC,eAGb,IAAK,OACJ,OAAOhpC,KAAKge,WAGb,IAAK,OACJ,OAAOhe,KAAK0kB,QAAQ1kB,KAAKsB,KAI3B,OAAO,IAAIuK,SAAQ,SAAUC,EAASC,GAErC+V,EAAO7U,SAAS6U,GAEhB,GAAIA,EAAO,GAAKA,GAAQglD,EAAQxlE,KAAOwlE,EAAQp6B,OAAS,QAAS,CAChEo6B,EAAQhlD,KAAOA,EACfglD,EAAQD,UAAUzrD,MAAK,WACtBtP,GACJ,IAAMuP,OAAM,WACRtP,GACJ,IAEG,GAAIpG,EAAKpD,MAAMkB,QAAQkH,aAAehF,EAAKpD,MAAMgC,UAAU,cAAe,OAASoB,EAAKpD,MAAMiC,QAAQmG,YAAYC,OAAOkX,KAAM,CAC9Hnc,EAAKpD,MAAMiC,QAAQmG,YAAYE,KAAK,OACxC,CACA,KAAS,CACNwB,QAAQC,KAAK,4DAA8Dw6D,EAAQxlE,IAAM,IAAKwgB,GAC9F/V,GACH,CACA,GACA,EAEA25D,EAAKjmE,UAAU4tB,aAAe,SAAUtoB,GACvC,IAAIgiE,EAAU/mE,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GAErC,IAAId,EAAO87D,EAAQxkE,MAAMM,WAAW6b,eAAeqoD,EAAQnmD,aAAe,GAC1E,IAAI5e,EAAQiJ,EAAKhK,QAAQ8D,GAEzB,GAAI/C,GAAS,EAAG,CACf,IAAI8f,EAAOilD,EAAQh+B,OAAS,KAAO,EAAI1nC,KAAK4mB,MAAMjmB,EAAQ,GAAK+kE,EAAQh+B,MAEvEg+B,EAAQriD,QAAQ5C,GAAM1G,MAAK,WAC1BtP,GACJ,IAAMuP,OAAM,WACRtP,GACJ,GACA,KAAS,CACNM,QAAQC,KAAK,mDACbP,GACH,CACA,GACA,EAEA25D,EAAKjmE,UAAUqpC,YAAc,SAAUC,GACtC,GAAIA,IAAS,KAAM,CAClBA,EAAO97B,SAAS87B,EAClB,CAEC,GAAIA,EAAO,EAAG,CACb/oC,KAAK+oC,KAAOA,CACd,CAEC,GAAI/oC,KAAKomE,eAAgB,CAExBpmE,KAAKqmE,4BACP,CAEC,GAAIrmE,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAOkX,KAAM,CAC9H9hB,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,OACtC,CACA,EAGA66D,EAAKjmE,UAAUunE,gBAAkB,WAChC,IAAIrhE,EAAO3F,KAEX,IAAIinE,EAAW5lE,KAAK0Y,OAAO/Z,KAAK0lC,MAAQ,GAAK,GAC7C,IAAIwhC,EAAY7lE,KAAK4mB,MAAMjoB,KAAK0lC,MAAQ,GAAK,GAC7C,IAAIt5B,EAAMpM,KAAKsB,IAAMtB,KAAK8hB,KAAOmlD,EAAW,EAAIjnE,KAAK0lC,MAAQ1lC,KAAKsB,IAAMtB,KAAK0lC,MAAQ,EAAIrkC,KAAKC,IAAItB,KAAK8hB,KAAOmlD,EAAU,GACxH,IAAI3lE,EAAMtB,KAAK8hB,MAAQolD,EAAY7lE,KAAK+K,IAAIpM,KAAK0lC,MAAO1lC,KAAKsB,KAAOD,KAAK+K,IAAIpM,KAAK8hB,KAAOolD,EAAWlnE,KAAKsB,KAEzG,MAAOqE,EAAKogE,aAAa5iE,WAAY,CACpCwC,EAAKogE,aAAangE,YAAYD,EAAKogE,aAAa5iE,WAClD,CAAE,GAAIwC,EAAKmc,MAAQ,EAAG,CACpBnc,EAAKqgE,SAAShG,SAAW,KACzBr6D,EAAKsgE,QAAQjG,SAAW,IAC1B,KAAQ,CACNr6D,EAAKqgE,SAAShG,SAAW,MACzBr6D,EAAKsgE,QAAQjG,SAAW,KAC1B,CAEC,GAAIr6D,EAAKmc,MAAQnc,EAAKrE,IAAK,CAC1BqE,EAAKwgE,QAAQnG,SAAW,KACxBr6D,EAAKugE,QAAQlG,SAAW,IAC1B,KAAQ,CACNr6D,EAAKwgE,QAAQnG,SAAW,MACxBr6D,EAAKugE,QAAQlG,SAAW,KAC1B,CAEC,IAAK,IAAImH,EAAO/6D,EAAK+6D,GAAQ7lE,EAAK6lE,IAAQ,CACzC,GAAIA,EAAO,GAAKA,GAAQxhE,EAAKrE,IAAK,CACjCqE,EAAKogE,aAAa3+D,YAAYzB,EAAKyhE,oBAAoBD,GAC1D,CACA,CAECnnE,KAAK23B,cACN,EAEA+tC,EAAKjmE,UAAU2nE,oBAAsB,SAAUtlD,GAC9C,IAAInc,EAAO3F,KACP+hD,EAAS1+C,SAASC,cAAc,UAEpCy+C,EAAOx+C,UAAUC,IAAI,kBACrB,GAAIse,GAAQnc,EAAKmc,KAAM,CACtBigC,EAAOx+C,UAAUC,IAAI,SACvB,CAECu+C,EAAOpvC,aAAa,OAAQ,UAC5BovC,EAAOpvC,aAAa,OAAQ,UAE5BhN,EAAKpD,MAAMiC,QAAQmP,SAASC,KAAK,yBAAyB,SAAU9T,GACnEiiD,EAAOpvC,aAAa,aAAc7S,EAAQ,IAAMgiB,GAChDigC,EAAOpvC,aAAa,QAAS7S,EAAQ,IAAMgiB,EAC7C,IAECigC,EAAOpvC,aAAa,YAAamP,GACjCigC,EAAO2a,YAAc56C,EAErBigC,EAAOptC,iBAAiB,SAAS,SAAUC,GAC1CjP,EAAK+e,QAAQ5C,GAAM1G,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC5D,IAEC,OAAO0mC,CACR,EAGA2jB,EAAKjmE,UAAUupC,aAAe,WAC7B,IAAIq+B,EAAUrnE,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,GAAIs7D,EAAQvlD,KAAO,EAAG,CACrBulD,EAAQvlD,OACRulD,EAAQR,UAAUzrD,MAAK,WACtBtP,GACJ,IAAMuP,OAAM,WACRtP,GACJ,IAEG,GAAIs7D,EAAQ9kE,MAAMkB,QAAQkH,aAAe08D,EAAQ9kE,MAAMgC,UAAU,cAAe,OAAS8iE,EAAQ9kE,MAAMiC,QAAQmG,YAAYC,OAAOkX,KAAM,CACvIulD,EAAQ9kE,MAAMiC,QAAQmG,YAAYE,KAAK,OAC3C,CACA,KAAS,CACNwB,QAAQC,KAAK,8DAA+D,GAC5EP,GACH,CACA,GACA,EAGA25D,EAAKjmE,UAAUue,SAAW,WACzB,IAAIspD,EAAUtnE,KAEd,OAAO,IAAI6L,SAAQ,SAAUC,EAASC,GACrC,GAAIu7D,EAAQxlD,KAAOwlD,EAAQhmE,IAAK,CAC/BgmE,EAAQxlD,OACRwlD,EAAQT,UAAUzrD,MAAK,WACtBtP,GACJ,IAAMuP,OAAM,WACRtP,GACJ,IAEG,GAAIu7D,EAAQ/kE,MAAMkB,QAAQkH,aAAe28D,EAAQ/kE,MAAMgC,UAAU,cAAe,OAAS+iE,EAAQ/kE,MAAMiC,QAAQmG,YAAYC,OAAOkX,KAAM,CACvIwlD,EAAQ/kE,MAAMiC,QAAQmG,YAAYE,KAAK,OAC3C,CACA,KAAS,CACN,IAAKy8D,EAAQxiD,gBAAiB,CAC7BzY,QAAQC,KAAK,sEAAwEg7D,EAAQhmE,IAAM,IAAKgmE,EAAQhmE,IAAM,EAC1H,CACGyK,GACH,CACA,GACA,EAGA25D,EAAKjmE,UAAUwpC,QAAU,WACxB,OAAOjpC,KAAK8hB,IACb,EAGA4jD,EAAKjmE,UAAUypC,WAAa,WAC3B,OAAOlpC,KAAKsB,GACb,EAEAokE,EAAKjmE,UAAUsiB,YAAc,SAAUgnB,GACtC,OAAO/oC,KAAK+oC,IACb,EAEA28B,EAAKjmE,UAAU4N,QAAU,WACxB,OAAOrN,KAAK0sC,IACb,EAGAg5B,EAAKjmE,UAAUmkB,QAAU,SAAUjf,GAClC,IAAI4E,EAAQxI,EAAOgiB,EAEnB,GAAI/iB,KAAK0sC,MAAQ,QAAS,CACzBnjC,EAAS,GAET,GAAIvJ,KAAK+oC,OAAS,KAAM,CACvBhoC,EAAQ,EACRgiB,EAAMpe,EAAKvE,MACd,KAAS,CACNW,EAAQf,KAAK+oC,MAAQ/oC,KAAK8hB,KAAO,GACjCiB,EAAMhiB,EAAQkM,SAASjN,KAAK+oC,KAC/B,CAEE/oC,KAAKgnE,kBAEL,IAAK,IAAIO,EAAOxmE,EAAOwmE,EAAOxkD,EAAKwkD,IAAQ,CAC1C,GAAI5iE,EAAK4iE,GAAO,CACfh+D,EAAOhE,KAAKZ,EAAK4iE,GACrB,CACA,CAEE,OAAOh+D,CACT,KAAQ,CAENvJ,KAAKgnE,kBAEL,OAAOriE,EAAK0gB,MAAM,EACpB,CACA,EAEAqgD,EAAKjmE,UAAUonE,QAAU,WACxB,IAAIW,EAAUxnE,KAEd,IAAIiE,EAEJ,OAAO,IAAI4H,SAAQ,SAAUC,EAASC,GAErC,OAAQy7D,EAAQ96B,MACf,IAAK,QACJzoC,EAAOujE,EAAQjlE,MAAMM,WAAWI,WAEhCukE,EAAQjlE,MAAMM,WAAWqd,kBAAkB,QAC3CsnD,EAAQjlE,MAAMM,WAAWmB,iBAAiBC,GAE1CujE,EAAQjlE,MAAMkB,QAAQq9B,WAAWrgC,KAAK+mE,EAAQjlE,MAAOilE,EAAQv+B,WAC7Dn9B,IACA,MAED,IAAK,SACL,IAAK,mBACL,IAAK,qBACJ07D,EAAQjlE,MAAMiC,QAAQuZ,KAAKsmB,qBAC3BmjC,EAAQC,iBAAiBrsD,MAAK,WAC7BtP,GACL,IAAOuP,OAAM,WACRtP,GACL,IACI,MAED,QACCM,QAAQC,KAAK,8CAA+Ck7D,EAAQ96B,MACpE3gC,IAEJ,GACA,EAEA25D,EAAKjmE,UAAUgoE,eAAiB,WAC/B,IAAIC,EAAU1nE,KAEd,IAAI2F,EAAO3F,KACP2nE,EACAC,EAEJ,OAAO,IAAI/7D,SAAQ,SAAUC,EAASC,GAErC,IAAKpG,EAAKpD,MAAMgC,UAAU,OAAQ,MAAO,CACxCwH,GACH,CAGE47D,EAAYj6D,EAAUjO,UAAUkO,QAAQo+B,UAAUpmC,EAAKpD,MAAMiC,QAAQuZ,KAAKg1B,aAAe,IACzF60B,EAAajiE,EAAKpD,MAAMiC,QAAQuZ,KAAKg1B,YAGrC60B,EAAWF,EAAQ5B,cAAchkD,MAAQnc,EAAKmc,KAG9C,GAAI4lD,EAAQ3+B,KAAM,CACjB6+B,EAAWF,EAAQ5B,cAAc/8B,MAAQ2+B,EAAQ3+B,IACpD,CAGE,GAAI2+B,EAAQnlE,MAAMkB,QAAQugB,aAAe0jD,EAAQnlE,MAAMgC,UAAU,QAAS,CACzE,IAAI0f,EAAUte,EAAKpD,MAAMiC,QAAQqR,KAAKqO,UAEtCD,EAAQze,SAAQ,SAAUkc,UAClBA,EAAKjb,MAChB,IAEGmhE,EAAWF,EAAQ5B,cAAc7hD,SAAWA,CAC/C,CAGE,GAAIyjD,EAAQnlE,MAAMkB,QAAQ2gB,eAAiBsjD,EAAQnlE,MAAMgC,UAAU,UAAW,CAC7E,IAAI8f,EAAU1e,EAAKpD,MAAMiC,QAAQsK,OAAOwV,WAAW,KAAM,MACzDsjD,EAAWF,EAAQ5B,cAAczhD,SAAWA,CAC/C,CAEE1e,EAAKpD,MAAMiC,QAAQuZ,KAAKwG,UAAUqjD,GAElCjiE,EAAKpD,MAAMiC,QAAQuZ,KAAKyG,YAAYkjD,EAAQ5iD,iBAAiB1J,MAAK,SAAUzW,GAC3EgB,EAAKkiE,iBAAiBljE,GACtBmH,GACH,IAAKuP,OAAM,SAAUzG,GAClB7I,GACH,IAEEpG,EAAKpD,MAAMiC,QAAQuZ,KAAKwG,UAAUojD,EACpC,GACA,EAEAjC,EAAKjmE,UAAUooE,iBAAmB,SAAUljE,GAC3C,IAAIgB,EAAO3F,KACPiE,EACAU,EACA6jB,EAEJ,UAAW7jB,EAAK3E,KAAK6lE,kBAAkBiC,aAAe,YAAa,CAClEz7D,QAAQC,KAAK,sDAAwDtM,KAAK6lE,kBAAkBiC,UAAY,aAC1G,CAEC,GAAInjE,EAAK3E,KAAK6lE,kBAAkBlhE,MAAO,CACtC3E,KAAKsB,IAAM2L,SAAStI,EAAK3E,KAAK6lE,kBAAkBiC,aAAe,EAE/D,GAAI9nE,KAAK8kB,gBAAiB,CACzB,OAAQ9kB,KAAK0sC,MACZ,IAAK,mBAEJ,GAAI1sC,KAAK8hB,MAAQ,EAAG,CACnB9hB,KAAKuC,MAAMM,WAAWqc,QAAQva,EAAK3E,KAAK6lE,kBAAkBlhE,MAAO,MAAO3E,KAAK2lE,aAAe3lE,KAAK8hB,MAAQ,EAC/G,KAAY,CACN9hB,KAAKuC,MAAMM,WAAWye,QAAQ3c,EAAK3E,KAAK6lE,kBAAkBlhE,MAChE,CAEK,GAAI3E,KAAK8hB,KAAO9hB,KAAKsB,IAAK,CACzBiU,YAAW,WACV5P,EAAKqY,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC9D,GAAS1V,EAAKpD,MAAMkB,QAAQ65B,yBAC5B,CACK,MAED,IAAK,qBACJ34B,EAAO3E,KAAKuC,MAAMM,WAAWme,UAAU7V,OAAOxG,EAAK3E,KAAK6lE,kBAAkBlhE,OAE1E3E,KAAKuC,MAAMM,WAAWqc,QAAQva,EAAM,KAAM3E,KAAK2lE,aAAe3lE,KAAK8hB,MAAQ,GAE3E0G,EAASxoB,KAAKuC,MAAMkB,QAAQ85B,iCAAmCv9B,KAAKuC,MAAMM,WAAWF,QAAQkK,aAAe,EAE5G,GAAIlH,EAAKpD,MAAMM,WAAWF,QAAQiK,cAAgBjH,EAAKpD,MAAMM,WAAWF,QAAQkK,aAAe2b,EAAQ,CACtG7iB,EAAKqY,WAAW5C,MAAK,WAAY,IAAIC,OAAM,WAAY,GAC7D,CACK,MAEL,KAAS,CACNpX,EAAOjE,KAAKuC,MAAMM,WAAWI,WAE7BjD,KAAKuC,MAAMM,WAAWqc,QAAQva,EAAK3E,KAAK6lE,kBAAkBlhE,MAAO,MAAO3E,KAAK2lE,aAAe3lE,KAAK8hB,MAAQ,GAEzG9hB,KAAKuC,MAAMM,WAAWmB,iBAAiBC,GAEvCjE,KAAKuC,MAAMmI,cAAc1G,iBAAiBC,GAE1CjE,KAAKuC,MAAMkB,QAAQq9B,WAAWrgC,KAAKT,KAAKuC,MAAOvC,KAAKipC,UACvD,CAEEjpC,KAAK2lE,YAAc,KACrB,KAAQ,CACNt5D,QAAQC,KAAK,sDAAwDtM,KAAK6lE,kBAAkBlhE,KAAO,aACrG,CACA,EAGA+gE,EAAKjmE,UAAUk4B,aAAe,WAC7B,IAAIowC,EAAS/nE,KAAKuC,MAAMwL,cAAcpL,QAEtC,GAAItB,KAAK4mB,KAAK8/C,EAAO3jE,aAAe2jE,EAAO5jE,YAAc,EAAG,CAC3DnE,KAAK+lE,aAAa1hE,MAAMoV,QAAU,MACpC,KAAQ,CACNzZ,KAAK+lE,aAAa1hE,MAAMoV,QAAU,GAElC,GAAIpY,KAAK4mB,KAAK8/C,EAAO3jE,aAAe2jE,EAAO5jE,YAAc,EAAG,CAC3DnE,KAAK+lE,aAAa1hE,MAAMoV,QAAU,MACrC,CACA,CACA,EAGAisD,EAAKjmE,UAAU0kB,wBAA0B,CACxCrC,KAAQ,OACRinB,KAAQ,OACR9kB,QAAW,UAEXI,QAAW,WAMZqhD,EAAKjmE,UAAUmnE,4BAA8B,CAC5CoB,aAAgB,eAChBF,UAAa,YACbnjE,KAAQ,QAGT+I,EAAUjO,UAAU6rC,eAAe,OAAQo6B,GAE3C,IAAIuC,EAAc,SAASA,EAAY1lE,GACtCvC,KAAKuC,MAAQA,EACbvC,KAAK0sC,KAAO,GACZ1sC,KAAKkoE,GAAK,GAEVloE,KAAKmoE,gBAAkB,MACvBnoE,KAAK4K,OAAS,GACd5K,KAAKooE,SAAW,MAChBpoE,KAAKqoE,UAAY,KAClB,EAGAJ,EAAYxoE,UAAU6oE,iBAAmB,WACxC,IAAIC,EAAU,kBAEd,IACC79C,OAAO89C,aAAaviB,QAAQsiB,EAASA,GACrC79C,OAAO89C,aAAaC,WAAWF,GAC/B,OAAO,IACT,CAAG,MAAO3zD,GACR,OAAO,KACT,CACA,EAGAqzD,EAAYxoE,UAAUkE,WAAa,WAGlC,IAAI+oC,EAAO1sC,KAAKuC,MAAMkB,QAAQu4B,gBAC1BksC,EAAKloE,KAAKuC,MAAMkB,QAAQs4B,cACxB2sC,EAEJ1oE,KAAK0sC,KAAOA,IAAS,KAAOA,EAAO1sC,KAAKsoE,mBAAqB,QAAU,SAEvE,GAAItoE,KAAKuC,MAAMkB,QAAQw4B,sBAAuB,CAC7C,UAAWj8B,KAAKuC,MAAMkB,QAAQw4B,wBAA0B,WAAY,CACnEj8B,KAAKooE,SAAWpoE,KAAKuC,MAAMkB,QAAQw4B,qBACtC,KAAS,CACN,GAAIj8B,KAAK2oE,QAAQ3oE,KAAKuC,MAAMkB,QAAQw4B,uBAAwB,CAC3Dj8B,KAAKooE,SAAWpoE,KAAK2oE,QAAQ3oE,KAAKuC,MAAMkB,QAAQw4B,sBACpD,KAAU,CACN5vB,QAAQC,KAAK,8CAA+CtM,KAAKuC,MAAMkB,QAAQw4B,sBACnF,CACA,CACA,KAAQ,CACN,GAAIj8B,KAAK2oE,QAAQ3oE,KAAK0sC,MAAO,CAC5B1sC,KAAKooE,SAAWpoE,KAAK2oE,QAAQ3oE,KAAK0sC,KACrC,KAAS,CACNrgC,QAAQC,KAAK,8CAA+CtM,KAAK0sC,KACpE,CACA,CAEC,GAAI1sC,KAAKuC,MAAMkB,QAAQy4B,sBAAuB,CAC7C,UAAWl8B,KAAKuC,MAAMkB,QAAQy4B,wBAA0B,WAAY,CACnEl8B,KAAKqoE,UAAYroE,KAAKuC,MAAMkB,QAAQy4B,qBACvC,KAAS,CACN,GAAIl8B,KAAK2oE,QAAQ3oE,KAAKuC,MAAMkB,QAAQy4B,uBAAwB,CAC3Dl8B,KAAKqoE,UAAYroE,KAAK2oE,QAAQ3oE,KAAKuC,MAAMkB,QAAQy4B,sBACrD,KAAU,CACN7vB,QAAQC,KAAK,+CAAgDtM,KAAKuC,MAAMkB,QAAQy4B,sBACpF,CACA,CACA,KAAQ,CACN,GAAIl8B,KAAK4oE,QAAQ5oE,KAAK0sC,MAAO,CAC5B1sC,KAAKqoE,UAAYroE,KAAK4oE,QAAQ5oE,KAAK0sC,KACtC,KAAS,CACNrgC,QAAQC,KAAK,+CAAgDtM,KAAK0sC,KACrE,CACA,CAGC1sC,KAAKkoE,GAAK,cAAgBA,GAAMloE,KAAKuC,MAAMI,QAAQkhD,aAAa,OAAS,IAEzE7jD,KAAK4K,OAAS,CACbiL,KAAM7V,KAAKuC,MAAMkB,QAAQkH,cAAgB,MAAQ3K,KAAKuC,MAAMkB,QAAQkH,YAAYkL,KAChF/G,OAAQ9O,KAAKuC,MAAMkB,QAAQkH,cAAgB,MAAQ3K,KAAKuC,MAAMkB,QAAQkH,YAAYmE,OAClFuc,MAAOrrB,KAAKuC,MAAMkB,QAAQkH,cAAgB,MAAQ3K,KAAKuC,MAAMkB,QAAQkH,YAAY0gB,MACjFvJ,KAAM9hB,KAAKuC,MAAMkB,QAAQkH,cAAgB,MAAQ3K,KAAKuC,MAAMkB,QAAQkH,YAAYmX,KAChFhf,QAAS9C,KAAKuC,MAAMkB,QAAQkH,cAAgB,KAAO,CAAC,QAAS,QAAS,WAAa3K,KAAKuC,MAAMkB,QAAQkH,YAAY7H,SAInH,GAAI9C,KAAK4K,OAAOkX,KAAM,CACrB4mD,EAAgB1oE,KAAK6oE,aAAa,QAElC,GAAIH,EAAe,CAClB,UAAWA,EAAcpsC,iBAAmB,cAAgBt8B,KAAK4K,OAAOkX,OAAS,MAAQ9hB,KAAK4K,OAAOkX,KAAKinB,MAAO,CAChH/oC,KAAKuC,MAAMkB,QAAQ64B,eAAiBosC,EAAcpsC,cACtD,CAEG,UAAWosC,EAAcnsC,wBAA0B,cAAgBv8B,KAAK4K,OAAOkX,OAAS,MAAQ9hB,KAAK4K,OAAOkX,KAAKA,MAAO,CACvH9hB,KAAKuC,MAAMkB,QAAQ84B,sBAAwBmsC,EAAcnsC,qBAC7D,CACA,CACA,CAGC,GAAIv8B,KAAK4K,OAAOygB,MAAO,CACtBq9C,EAAgB1oE,KAAK6oE,aAAa,SAElC,GAAIH,EAAe,CAClB,UAAWA,EAAclrD,UAAY,cAAgBxd,KAAK4K,OAAOygB,QAAU,MAAQrrB,KAAK4K,OAAOygB,MAAM7N,SAAU,CAC9Gxd,KAAKuC,MAAMkB,QAAQ+Z,QAAUkrD,EAAclrD,OAC/C,CACG,UAAWkrD,EAAclrC,iBAAmB,cAAgBx9B,KAAK4K,OAAOygB,QAAU,MAAQrrB,KAAK4K,OAAOygB,MAAMmS,gBAAiB,CAC5Hx9B,KAAKuC,MAAMkB,QAAQ+5B,eAAiBkrC,EAAclrC,cACtD,CACG,UAAWkrC,EAAchrC,cAAgB,cAAgB19B,KAAK4K,OAAOygB,QAAU,MAAQrrB,KAAK4K,OAAOygB,MAAMqS,aAAc,CACtH19B,KAAKuC,MAAMkB,QAAQi6B,YAAcgrC,EAAchrC,WACnD,CACA,CACA,CAEC,GAAI19B,KAAK4K,OAAO9H,QAAS,CACxB9C,KAAKuC,MAAMkB,QAAQX,QAAU9C,KAAKyiC,KAAK,UAAWziC,KAAKuC,MAAMkB,QAAQX,QACvE,CACA,EAEAmlE,EAAYxoE,UAAU2U,iBAAmB,SAAU3N,GAClD,IAAId,EAAO3F,KACPyF,EACAkD,EAEJ,GAAI3I,KAAK4K,OAAO9H,QAAS,CACxB9C,KAAKmoE,gBAAkB,KAEvB1iE,EAAMgB,EAAO+C,gBAEbb,EAAO3I,KAAK4K,OAAO9H,UAAY,KAAOlD,OAAO+I,KAAKlD,GAAOzF,KAAK4K,OAAO9H,QAErE6F,EAAKnD,SAAQ,SAAUP,GACtB,IAAIwpD,EAAQ7uD,OAAOkpE,yBAAyBrjE,EAAKR,GACjD,IAAInF,EAAQ2F,EAAIR,GAChB,GAAIwpD,EAAO,CACV7uD,OAAOC,eAAe4F,EAAKR,EAAK,CAC/B8jE,IAAK,SAASA,EAAI3yC,GACjBt2B,EAAQs2B,EAER,IAAKzwB,EAAKwiE,gBAAiB,CAC1BxiE,EAAKkF,KAAK,UACjB,CAEM,GAAI4jD,EAAMsa,IAAK,CACdta,EAAMsa,IAAI3yC,EACjB,CACA,EACK4yC,IAAK,SAASA,IACb,GAAIva,EAAMua,IAAK,CACdva,EAAMua,KACb,CACM,OAAOlpE,CACb,GAEA,CACA,IAEEE,KAAKmoE,gBAAkB,KACzB,CACA,EAGAF,EAAYxoE,UAAUgjC,KAAO,SAAUx0B,EAAM06C,GAC5C,IAAIhkD,EAAO3E,KAAK6oE,aAAa56D,GAE7B,GAAI06C,EAAS,CACZhkD,EAAOA,EAAO3E,KAAK8mC,gBAAgB6hB,EAAShkD,GAAQgkD,CACtD,CAEC,OAAOhkD,CACR,EAGAsjE,EAAYxoE,UAAUopE,aAAe,SAAU56D,GAC9C,OAAOjO,KAAKooE,SAAWpoE,KAAKooE,SAASpoE,KAAKkoE,GAAIj6D,GAAQ,KACvD,EAGAg6D,EAAYxoE,UAAUqnC,gBAAkB,SAAUmiC,EAASC,GAC1D,IAAIvjE,EAAO3F,KACPuJ,EAAS,GAGb2/D,EAAUA,GAAW,GAErBA,EAAQ1jE,SAAQ,SAAUiB,EAAQ1E,GAEjC,IAAIiI,EAAOrE,EAAKwjE,YAAYF,EAASxiE,GACjCkC,EAEJ,GAAIqB,EAAM,CAET,GAAIrE,EAAKiF,OAAO9H,UAAY,MAAQ6C,EAAKiF,OAAO9H,SAAWnC,UAAW,CACrEgI,EAAO/I,OAAO+I,KAAKqB,GACnBrB,EAAKpD,KAAK,QACd,KAAU,CACNoD,EAAOhD,EAAKiF,OAAO9H,OACvB,CAEG6F,EAAKnD,SAAQ,SAAUP,GACtB,GAAIA,IAAQ,kBAAoBwB,EAAOxB,KAAS,YAAa,CAC5D+E,EAAK/E,GAAOwB,EAAOxB,EACxB,CACA,IAEG,GAAI+E,EAAKlH,QAAS,CACjBkH,EAAKlH,QAAU6C,EAAKmhC,gBAAgB98B,EAAKlH,QAAS2D,EAAO3D,QAC7D,CAEGyG,EAAOhE,KAAKyE,EACf,CACA,IAECi/D,EAAQzjE,SAAQ,SAAUiB,EAAQX,GACjC,IAAIkE,EAAOrE,EAAKwjE,YAAYD,EAASziE,GACrC,IAAKuD,EAAM,CACV,GAAIT,EAAOnJ,OAAS0F,EAAG,CACtByD,EAAOvC,OAAOlB,EAAG,EAAGW,EACxB,KAAU,CACN8C,EAAOhE,KAAKkB,EAChB,CACA,CACA,IAEC,OAAO8C,CACR,EAGA0+D,EAAYxoE,UAAU0pE,YAAc,SAAUrmE,EAASoF,GACtD,IAAI+F,EAAO/F,EAAQpF,QAAU,QAAUoF,EAAQ/C,MAAQ,QAAU,SAEjE,OAAOrC,EAAQpC,MAAK,SAAUwE,GAC7B,OAAQ+I,GACP,IAAK,QACJ,OAAO/I,EAAIE,QAAU8C,EAAQ9C,OAASF,EAAIpC,QAAQ1C,SAAW8H,EAAQpF,QAAQ1C,OAG9E,IAAK,QACJ,OAAO8E,EAAIC,QAAU+C,EAAQ/C,MAG9B,IAAK,SACJ,OAAOD,IAAQgD,EAGnB,GACA,EAGA+/D,EAAYxoE,UAAUoL,KAAO,SAAUoD,GACtC,IAAItJ,EAAO,GAEX,OAAQsJ,GACP,IAAK,UACJtJ,EAAO3E,KAAK4mC,aAAa5mC,KAAKuC,MAAMmI,cAAczB,cAClD,MAED,IAAK,SACJtE,EAAO3E,KAAKuC,MAAMiC,QAAQsK,OAAOwV,aACjC,MAED,IAAK,OACJ3f,EAAO3E,KAAKopE,gBAAgBppE,KAAKuC,MAAMiC,QAAQqR,KAAKqO,WACpD,MAED,IAAK,QACJvf,EAAO3E,KAAKqpE,iBACZ,MAED,IAAK,OACJ1kE,EAAO3E,KAAKspE,gBACZ,MAGF,GAAItpE,KAAKqoE,UAAW,CACnBroE,KAAKqoE,UAAUroE,KAAKkoE,GAAIj6D,EAAMtJ,EAChC,CACA,EAGAsjE,EAAYxoE,UAAU2pE,gBAAkB,SAAUzkE,GACjDA,EAAKa,SAAQ,SAAUkc,GACtBA,EAAKjb,OAASib,EAAKvc,aACZuc,EAAKvc,KACd,IAEC,OAAOR,CACR,EAEAsjE,EAAYxoE,UAAU4pE,eAAiB,WACtC,IAAI1kE,EAAO,GAEX,GAAI3E,KAAK4K,OAAOygB,MAAO,CACtB,GAAIrrB,KAAK4K,OAAOygB,QAAU,MAAQrrB,KAAK4K,OAAOygB,MAAM7N,QAAS,CAC5D7Y,EAAK6Y,QAAUxd,KAAKuC,MAAMkB,QAAQ+Z,OACrC,CAEE,GAAIxd,KAAK4K,OAAOygB,QAAU,MAAQrrB,KAAK4K,OAAOygB,MAAMmS,eAAgB,CACnE74B,EAAK64B,eAAiBx9B,KAAKuC,MAAMkB,QAAQ+5B,cAC5C,CAEE,GAAIx9B,KAAK4K,OAAOygB,QAAU,MAAQrrB,KAAK4K,OAAOygB,MAAMqS,YAAa,CAChE/4B,EAAK+4B,YAAc19B,KAAKuC,MAAMkB,QAAQi6B,WACzC,CACA,CAEC,OAAO/4B,CACR,EAEAsjE,EAAYxoE,UAAU6pE,cAAgB,WACrC,IAAI3kE,EAAO,GAEX,GAAI3E,KAAK4K,OAAOkX,KAAM,CACrB,GAAI9hB,KAAK4K,OAAOkX,OAAS,MAAQ9hB,KAAK4K,OAAOkX,KAAKinB,KAAM,CACvDpkC,EAAK23B,eAAiBt8B,KAAKuC,MAAMiC,QAAQsd,KAAKC,aACjD,CAEE,GAAI/hB,KAAK4K,OAAOkX,OAAS,MAAQ9hB,KAAK4K,OAAOkX,KAAKA,KAAM,CACvDnd,EAAK43B,sBAAwBv8B,KAAKuC,MAAMiC,QAAQsd,KAAKmnB,SACxD,CACA,CAEC,OAAOtkC,CACR,EAGAsjE,EAAYxoE,UAAUmnC,aAAe,SAAU9jC,GAC9C,IAAI6C,EAAO3F,KACP6E,EAAc,GACd0kE,EAAe,CAAC,oBAAqB,aAAc,cAAe,aAEtEzmE,EAAQ0C,SAAQ,SAAUiB,GACzB,IAAI+iE,EAAW,GACXC,EAAShjE,EAAO+C,gBAChBb,EAEJ,GAAIlC,EAAO8D,QAAS,CACnBi/D,EAASpkE,MAAQqkE,EAAOrkE,MACxBokE,EAAS1mE,QAAU6C,EAAKihC,aAAangC,EAAOwC,aAC/C,KAAS,CACNugE,EAASrkE,MAAQsB,EAAO+G,WAExB,GAAI7H,EAAKiF,OAAO9H,UAAY,MAAQ6C,EAAKiF,OAAO9H,SAAWnC,UAAW,CACrEgI,EAAO/I,OAAO+I,KAAK8gE,GACnB9gE,EAAKpD,KAAK,QACd,KAAU,CACNoD,EAAOhD,EAAKiF,OAAO9H,OACvB,CAEG6F,EAAKnD,SAAQ,SAAUP,GAEtB,OAAQA,GACP,IAAK,QACJukE,EAAS1/D,MAAQrD,EAAOoD,WACxB,MACD,IAAK,UACJ2/D,EAASxgE,QAAUvC,EAAOuC,QAC1B,MAED,QACC,UAAWygE,EAAOxkE,KAAS,YAAcskE,EAAatoE,QAAQgE,MAAU,EAAG,CAC1EukE,EAASvkE,GAAOwkE,EAAOxkE,EAC9B,EAEA,GACA,CAEEJ,EAAYU,KAAKikE,EACnB,IAEC,OAAO3kE,CACR,EAGAojE,EAAYxoE,UAAUkpE,QAAU,CAC/Be,MAAO,SAASA,EAAMxB,EAAIj6D,GACzB,IAAItJ,EAAO6jE,aAAamB,QAAQzB,EAAK,IAAMj6D,GAE3C,OAAOtJ,EAAOusB,KAAKC,MAAMxsB,GAAQ,KACnC,EACCilE,OAAQ,SAASA,EAAO1B,EAAIj6D,GAC3B,IAAI27D,EAASvmE,SAASumE,OAClB3kE,EAAMijE,EAAK,IAAMj6D,EACjB47D,EAAYD,EAAO3oE,QAAQgE,EAAM,KACjC8d,EACApe,EAGJ,GAAIklE,GAAa,EAAG,CACnBD,EAASA,EAAOrmC,OAAOsmC,GAEvB9mD,EAAM6mD,EAAO3oE,QAAQ,KAErB,GAAI8hB,GAAO,EAAG,CACb6mD,EAASA,EAAOrmC,OAAO,EAAGxgB,EAC9B,CAEGpe,EAAOilE,EAAOzvB,QAAQl1C,EAAM,IAAK,GACpC,CAEE,OAAON,EAAOusB,KAAKC,MAAMxsB,GAAQ,KACnC,GAIAsjE,EAAYxoE,UAAUmpE,QAAU,CAC/Bc,MAAO,SAASA,EAAMxB,EAAIj6D,EAAMtJ,GAC/B6jE,aAAaviB,QAAQiiB,EAAK,IAAMj6D,EAAMijB,KAAK2jB,UAAUlwC,GACvD,EACCilE,OAAQ,SAASA,EAAO1B,EAAIj6D,EAAMtJ,GACjC,IAAImlE,EAAa,IAAI79B,KAErB69B,EAAWC,QAAQD,EAAWE,UAAY,KAE1C3mE,SAASumE,OAAS1B,EAAK,IAAMj6D,EAAO,IAAMijB,KAAK2jB,UAAUlwC,GAAQ,aAAemlE,EAAWG,aAC7F,GAGAv8D,EAAUjO,UAAU6rC,eAAe,cAAe28B,GAElD,IAAIiC,EAAQ,SAASA,EAAM3nE,GAC1BvC,KAAKuC,MAAQA,EACbvC,KAAK2C,QAAU,MACf3C,KAAKmqE,YAAc,KACpB,EAEAD,EAAMzqE,UAAUkE,WAAa,WAC5B+mB,OAAO/V,iBAAiB,cAAe3U,KAAKoqE,aAAax2D,KAAK5T,OAC9D0qB,OAAO/V,iBAAiB,aAAc3U,KAAKqqE,QAAQz2D,KAAK5T,MACzD,EAEAkqE,EAAMzqE,UAAU2qE,aAAe,WAC9B,IAAKpqE,KAAKmqE,YAAa,CACtBnqE,KAAK2C,QAAUU,SAASC,cAAc,OACtCtD,KAAK2C,QAAQY,UAAUC,IAAI,yBAE3BxD,KAAK2C,QAAQyE,YAAYpH,KAAKuC,MAAMiC,QAAQsgC,OAAO2mB,eAAezrD,KAAKuC,MAAMkB,QAAQ43B,YAAar7B,KAAKuC,MAAMkB,QAAQy3B,YAAal7B,KAAKuC,MAAMkB,QAAQ23B,cAAe,UAEpKp7B,KAAKuC,MAAMI,QAAQ0B,MAAMoV,QAAU,OAEnCzZ,KAAKuC,MAAMI,QAAQsE,WAAW/D,aAAalD,KAAK2C,QAAS3C,KAAKuC,MAAMI,QACtE,CACA,EAEAunE,EAAMzqE,UAAU4qE,QAAU,WACzBhnE,SAASkyB,KAAKhyB,UAAUmkB,OAAO,mCAE/B,GAAI1nB,KAAK2C,SAAW3C,KAAK2C,QAAQsE,WAAY,CAC5CjH,KAAK2C,QAAQsE,WAAWrB,YAAY5F,KAAK2C,SACzC3C,KAAKuC,MAAMI,QAAQ0B,MAAMoV,QAAU,EACrC,CACA,EAEAywD,EAAMzqE,UAAUslC,gBAAkB,SAAU/7B,EAAS3E,EAAOuG,GAC3D,IAAI0/D,EAAU5/C,OAAO4/C,QACjBC,EAAU7/C,OAAO6/C,QACjBxd,EAAW1pD,SAASC,cAAc,OAClCknE,EAAWnnE,SAASC,cAAc,OAClCmnE,EAAUzqE,KAAKuC,MAAMiC,QAAQsgC,OAAO2mB,sBAAsB7gD,GAAU,YAAcA,EAAS5K,KAAKuC,MAAMkB,QAAQ43B,mBAAoBh3B,GAAS,YAAcA,EAAQrE,KAAKuC,MAAMkB,QAAQy3B,YAAalyB,EAAS,SAC1MsxD,EACAoQ,EAEJ1qE,KAAKmqE,YAAc,KAEnBnqE,KAAK2C,QAAUU,SAASC,cAAc,OACtCtD,KAAK2C,QAAQY,UAAUC,IAAI,8BAE3B,GAAIxD,KAAKuC,MAAMkB,QAAQs3B,YAAa,CACnCgyB,EAASxpD,UAAUC,IAAI,0BAEvB82D,SAAuBt6D,KAAKuC,MAAMkB,QAAQs3B,aAAe,WAAa/6B,KAAKuC,MAAMkB,QAAQs3B,YAAYt6B,KAAKT,KAAKuC,OAASvC,KAAKuC,MAAMkB,QAAQs3B,YAE3I,UAAWu/B,GAAiB,SAAU,CACrCvN,EAASz0C,UAAYgiD,CACxB,KAAS,CACNvN,EAAS3lD,YAAYkzD,EACxB,CAEEt6D,KAAK2C,QAAQyE,YAAY2lD,EAC3B,CAEC/sD,KAAK2C,QAAQyE,YAAYqjE,GAEzB,GAAIzqE,KAAKuC,MAAMkB,QAAQu3B,YAAa,CACnCwvC,EAASjnE,UAAUC,IAAI,0BAEvBknE,SAAuB1qE,KAAKuC,MAAMkB,QAAQu3B,aAAe,WAAah7B,KAAKuC,MAAMkB,QAAQu3B,YAAYv6B,KAAKT,KAAKuC,OAASvC,KAAKuC,MAAMkB,QAAQu3B,YAE3I,UAAW0vC,GAAiB,SAAU,CACrCF,EAASlyD,UAAYoyD,CACxB,KAAS,CACNF,EAASpjE,YAAYsjE,EACxB,CAEE1qE,KAAK2C,QAAQyE,YAAYojE,EAC3B,CAECnnE,SAASkyB,KAAKhyB,UAAUC,IAAI,mCAC5BH,SAASkyB,KAAKnuB,YAAYpH,KAAK2C,SAE/B,GAAI3C,KAAKuC,MAAMkB,QAAQq3B,eAAgB,CACtC96B,KAAKuC,MAAMkB,QAAQq3B,eAAe96B,KAAK2C,QAAS8nE,EAClD,CAEC//C,OAAOkY,QAEP5iC,KAAKqqE,UAEL3/C,OAAO/b,SAAS27D,EAASC,GAEzBvqE,KAAKmqE,YAAc,KACpB,EAEAz8D,EAAUjO,UAAU6rC,eAAe,QAAS4+B,GAC5C,IAAIS,GAAe,SAASA,EAAapoE,GACxCvC,KAAKuC,MAAQA,EACbvC,KAAK2E,KAAO,MACZ3E,KAAKy4C,QAAU,MACfz4C,KAAK4qE,UAAY,GACjB5qE,KAAK6qE,eAAiB,CACvB,EAEAF,GAAalrE,UAAUwgB,UAAY,SAAUtb,GACzC,IAACgB,EAAO3F,KAEP8qE,EAEJ9qE,KAAK6qE,iBAELC,EAAU9qE,KAAK6qE,eAEfllE,EAAKo9B,cAELp9B,EAAKhB,KAAOA,EAGZgB,EAAKilE,UAAUrlE,KAAOZ,EAAKY,KAE3B3F,OAAOC,eAAe8F,EAAKhB,KAAM,OAAQ,CACxComE,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIkrE,EAAOtrE,MAAMsK,KAAK1J,WAEtB,IAAKqF,EAAK8yC,SAAWqyB,IAAYnlE,EAAKklE,eAAgB,CACrDG,EAAKxlE,SAAQ,SAAUylE,GACtBtlE,EAAKpD,MAAMM,WAAWue,aAAa6pD,EAAK,MAC7C,GACA,CAEG,OAAOtlE,EAAKilE,UAAUrlE,KAAK2lE,MAAMvmE,EAAMrE,UAC1C,IAICqF,EAAKilE,UAAUzjE,QAAUxC,EAAKwC,QAE9BvH,OAAOC,eAAe8F,EAAKhB,KAAM,UAAW,CAC3ComE,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIkrE,EAAOtrE,MAAMsK,KAAK1J,WAEtB,IAAKqF,EAAK8yC,SAAWqyB,IAAYnlE,EAAKklE,eAAgB,CACrDG,EAAKxlE,SAAQ,SAAUylE,GACtBtlE,EAAKpD,MAAMM,WAAWue,aAAa6pD,EAAK,KAC7C,GACA,CAEG,OAAOtlE,EAAKilE,UAAUzjE,QAAQ+jE,MAAMvmE,EAAMrE,UAC7C,IAICqF,EAAKilE,UAAU1wB,MAAQv1C,EAAKu1C,MAE5Bt6C,OAAOC,eAAe8F,EAAKhB,KAAM,QAAS,CACzComE,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIiF,EAEJ,IAAKY,EAAK8yC,SAAWqyB,IAAYnlE,EAAKklE,eAAgB,CACrD,GAAIllE,EAAKhB,KAAKvE,OAAQ,CACrB2E,EAAMY,EAAKpD,MAAMM,WAAWwb,qBAAqB1Y,EAAKhB,KAAK,IAE3D,GAAII,EAAK,CACRA,EAAIutB,cACV,CACA,CACA,CAEG,OAAO3sB,EAAKilE,UAAU1wB,MAAMz5C,KAAKkE,EACpC,IAICgB,EAAKilE,UAAUxK,IAAMz7D,EAAKy7D,IAE1BxgE,OAAOC,eAAe8F,EAAKhB,KAAM,MAAO,CACvComE,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIiF,EACJ,IAAKY,EAAK8yC,SAAWqyB,IAAYnlE,EAAKklE,eAAgB,CACrD,GAAIllE,EAAKhB,KAAKvE,OAAQ,CACrB2E,EAAMY,EAAKpD,MAAMM,WAAWwb,qBAAqB1Y,EAAKhB,KAAKgB,EAAKhB,KAAKvE,OAAS,IAE9E,GAAI2E,EAAK,CACRA,EAAIutB,cACV,CACA,CACA,CACG,OAAO3sB,EAAKilE,UAAUxK,IAAI3/D,KAAKkE,EAClC,IAICgB,EAAKilE,UAAU5jE,OAASrC,EAAKqC,OAE7BpH,OAAOC,eAAe8F,EAAKhB,KAAM,SAAU,CAC1ComE,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIkrE,EAAOtrE,MAAMsK,KAAK1J,WAClBS,EAAQiqE,EAAK,GAAK,EAAIrmE,EAAKvE,OAAS4qE,EAAK,GAAKA,EAAK,GACnDjoD,EAAMioD,EAAK,GACXxlC,EAAUwlC,EAAK,GAAKA,EAAK3lD,MAAM,GAAK,MACpC8lD,EAEJ,IAAKxlE,EAAK8yC,SAAWqyB,IAAYnlE,EAAKklE,eAAgB,CAGrD,GAAIrlC,EAAS,CACZ2lC,EAAWxmE,EAAK5D,GAAS4E,EAAKpD,MAAMM,WAAWwb,qBAAqB1Z,EAAK5D,IAAU,MAEnF,GAAIoqE,EAAU,CACb3lC,EAAQhgC,SAAQ,SAAUgxC,GACzB7wC,EAAKpD,MAAMM,WAAWue,aAAao1B,EAAS,KAAM20B,EAAU,KACnE,GACA,KAAY,CACN3lC,EAAUA,EAAQngB,QAAQ5D,UAE1B+jB,EAAQhgC,SAAQ,SAAUgxC,GACzB7wC,EAAKpD,MAAMM,WAAWue,aAAao1B,EAAS,KAAM,MAAO,KAChE,GACA,CACA,CAGI,GAAIzzB,IAAQ,EAAG,CACd,IAAIqoD,EAAUzmE,EAAK0gB,MAAMtkB,SAAciqE,EAAK,KAAO,YAAcA,EAAK,GAAKjqE,EAAQgiB,GAEnFqoD,EAAQ5lE,SAAQ,SAAUgxC,EAAS1wC,GAClC,IAAIf,EAAMY,EAAKpD,MAAMM,WAAWwb,qBAAqBm4B,GAErD,GAAIzxC,EAAK,CACRA,EAAIutB,aAAaxsB,IAAMslE,EAAQhrE,OAAS,EAC/C,CACA,GACA,CAEI,GAAIolC,GAAWziB,IAAQ,EAAG,CACzBpd,EAAKpD,MAAMM,WAAW2c,oBAC3B,CACA,CAEG,OAAO7Z,EAAKilE,UAAU5jE,OAAOkkE,MAAMvmE,EAAMrE,UAC5C,GAEA,EAEAqqE,GAAalrE,UAAUsjC,YAAc,WACpC,GAAI/iC,KAAK2E,OAAS,MAAO,CACxB,IAAK,IAAIM,KAAOjF,KAAK4qE,UAAW,CAC/BhrE,OAAOC,eAAeG,KAAK2E,KAAMM,EAAK,CACrC8lE,WAAY,KACZ1oE,aAAc,KACdD,SAAU,KACVtC,MAAOE,KAAK4qE,UAAU3lE,KAE1B,CACA,CACA,EAEA0lE,GAAalrE,UAAUoxB,SAAW,SAAU9rB,GAC3C,IAAIJ,EAAOI,EAAIic,UAEfhhB,KAAKy4C,QAAU,KAEf,IAAK,IAAIxzC,KAAON,EAAM,CACrB3E,KAAKqrE,SAAStmE,EAAKJ,EAAMM,EAC3B,CAEC,GAAIjF,KAAKuC,MAAMkB,QAAQyH,SAAU,CAChClL,KAAKsrE,kBAAkBvmE,EACzB,CAEC/E,KAAKy4C,QAAU,KAChB,EAEAkyB,GAAalrE,UAAU6rE,kBAAoB,SAAUvmE,GACpD,IAAIY,EAAO3F,KACPurE,EAAaxmE,EAAIic,UAAUhhB,KAAKuC,MAAMkB,QAAQ42B,oBAC9CuwC,EAAY,GAEhB,SAASY,IACR7lE,EAAKpD,MAAMiC,QAAQ0G,SAAS6hB,cAAchoB,GAC1CY,EAAKpD,MAAMiC,QAAQ0G,SAASklB,UAAUrrB,GACtCY,EAAKpD,MAAMM,WAAWqd,kBAAkB,OAAQ,MAAO,KACzD,CAEC,GAAIqrD,EAAY,CAEfX,EAAUrlE,KAAOgmE,EAAWhmE,KAE5B3F,OAAOC,eAAe0rE,EAAY,OAAQ,CACzCR,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIgQ,EAAS86D,EAAUrlE,KAAK2lE,MAAMK,EAAYjrE,WAE9CkrE,IAEA,OAAO17D,CACX,IAGE86D,EAAUzjE,QAAUokE,EAAWpkE,QAE/BvH,OAAOC,eAAe0rE,EAAY,UAAW,CAC5CR,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIgQ,EAAS86D,EAAUzjE,QAAQ+jE,MAAMK,EAAYjrE,WAEjDkrE,IAEA,OAAO17D,CACX,IAGE86D,EAAU1wB,MAAQqxB,EAAWrxB,MAE7Bt6C,OAAOC,eAAe0rE,EAAY,QAAS,CAC1CR,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIgQ,EAAS86D,EAAU1wB,MAAMz5C,KAAK8qE,GAElCC,IAEA,OAAO17D,CACX,IAGE86D,EAAUxK,IAAMmL,EAAWnL,IAE3BxgE,OAAOC,eAAe0rE,EAAY,MAAO,CACxCR,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIgQ,EAAS86D,EAAUxK,IAAI3/D,KAAK8qE,GAEhCC,IAEA,OAAO17D,CACX,IAGE86D,EAAU5jE,OAASukE,EAAWvkE,OAE9BpH,OAAOC,eAAe0rE,EAAY,SAAU,CAC3CR,WAAY,MACZ1oE,aAAc,KACdvC,MAAO,SAASA,IACf,IAAIgQ,EAAS86D,EAAU5jE,OAAOkkE,MAAMK,EAAYjrE,WAEhDkrE,IAEA,OAAO17D,CACX,GAEA,CACA,EAEA66D,GAAalrE,UAAU4rE,SAAW,SAAUtmE,EAAKJ,EAAMM,GACtD,IAAIU,EAAO3F,KACPyuD,EAAQ7uD,OAAOkpE,yBAAyBnkE,EAAMM,GAC9CnF,EAAQ6E,EAAKM,GACb6lE,EAAU9qE,KAAK6qE,eAEnBjrE,OAAOC,eAAe8E,EAAMM,EAAK,CAChC8jE,IAAK,SAASA,EAAI3yC,GACjBt2B,EAAQs2B,EACR,IAAKzwB,EAAK8yC,SAAWqyB,IAAYnlE,EAAKklE,eAAgB,CACrD,IAAI/8D,EAAS,GACbA,EAAO7I,GAAOmxB,EACdrxB,EAAIwoB,WAAWzf,EACnB,CAEG,GAAI2gD,EAAMsa,IAAK,CACdta,EAAMsa,IAAI3yC,EACd,CACA,EACE4yC,IAAK,SAASA,IAEb,GAAIva,EAAMua,IAAK,CACdva,EAAMua,KACV,CAEG,OAAOlpE,CACV,GAEA,EAEA6qE,GAAalrE,UAAUgsE,WAAa,SAAU1mE,GAC7C,IAAIJ,EAAOI,EAAIic,UAEf,IAAK,IAAI/b,KAAON,EAAM,CACrB/E,OAAOC,eAAe8E,EAAMM,EAAK,CAChCnF,MAAO6E,EAAKM,IAEf,CACA,EAEA0lE,GAAalrE,UAAU2xB,MAAQ,WAC9BpxB,KAAKy4C,QAAU,IAChB,EAEAkyB,GAAalrE,UAAU6xB,QAAU,WAChCtxB,KAAKy4C,QAAU,KAChB,EAEA/qC,EAAUjO,UAAU6rC,eAAe,eAAgBq/B,IAEnD,IAAIe,GAAgB,SAASA,EAAcnpE,GAC1CvC,KAAKuC,MAAQA,EACbvC,KAAK2rE,YAAc,MACnB3rE,KAAKshE,OAAS,MACdthE,KAAK4rE,WAAa,MAClB5rE,KAAK+pD,OAAS,KACd/pD,KAAK6rE,WAAa,IACnB,EAEAH,GAAcjsE,UAAU2U,iBAAmB,SAAUnG,EAAMxH,EAAQ9D,GAClE,IAAIgD,EAAO3F,KACP4hD,EAAiB,MACjBlV,EAAO1sC,KAAKuC,MAAMkB,QAAQyQ,iBAG9B,GAAIjG,IAAS,SAAU,CACtB2zC,EAAiBn7C,EAAOH,WAAWsR,WAAa,YAAcnR,EAAOH,WAAWs7C,eAChFn7C,EAAOjC,QAAQ2/C,OAAS,CAAEvC,eAAgBA,EAC5C,CAEC,GAAIlV,IAAS,MAAQA,GAAQz+B,EAAM,CAElC,IAAI87C,EAAS1mD,SAASC,cAAc,OACpCymD,EAAOpzC,UAAY,8BAEnB,IAAIk1D,EAAaxoE,SAASC,cAAc,OACxCuoE,EAAWl1D,UAAY,mCAEvBozC,EAAOp1C,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,iBACL,IAEE,IAAIw0D,EAAa,SAASA,EAAWl3D,GACpC,IAAIm3D,EAAgBtlE,EAAO0S,gBAE3B,GAAI4yD,GAAiBpmE,EAAKqmE,mBAAmBD,GAAgB,CAC5DpmE,EAAKgmE,YAAcllE,EACnBd,EAAKsmE,WAAWr3D,EAAGm3D,EAAehiB,EACtC,CACA,EAEEA,EAAOp1C,iBAAiB,YAAam3D,GACrC/hB,EAAOp1C,iBAAiB,aAAcm3D,EAAY,CAAE12D,QAAS,OAG7D20C,EAAOp1C,iBAAiB,YAAY,SAAUC,GAC7C,IAAI1P,EAAMuB,EAAO0S,gBAEjB,GAAIjU,GAAOS,EAAKqmE,mBAAmB9mE,GAAM,CACxC0P,EAAE0C,kBACFpS,EAAIoI,kBAAkB,KAC1B,CACA,IAEEu+D,EAAWl3D,iBAAiB,SAAS,SAAUC,GAC9CA,EAAE0C,iBACL,IAEE,IAAI40D,EAAiB,SAASA,EAAet3D,GAC5C,IAAIm3D,EAAeI,EAAUz8D,EAE7Bq8D,EAAgBtlE,EAAOyS,iBAEvB,GAAI6yD,EAAe,CAClBI,EAAWxmE,EAAKpD,MAAMmI,cAAc9D,gBAAgBmlE,GACpDr8D,EAAay8D,EAAW,EAAIxmE,EAAKpD,MAAMmI,cAAc5B,iBAAiBqjE,EAAW,GAAK,MAEtF,GAAIz8D,GAAc/J,EAAKqmE,mBAAmBt8D,GAAa,CACtD/J,EAAKgmE,YAAcllE,EACnBd,EAAKsmE,WAAWr3D,EAAGlF,EAAYm8D,EACpC,CACA,CACA,EAEEA,EAAWl3D,iBAAiB,YAAau3D,GACzCL,EAAWl3D,iBAAiB,aAAcu3D,EAAgB,CAAE92D,QAAS,OAGrEy2D,EAAWl3D,iBAAiB,YAAY,SAAUC,GACjD,IAAIm3D,EAAeI,EAAUz8D,EAE7Bq8D,EAAgBtlE,EAAOyS,iBAEvB,GAAI6yD,EAAe,CAClBI,EAAWxmE,EAAKpD,MAAMmI,cAAc9D,gBAAgBmlE,GACpDr8D,EAAay8D,EAAW,EAAIxmE,EAAKpD,MAAMmI,cAAc5B,iBAAiBqjE,EAAW,GAAK,MAEtF,GAAIz8D,GAAc/J,EAAKqmE,mBAAmBt8D,GAAa,CACtDkF,EAAE0C,kBACF5H,EAAWpC,kBAAkB,KAClC,CACA,CACA,IAEE3K,EAAQyE,YAAY2iD,GACpBpnD,EAAQyE,YAAYykE,EACtB,CACA,EAEAH,GAAcjsE,UAAUusE,mBAAqB,SAAUvlE,GACtD,cAAcA,EAAOH,WAAW8lE,WAAa,YAAc3lE,EAAOH,WAAW8lE,UAAYpsE,KAAKuC,MAAMkB,QAAQyQ,gBAC7G,EAEAw3D,GAAcjsE,UAAUwsE,WAAa,SAAUr3D,EAAGnO,EAAQsjD,GACzD,IAAIpkD,EAAO3F,KAEX2F,EAAKpD,MAAMI,QAAQY,UAAUC,IAAI,0BAEjC,SAAS6oE,EAAUz3D,GAGlB,GAAIjP,EAAKpD,MAAMuoB,IAAK,CACnBrkB,EAAOoJ,SAASlK,EAAKimE,oBAAsBh3D,EAAE21C,UAAY,YAAc31C,EAAE6rD,QAAQ,GAAGlW,QAAU31C,EAAE21C,SAAW5kD,EAAK27D,QACnH,KAAS,CACN76D,EAAOoJ,SAASlK,EAAKimE,oBAAsBh3D,EAAE21C,UAAY,YAAc31C,EAAE6rD,QAAQ,GAAGlW,QAAU31C,EAAE21C,SAAW5kD,EAAK27D,QACnH,CAEE,GAAI37D,EAAKpD,MAAMkB,QAAQyC,cAAe,CACrCP,EAAKpD,MAAM4D,QAAQC,aAAa,KACnC,CAEE,IAAKT,EAAKpD,MAAMq1B,aAAenxB,EAAOjC,QAAQ2/C,QAAU19C,EAAOjC,QAAQ2/C,OAAOvC,eAAgB,CAC7Fn7C,EAAOuT,kBACV,CACA,CAEC,SAASsyD,EAAQ13D,GAGhB,GAAIjP,EAAKgmE,YAAYnnE,QAAQ6R,KAAM,CAClC1Q,EAAKgmE,YAAYnnE,QAAQ6R,KAAKoiC,QAAU,KAC3C,CAEE,GAAI9yC,EAAKpD,MAAMq1B,aAAenxB,EAAOjC,QAAQ2/C,QAAU19C,EAAOjC,QAAQ2/C,OAAOvC,eAAgB,CAC5Fn7C,EAAOuT,kBACV,CAEE3W,SAASkyB,KAAKmvB,oBAAoB,UAAW4nB,GAC7CjpE,SAASkyB,KAAKmvB,oBAAoB,YAAa2nB,GAE/CtiB,EAAOrF,oBAAoB,YAAa2nB,GACxCtiB,EAAOrF,oBAAoB,WAAY4nB,GAEvC3mE,EAAKpD,MAAMI,QAAQY,UAAUmkB,OAAO,0BAEpC,GAAI/hB,EAAKpD,MAAMkB,QAAQkH,aAAehF,EAAKpD,MAAMgC,UAAU,cAAe,OAASoB,EAAKpD,MAAMiC,QAAQmG,YAAYC,OAAO9H,QAAS,CACjI6C,EAAKpD,MAAMiC,QAAQmG,YAAYE,KAAK,UACvC,CAEElF,EAAKpD,MAAMkB,QAAQ67B,cAAc7+B,KAAKkF,EAAKpD,MAAOkE,EAAOmD,eAC3D,CAECgL,EAAE0C,kBAGF,GAAI3R,EAAKgmE,YAAYnnE,QAAQ6R,KAAM,CAClC1Q,EAAKgmE,YAAYnnE,QAAQ6R,KAAKoiC,QAAU,IAC1C,CAEC9yC,EAAK27D,cAAgB1sD,EAAE21C,UAAY,YAAc31C,EAAE6rD,QAAQ,GAAGlW,QAAU31C,EAAE21C,QAC1E5kD,EAAKimE,WAAanlE,EAAOoD,WAEzBxG,SAASkyB,KAAK5gB,iBAAiB,YAAa03D,GAC5ChpE,SAASkyB,KAAK5gB,iBAAiB,UAAW23D,GAC1CviB,EAAOp1C,iBAAiB,YAAa03D,EAAW,CAAEj3D,QAAS,OAC3D20C,EAAOp1C,iBAAiB,WAAY23D,EACrC,EAEA5+D,EAAUjO,UAAU6rC,eAAe,gBAAiBogC,IACpD,IAAIa,GAAa,SAASA,EAAWhqE,GACpCvC,KAAKuC,MAAQA,EACbvC,KAAK2rE,YAAc,MACnB3rE,KAAK+iE,OAAS,MACd/iE,KAAKwsE,YAAc,MACnBxsE,KAAK+pD,OAAS,KACd/pD,KAAK6rE,WAAa,IACnB,EAEAU,GAAW9sE,UAAUstB,cAAgB,SAAUhoB,GAC9C,IAAIY,EAAO3F,KACP2e,EAAQ5Z,EAAIjB,aAEhB,IAAIimD,EAAS1mD,SAASC,cAAc,OACpCymD,EAAOpzC,UAAY,8BAEnB,IAAIk1D,EAAaxoE,SAASC,cAAc,OACxCuoE,EAAWl1D,UAAY,mCAEvBozC,EAAOp1C,iBAAiB,SAAS,SAAUC,GAC1CA,EAAE0C,iBACJ,IAEC,IAAIw0D,EAAa,SAASA,EAAWl3D,GACpCjP,EAAKwlE,SAAWpmE,EAChBY,EAAKsmE,WAAWr3D,EAAG7P,EAAKglD,EAC1B,EAECA,EAAOp1C,iBAAiB,YAAam3D,GACrC/hB,EAAOp1C,iBAAiB,aAAcm3D,EAAY,CAAE12D,QAAS,OAE7Dy2D,EAAWl3D,iBAAiB,SAAS,SAAUC,GAC9CA,EAAE0C,iBACJ,IAEC,IAAI40D,EAAiB,SAASA,EAAet3D,GAC5C,IAAI6O,EAAU9d,EAAKpD,MAAMM,WAAW6f,eAAe3d,GAEnD,GAAI0e,EAAS,CACZ9d,EAAKwlE,SAAW1nD,EAChB9d,EAAKsmE,WAAWr3D,EAAG6O,EAASooD,EAC/B,CACA,EAECA,EAAWl3D,iBAAiB,YAAau3D,GACzCL,EAAWl3D,iBAAiB,aAAcu3D,EAAgB,CAAE92D,QAAS,OAErEuJ,EAAMvX,YAAY2iD,GAClBprC,EAAMvX,YAAYykE,EACnB,EAEAU,GAAW9sE,UAAUwsE,WAAa,SAAUr3D,EAAG7P,EAAKglD,GACnD,IAAIpkD,EAAO3F,KAEX2F,EAAKpD,MAAMI,QAAQY,UAAUC,IAAI,0BAEjC,SAAS6oE,EAAUz3D,GAClB7P,EAAI2rB,UAAU/qB,EAAK6mE,qBAAuB53D,EAAE63D,UAAY,YAAc73D,EAAE6rD,QAAQ,GAAGgM,QAAU73D,EAAE63D,SAAW9mE,EAAKo9D,QACjH,CAEC,SAASuJ,EAAQ13D,GAOhBvR,SAASkyB,KAAKmvB,oBAAoB,UAAW2nB,GAC7ChpE,SAASkyB,KAAKmvB,oBAAoB,YAAa2nB,GAE/CtiB,EAAOrF,oBAAoB,YAAa2nB,GACxCtiB,EAAOrF,oBAAoB,WAAY4nB,GAEvC3mE,EAAKpD,MAAMI,QAAQY,UAAUmkB,OAAO,0BAEpC/hB,EAAKpD,MAAMkB,QAAQ47B,WAAW5+B,KAAKT,KAAKuC,MAAOwC,EAAI6E,eACrD,CAECgL,EAAE0C,kBAOF3R,EAAKo9D,cAAgBnuD,EAAE63D,UAAY,YAAc73D,EAAE6rD,QAAQ,GAAGgM,QAAU73D,EAAE63D,QAC1E9mE,EAAK6mE,YAAcznE,EAAI8C,YAEvBxE,SAASkyB,KAAK5gB,iBAAiB,YAAa03D,GAC5ChpE,SAASkyB,KAAK5gB,iBAAiB,UAAW23D,GAE1CviB,EAAOp1C,iBAAiB,YAAa03D,EAAW,CAAEj3D,QAAS,OAC3D20C,EAAOp1C,iBAAiB,WAAY23D,EACrC,EAEA5+D,EAAUjO,UAAU6rC,eAAe,aAAcihC,IACjD,IAAIG,GAAc,SAASA,EAAYnqE,GACtCvC,KAAKuC,MAAQA,EACbvC,KAAKmwC,QAAU,MACfnwC,KAAK2sE,SAAW,MAChB3sE,KAAK4sE,kBAAoB,MAEzB5sE,KAAK6sE,YAAc,EACnB7sE,KAAK0pB,WAAa,EAClB1pB,KAAK8sE,gBAAkB,EACvB9sE,KAAK+sE,eAAiB,EAEtB/sE,KAAKwpB,WAAa,KACnB,EAEAkjD,GAAYjtE,UAAUkE,WAAa,SAAUoB,GAC5C,IAAIioE,EAAUhtE,KAEd,IAAIuC,EAAQvC,KAAKuC,MACb0qE,EAEJjtE,KAAK6sE,YAActqE,EAAMI,QAAQkK,aACjC7M,KAAK0pB,WAAannB,EAAMI,QAAQyB,YAEhC,GAAI7B,EAAMI,QAAQsE,WAAY,CAC7BjH,KAAK8sE,gBAAkBvqE,EAAMI,QAAQsE,WAAW4F,aAChD7M,KAAK+sE,eAAiBxqE,EAAMI,QAAQsE,WAAW7C,WACjD,CAEC,UAAW8oE,iBAAmB,aAAe3qE,EAAMM,WAAW+jB,kBAAoB,UAAW,CAE5F5mB,KAAKwpB,WAAa,KAElBxpB,KAAK2sE,SAAW,IAAIO,gBAAe,SAAUC,GAC5C,IAAK5qE,EAAMs1B,eAAiBt1B,EAAMs1B,gBAAkBt1B,EAAMiC,QAAQ6R,KAAKkE,YAAa,CAEnF,IAAI6yD,EAAa/rE,KAAK0Y,MAAMozD,EAAM,GAAGE,YAAY1lE,QACjD,IAAI2lE,EAAYjsE,KAAK0Y,MAAMozD,EAAM,GAAGE,YAAYvjE,OAEhD,GAAIkjE,EAAQH,aAAeO,GAAcJ,EAAQtjD,YAAc4jD,EAAW,CACzEN,EAAQH,YAAcO,EACtBJ,EAAQtjD,WAAa4jD,EAErB,GAAI/qE,EAAMI,QAAQsE,WAAY,CAC7B+lE,EAAQF,gBAAkBvqE,EAAMI,QAAQsE,WAAW4F,aACnDmgE,EAAQD,eAAiBxqE,EAAMI,QAAQsE,WAAW7C,WACxD,CAEK,GAAI7B,EAAMkB,QAAQyC,cAAe,CAChC3D,EAAM4D,QAAQC,aAAa,KACjC,CAEK7D,EAAM8D,QACX,CACA,CACA,IAEErG,KAAK2sE,SAASY,QAAQhrE,EAAMI,SAE5BsqE,EAAaviD,OAAO2W,iBAAiB9+B,EAAMI,SAE3C,GAAI3C,KAAKuC,MAAMI,QAAQsE,aAAejH,KAAKuC,MAAMM,WAAWkZ,cAAgBkxD,EAAW7xB,iBAAiB,eAAiB6xB,EAAW7xB,iBAAiB,eAAgB,CAEpKp7C,KAAK4sE,kBAAoB,IAAIM,gBAAe,SAAUC,GACrD,IAAK5qE,EAAMs1B,eAAiBt1B,EAAMs1B,gBAAkBt1B,EAAMiC,QAAQ6R,KAAKkE,YAAa,CAEnF,IAAI6yD,EAAa/rE,KAAK0Y,MAAMozD,EAAM,GAAGE,YAAY1lE,QACjD,IAAI2lE,EAAYjsE,KAAK0Y,MAAMozD,EAAM,GAAGE,YAAYvjE,OAEhD,GAAIkjE,EAAQF,iBAAmBM,GAAcJ,EAAQD,gBAAkBO,EAAW,CACjFN,EAAQF,gBAAkBM,EAC1BJ,EAAQD,eAAiBO,EACzBN,EAAQH,YAActqE,EAAMI,QAAQkK,aACpCmgE,EAAQtjD,WAAannB,EAAMI,QAAQyB,WACzC,CAEK,GAAI7B,EAAMkB,QAAQyC,cAAe,CAChC3D,EAAM4D,QAAQC,aAAa,KACjC,CAEK7D,EAAM8D,QACX,CACA,IAEGrG,KAAK4sE,kBAAkBW,QAAQvtE,KAAKuC,MAAMI,QAAQsE,WACrD,CACA,KAAQ,CACNjH,KAAKmwC,QAAU,WACd,IAAK5tC,EAAMs1B,eAAiBt1B,EAAMs1B,gBAAkBt1B,EAAMiC,QAAQ6R,KAAKkE,YAAa,CACnF,GAAIhY,EAAMkB,QAAQyC,cAAe,CAChC3D,EAAM4D,QAAQC,aAAa,KAChC,CAEI7D,EAAM8D,QACV,CACA,EAEEqkB,OAAO/V,iBAAiB,SAAU3U,KAAKmwC,QACzC,CACA,EAEAu8B,GAAYjtE,UAAUujC,cAAgB,SAAUj+B,GAC/C,GAAI/E,KAAKmwC,QAAS,CACjBzlB,OAAOg6B,oBAAoB,SAAU1kD,KAAKmwC,QAC5C,CAEC,GAAInwC,KAAK2sE,SAAU,CAClB3sE,KAAK2sE,SAASa,UAAUxtE,KAAKuC,MAAMI,QACrC,CAEC,GAAI3C,KAAK4sE,kBAAmB,CAC3B5sE,KAAK4sE,kBAAkBY,UAAUxtE,KAAKuC,MAAMI,QAAQsE,WACtD,CACA,EAEAyG,EAAUjO,UAAU6rC,eAAe,cAAeohC,IAClD,IAAIe,GAAmB,SAASA,EAAiBlrE,GAChDvC,KAAKuC,MAAQA,EACbvC,KAAK8C,QAAU,GACf9C,KAAK0tE,cAAgB,GACrB1tE,KAAK0sC,KAAO,GACZ1sC,KAAKgC,MAAQ,EACbhC,KAAK2tE,kBAAoB,GACzB3tE,KAAK4tE,kBAAoB,KACzB5tE,KAAK6tE,qBAAuB,KAC7B,EAGAJ,GAAiBhuE,UAAUkE,WAAa,WACvC,IAAIgC,EAAO3F,KACP8C,EAAU,GAEd9C,KAAK0sC,KAAO1sC,KAAKuC,MAAMkB,QAAQwC,iBAC/BjG,KAAK2tE,kBAAoB3tE,KAAKuC,MAAMkB,QAAQ44B,mCAAqCr8B,KAAK8tE,oBACtF9tE,KAAK4tE,kBAAoB5tE,KAAKuC,MAAMkB,QAAQ04B,kCAC5Cn8B,KAAK0tE,cAAgB,GAGrB1tE,KAAKuC,MAAMmI,cAAc3H,eAAeyC,SAAQ,SAAUiB,EAAQX,GACjE,GAAIW,EAAOjC,QAAQ4oC,WAAY,CAC9B,GAAI3mC,EAAOjC,QAAQ4oC,WAAW2gC,OAAStnE,EAAOjC,QAAQ4oC,WAAWpkC,QAAS,CACzEvC,EAAOjC,QAAQ4oC,WAAWprC,MAAQ8D,EAClChD,EAAQyC,KAAKkB,GAEb,IAAKA,EAAOuC,SAAWrD,EAAK+mC,OAAS,WAAY,CAChD/mC,EAAK+nE,cAAcnoE,KAAKkB,EAC7B,CACA,CACA,CACA,IAGC3D,EAAUA,EAAQ2e,UAClB3e,EAAUA,EAAQ+S,MAAK,SAAUiwB,EAAGC,GACnC,IAAIjf,EAAOif,EAAEvhC,QAAQ4oC,WAAW2gC,MAAQjoC,EAAEthC,QAAQ4oC,WAAW2gC,MAC7D,OAAOjnD,GAAQif,EAAEvhC,QAAQ4oC,WAAWprC,MAAQ8jC,EAAEthC,QAAQ4oC,WAAWprC,KACnE,IAEChC,KAAK8C,QAAUA,EAEf,GAAI9C,KAAK0sC,OAAS,WAAY,CAC7B1sC,KAAKguE,0BACP,CAGC,IAAK,IAAIC,EAAYjuE,KAAKuC,MAAMmI,cAAc3H,eAAgBmrE,EAAWxuE,MAAM2F,QAAQ4oE,GAAYE,EAAO,EAAGF,EAAYC,EAAWD,EAAYA,EAAU5uE,OAAOC,cAAe,CAC/K,IAAI8uE,EAEJ,GAAIF,EAAU,CACb,GAAIC,GAAQF,EAAU7tE,OAAQ,MAC9BguE,EAAOH,EAAUE,IACpB,KAAS,CACNA,EAAOF,EAAUn3C,OACjB,GAAIq3C,EAAKE,KAAM,MACfD,EAAOD,EAAKruE,KACf,CAEE,IAAIoF,EAAMkpE,EAEV,GAAIlpE,EAAIoB,WAAWsR,WAAa,qBAAsB,CACrD5X,KAAK6tE,qBAAuB3oE,EAC5B,KACH,CACA,CAEC,GAAIlF,KAAK6tE,qBAAsB,CAC9B,GAAI7tE,KAAK0tE,cAActtE,OAAQ,CAC9BJ,KAAK6tE,qBAAqBx/D,MAC7B,KAAS,CACNrO,KAAK6tE,qBAAqBv/D,MAC7B,CACA,CACA,EAGAm/D,GAAiBhuE,UAAU2U,iBAAmB,SAAU3N,GACvD,IAAIhB,EAAMgB,EAAO+C,gBAEjB/C,EAAOjC,QAAQ4oC,WAAa,CAAE2gC,aAActoE,EAAI2nC,aAAe,YAAc,EAAI3nC,EAAI2nC,WAAYpkC,QAASvD,EAAIuD,UAAY,MAAQ,MAAQ,KAC3I,EAEAykE,GAAiBhuE,UAAUstB,cAAgB,SAAUhoB,GACpD,IAAI3B,EAEJ,GAAI2B,EAAIkJ,OAAS,OAAQ,CACxB7K,EAAKC,SAASC,cAAc,OAC5BF,EAAGG,UAAUC,IAAI,iCAEjBuB,EAAIP,QAAQyB,iBAAmB,CAC9BtD,QAASS,EACTyzC,KAAM72C,KAAK4tE,mBAGZ,IAAK5tE,KAAK4tE,kBAAmB,CAC5BxqE,EAAGiB,MAAMoV,QAAU,MACtB,CACA,CACA,EAEAg0D,GAAiBhuE,UAAU2wB,UAAY,SAAUrrB,GAChD,IAAI4Z,EAAQ5Z,EAAIjB,aAEhB,GAAIiB,EAAIP,QAAQyB,iBAAkB,CACjC0Y,EAAMvX,YAAYrC,EAAIP,QAAQyB,iBAAiBtD,SAC/C3C,KAAKsuE,4BAA4BvpE,EACnC,CACA,EAGA0oE,GAAiBhuE,UAAUia,uBAAyB,SAAUjT,EAAQuC,GAErE,GAAIvC,EAAOjC,QAAQ4oC,WAAY,CAC9B3mC,EAAOjC,QAAQ4oC,WAAWpkC,QAAUA,EACpChJ,KAAK2D,YACP,CACA,EAEA8pE,GAAiBhuE,UAAUunC,WAAa,SAAUvgC,GACjD,IAAI8nE,EAAWvuE,KAAK0tE,cAActtE,OAElCqG,EAAO6H,KAAK,MAAO,MAEnB,GAAItO,KAAK0sC,OAAS,WAAY,CAC7B1sC,KAAK0tE,cAAcvmE,QAAQV,GAC3BzG,KAAKguE,2BAEL,GAAIhuE,KAAK6tE,uBAAyBU,EAAU,CAC3CvuE,KAAK6tE,qBAAqBx/D,MAC7B,CACA,CACA,EAEAo/D,GAAiBhuE,UAAUsnC,WAAa,SAAUtgC,GACjD,IAAIzE,EAEJyE,EAAO4H,KAAK,MAAO,MAEnB5H,EAAOoJ,SAASpJ,EAAOoD,YAEvB,GAAI7J,KAAK0sC,OAAS,WAAY,CAC7B1qC,EAAQhC,KAAK0tE,cAAczsE,QAAQwF,GAEnC,GAAIzE,GAAS,EAAG,CACfhC,KAAK0tE,cAAc1mE,OAAOhF,EAAO,EACpC,CAEEhC,KAAKguE,2BAEL,GAAIhuE,KAAK6tE,uBAAyB7tE,KAAK0tE,cAActtE,OAAQ,CAC5DJ,KAAK6tE,qBAAqBv/D,MAC7B,CACA,CACA,EAGAm/D,GAAiBhuE,UAAUqO,OAAS,WACnC,IAAInI,EAAO3F,KACPwuE,EAAU,KAEd,MAAOA,EAAS,CAEf,IAAI1kE,EAAQnE,EAAKpD,MAAMiC,QAAQ4I,OAAOC,WAAa,aAAe1H,EAAKpD,MAAMmI,cAAc+B,mBAAqB9G,EAAKpD,MAAMmI,cAAcb,WAEzI,IAAIid,GAAQnhB,EAAKpD,MAAMkB,QAAQC,cAAgBiC,EAAKpD,MAAMmI,cAAc/H,QAAQyB,YAAcuB,EAAKpD,MAAMI,QAAQyB,aAAe0F,EAEhI,GAAIgd,EAAO,EAAG,CAEb,IAAIrgB,EAASd,EAAK7C,QAAQ6C,EAAK3D,OAE/B,GAAIyE,EAAQ,CACXd,EAAKqhC,WAAWvgC,GAChBd,EAAK3D,OACT,KAAU,CACNwsE,EAAU,KACd,CACA,KAAS,CAGN,IAAIxgE,EAAUrI,EAAK7C,QAAQ6C,EAAK3D,MAAQ,GAExC,GAAIgM,EAAS,CACZ,GAAI8Y,EAAO,EAAG,CACb,GAAIA,GAAQ9Y,EAAQnE,WAAY,CAC/BlE,EAAKohC,WAAW/4B,GAChBrI,EAAK3D,OACX,KAAY,CACNwsE,EAAU,KAChB,CACA,KAAW,CACNA,EAAU,KACf,CACA,KAAU,CACNA,EAAU,KACd,CACA,CAEE,IAAK7oE,EAAKpD,MAAMM,WAAWmZ,gBAAiB,CAC3CrW,EAAKpD,MAAMM,WAAWqkB,mBACzB,CACA,CACA,EAEAumD,GAAiBhuE,UAAUuuE,yBAA2B,WACrD,IAAIroE,EAAO3F,KACPiL,EAAOjL,KAAKuC,MAAMM,WAAW6b,iBAEjCzT,EAAKzF,SAAQ,SAAUT,GACtBY,EAAK2oE,4BAA4BvpE,EACnC,GACA,EAEA0oE,GAAiBhuE,UAAU6uE,4BAA8B,SAAUvpE,GAClE,IAAI3B,EAAIyU,EAER,GAAI9S,EAAIP,QAAQyB,iBAAkB,CACjC7C,EAAK2B,EAAIP,QAAQyB,iBAAiBtD,QAElC,MAAOS,EAAGD,WAAY,CACrBC,EAAGwC,YAAYxC,EAAGD,WACrB,CAAG0U,EAAW7X,KAAK2tE,kBAAkB3tE,KAAKyuE,yBAAyB1pE,IACjE,GAAI8S,EAAU,CACbzU,EAAGgE,YAAYyQ,EAClB,CACA,CACA,EAEA41D,GAAiBhuE,UAAUgvE,yBAA2B,SAAU1pE,GAC/D,IAAIY,EAAO3F,KACP2E,EAAOI,EAAIic,UACXzX,EAAS,GACTmlE,EAEJ1uE,KAAK0tE,cAAcloE,SAAQ,SAAUiB,GACpC,IAAI3G,EAAQ2G,EAAOgK,cAAc9L,GAEjC,GAAI8B,EAAOH,WAAWlB,OAASqB,EAAOtB,MAAO,CAC5C,GAAIsB,EAAOjC,QAAQ2R,QAAUxQ,EAAKpD,MAAMkB,QAAQ24B,sCAAuC,CAEtFsyC,EAAoB,CACnB5uE,MAAO,MACP6E,KAAM,GACNwT,SAAU,SAASA,IAClB,OAAOrY,CACb,EACKkhB,QAAS,SAASA,IACjB,OAAOrc,CACb,EACKb,WAAY,SAASA,IACpB,OAAOT,SAASC,cAAc,MACpC,EACK4vB,OAAQ,SAASA,IAChB,OAAOnuB,EAAI6E,cACjB,EACKupB,UAAW,SAASA,IACnB,OAAO1sB,EAAOmD,cACpB,GAGIL,EAAOhE,KAAK,CACXJ,MAAOsB,EAAOtB,MACdC,MAAOqB,EAAOH,WAAWlB,MACzBtF,MAAO2G,EAAOjC,QAAQ2R,OAAOyB,UAAUnX,KAAKkF,EAAKpD,MAAMiC,QAAQ2R,OAAQu4D,EAAmBjoE,EAAOjC,QAAQ2R,OAAO2B,SAErH,KAAU,CACNvO,EAAOhE,KAAK,CACXJ,MAAOsB,EAAOtB,MACdC,MAAOqB,EAAOH,WAAWlB,MACzBtF,MAAOA,GAEZ,CACA,CACA,IAEC,OAAOyJ,CACR,EAEAkkE,GAAiBhuE,UAAUquE,oBAAsB,SAAUnpE,GAC1D,IAAI+e,EAAOrgB,SAASC,cAAc,SAElCqB,EAAKa,SAAQ,SAAUkc,GACtB,IAAI3c,EAAM1B,SAASC,cAAc,MACjC,IAAIqrE,EAAYtrE,SAASC,cAAc,MACvC,IAAIsrE,EAAYvrE,SAASC,cAAc,MACvC,IAAIurE,EAEJ,IAAIC,EAAiBzrE,SAASC,cAAc,UAC5CqrE,EAAUvnE,YAAY0nE,GACtB9uE,KAAKuC,MAAMiC,QAAQmP,SAASC,KAAK,WAAa8N,EAAKvc,OAAO,SAAUsS,GACnEq3D,EAAeC,UAAYt3D,GAAQiK,EAAKtc,KAC3C,IAEE,GAAIsc,EAAK5hB,iBAAiBuY,KAAM,CAC/Bw2D,EAAexrE,SAASC,cAAc,OACtCurE,EAAaznE,YAAYsa,EAAK5hB,OAC9B8uE,EAAUxnE,YAAYynE,EACzB,KAAS,CACND,EAAUt2D,UAAYoJ,EAAK5hB,KAC9B,CAEEiF,EAAIqC,YAAYunE,GAChB5pE,EAAIqC,YAAYwnE,GAChBlrD,EAAKtc,YAAYrC,EACnB,GAAI/E,MAEH,OAAOJ,OAAO+I,KAAKhE,GAAMvE,OAASsjB,EAAO,EAC1C,EAEAhW,EAAUjO,UAAU6rC,eAAe,mBAAoBmiC,IAEvD,IAAIuB,GAAY,SAASA,EAAUzsE,GAClCvC,KAAKuC,MAAQA,EACbvC,KAAKivE,UAAY,MACjBjvE,KAAKkvE,eAAiB,MACtBlvE,KAAKmvE,WAAa,GAClBnvE,KAAK2mB,aAAe,GACpB3mB,KAAKovE,sBAAwB,IAC9B,EAEAJ,GAAUvvE,UAAUsgB,mBAAqB,SAAUxG,GAClDvZ,KAAKivE,UAAY,MACjBjvE,KAAKkvE,eAAiB,MACtBlvE,KAAKmvE,WAAa,GAClBnvE,KAAK2mB,aAAe,GAEpB,IAAKpN,EAAQ,CACZvZ,KAAKqvE,sBACP,CACA,EAEAL,GAAUvvE,UAAUstB,cAAgB,SAAUhoB,GAC7C,IAAIY,EAAO3F,KACP2C,EAAUoC,EAAIjB,aAGlB,IAAIwrE,EAAY,SAASA,IAExB/5D,YAAW,WACV5P,EAAKspE,UAAY,KACpB,GAAK,IAEH5rE,SAASkyB,KAAKmvB,oBAAoB,UAAW4qB,EAC/C,EAECvqE,EAAIP,QAAQgpB,OAAS,CAAE+hD,SAAU,OAGjC,GAAI5pE,EAAKpD,MAAMkB,QAAQ+3B,gBAAgB/6B,KAAKT,KAAKuC,MAAOwC,EAAI6E,gBAAiB,CAC5EjH,EAAQY,UAAUC,IAAI,wBACtBb,EAAQY,UAAUmkB,OAAO,0BAEzB,GAAI/hB,EAAKpD,MAAMkB,QAAQyhB,YAAcvf,EAAKpD,MAAMkB,QAAQyhB,YAAc,YAAa,CAClF,GAAIvf,EAAKpD,MAAMkB,QAAQ63B,sBAAwB,QAAS,CACvD34B,EAAQgS,iBAAiB,SAAS,SAAUC,GAC3C,GAAIA,EAAEmpD,SAAU,CACfp4D,EAAKpD,MAAMk/B,kBACX97B,EAAKupE,eAAiBvpE,EAAKupE,gBAAkBnqE,EAE7C,IAAIyqE,EAAoB7pE,EAAKpD,MAAMM,WAAWwgB,mBAAmB1d,EAAKupE,gBACtE,IAAIO,EAAS9pE,EAAKpD,MAAMM,WAAWwgB,mBAAmBte,GAEtD,IAAI2qE,EAAaF,GAAqBC,EAASD,EAAoBC,EACnE,IAAIE,EAAWH,GAAqBC,EAASD,EAAoBC,EAEjE,IAAIxkE,EAAOtF,EAAKpD,MAAMM,WAAW6b,iBAAiB2G,MAAM,GACxD,IAAIuqD,EAAc3kE,EAAKjE,OAAO0oE,EAAYC,EAAWD,EAAa,GAElE,GAAI96D,EAAEkpD,SAAWlpD,EAAEopD,QAAS,CAC3B4R,EAAYpqE,SAAQ,SAAUqqE,GAC7B,GAAIA,IAAelqE,EAAKupE,eAAgB,CAEvC,GAAIvpE,EAAKpD,MAAMkB,QAAQyhB,aAAe,OAASvf,EAAKmoB,cAAc/oB,GAAM,CACvE,GAAIY,EAAKghB,aAAavmB,OAASuF,EAAKpD,MAAMkB,QAAQyhB,WAAY,CAC7Dvf,EAAKioB,UAAUiiD,EAC1B,CACA,KAAgB,CACNlqE,EAAKioB,UAAUiiD,EACzB,CACA,CACA,IACOlqE,EAAKupE,eAAiBnqE,CAC7B,KAAa,CACNY,EAAKyf,aAAazkB,UAAW,MAE7B,GAAIgF,EAAKpD,MAAMkB,QAAQyhB,aAAe,KAAM,CAC3C,GAAI0qD,EAAYxvE,OAASuF,EAAKpD,MAAMkB,QAAQyhB,WAAY,CACvD0qD,EAAcA,EAAYvqD,MAAM,EAAG1f,EAAKpD,MAAMkB,QAAQyhB,WAC/D,CACA,CAEOvf,EAAK8nB,WAAWmiD,EACvB,CACMjqE,EAAKpD,MAAMk/B,iBACjB,MAAY,GAAI7sB,EAAEkpD,SAAWlpD,EAAEopD,QAAS,CAClCr4D,EAAKioB,UAAU7oB,GACfY,EAAKupE,eAAiBnqE,CAC5B,KAAY,CACNY,EAAKyf,aAAazkB,UAAW,MAC7BgF,EAAK8nB,WAAW1oB,GAChBY,EAAKupE,eAAiBnqE,CAC5B,CACA,GACA,KAAU,CACNpC,EAAQgS,iBAAiB,SAAS,SAAUC,GAC3C,IAAKjP,EAAKpD,MAAMgC,UAAU,UAAYoB,EAAKpD,MAAMiC,QAAQ6R,KAAKqgB,iBAAkB,CAC/E/wB,EAAKpD,MAAMk/B,iBACjB,CAEK,IAAK97B,EAAKspE,UAAW,CACpBtpE,EAAKioB,UAAU7oB,EACrB,CACA,IAEIpC,EAAQgS,iBAAiB,aAAa,SAAUC,GAC/C,GAAIA,EAAEmpD,SAAU,CACfp4D,EAAKpD,MAAMk/B,kBAEX97B,EAAKspE,UAAY,KAEjBtpE,EAAKwpE,WAAa,GAElB9rE,SAASkyB,KAAK5gB,iBAAiB,UAAW26D,GAC1CjsE,SAASkyB,KAAK5gB,iBAAiB,QAAS26D,GAExC3pE,EAAKioB,UAAU7oB,GAEf,OAAO,KACb,CACA,IAEIpC,EAAQgS,iBAAiB,cAAc,SAAUC,GAChD,GAAIjP,EAAKspE,UAAW,CACnBtpE,EAAKpD,MAAMk/B,kBACX97B,EAAKioB,UAAU7oB,GAEf,GAAIY,EAAKwpE,WAAW,IAAMpqE,EAAK,CAC9BY,EAAKioB,UAAUjoB,EAAKwpE,WAAW,GACtC,CACA,CACA,IAEIxsE,EAAQgS,iBAAiB,YAAY,SAAUC,GAC9C,GAAIjP,EAAKspE,UAAW,CACnBtpE,EAAKpD,MAAMk/B,kBACX97B,EAAKwpE,WAAWhoE,QAAQpC,EAC9B,CACA,GACA,CACA,CACA,KAAQ,CACNpC,EAAQY,UAAUC,IAAI,0BACtBb,EAAQY,UAAUmkB,OAAO,uBAC3B,CACA,EAGAsnD,GAAUvvE,UAAUmuB,UAAY,SAAU7oB,GACzC,GAAI/E,KAAKuC,MAAMkB,QAAQ+3B,gBAAgB/6B,KAAKT,KAAKuC,MAAOwC,EAAI6E,gBAAiB,CAC5E,GAAI7E,EAAIP,QAAQgpB,QAAUzoB,EAAIP,QAAQgpB,OAAO+hD,SAAU,CACtDvvE,KAAK0yB,aAAa3tB,EACrB,KAAS,CACN/E,KAAK8vE,WAAW/qE,EACnB,CACA,CACA,EAGAiqE,GAAUvvE,UAAUguB,WAAa,SAAUxiB,GAC1C,IAAI8kE,EAAU/vE,KAEd,IAAIgwE,EAEJ,cAAe/kE,IAAS,YAAc,YAAc7L,EAAQ6L,IAC3D,IAAK,YACJjL,KAAKuC,MAAMM,WAAWoI,KAAKzF,SAAQ,SAAUT,GAC5CgrE,EAAQD,WAAW/qE,EAAK,KAAM,KAClC,IAEG/E,KAAKqvE,uBACL,MAED,IAAK,SAEJW,EAAWhwE,KAAKuC,MAAMM,WAAWob,QAAQhT,GAEzC,GAAI+kE,EAAU,CACbhwE,KAAK8vE,WAAWE,EAAU,KAAM,KACpC,KAAU,CACNhwE,KAAKuC,MAAMM,WAAW+gB,QAAQ3Y,GAAMzF,SAAQ,SAAUT,GACrDgrE,EAAQD,WAAW/qE,EAAK,KAAM,KACnC,GACA,CAEG/E,KAAKqvE,uBACL,MAED,QACC,GAAI3vE,MAAM2F,QAAQ4F,GAAO,CACxBA,EAAKzF,SAAQ,SAAUT,GACtBgrE,EAAQD,WAAW/qE,EAAK,KAAM,KACnC,IAEI/E,KAAKqvE,sBACT,KAAU,CACNrvE,KAAK8vE,WAAW7kE,EAAM,MAAO,KACjC,CACG,MAEH,EAGA+jE,GAAUvvE,UAAUqwE,WAAa,SAAUG,EAAS12D,EAAQ9L,GAI3D,IAAK9L,MAAM3B,KAAKuC,MAAMkB,QAAQyhB,aAAellB,KAAKuC,MAAMkB,QAAQyhB,aAAe,OAASzX,EAAO,CAC9F,GAAIzN,KAAK2mB,aAAavmB,QAAUJ,KAAKuC,MAAMkB,QAAQyhB,WAAY,CAC9D,GAAIllB,KAAKuC,MAAMkB,QAAQ83B,2BAA4B,CAClDv7B,KAAK0yB,aAAa1yB,KAAK2mB,aAAa,GACxC,KAAU,CACN,OAAO,KACX,CACA,CACA,CAEC,IAAI5hB,EAAM/E,KAAKuC,MAAMM,WAAWob,QAAQgyD,GAExC,GAAIlrE,EAAK,CACR,GAAI/E,KAAK2mB,aAAa1lB,QAAQ8D,KAAS,EAAG,CACzCA,EAAIjB,aAAaP,UAAUC,IAAI,sBAC/B,IAAKuB,EAAIP,QAAQgpB,OAAQ,CACxBzoB,EAAIP,QAAQgpB,OAAS,EACzB,CAEGzoB,EAAIP,QAAQgpB,OAAO+hD,SAAW,KAC9B,GAAIxqE,EAAIP,QAAQgpB,OAAO0iD,WAAY,CAClCnrE,EAAIP,QAAQgpB,OAAO0iD,WAAWnlB,QAAU,IAC5C,CAEG/qD,KAAK2mB,aAAaphB,KAAKR,GAEvB,GAAI/E,KAAKuC,MAAMkB,QAAQm3B,wBAAyB,CAC/C56B,KAAKmwE,kBAAkBprE,EAAK,KAChC,CAEG,IAAKwU,EAAQ,CACZvZ,KAAKuC,MAAMkB,QAAQ07B,YAAY1+B,KAAKT,KAAKuC,MAAOwC,EAAI6E,eACxD,CAEG5J,KAAKqvE,qBAAqB91D,EAC7B,CACA,KAAQ,CACN,IAAKA,EAAQ,CACZlN,QAAQC,KAAK,2DAA6D2jE,EAC7E,CACA,CACA,EAEAjB,GAAUvvE,UAAUquB,cAAgB,SAAU/oB,GAC7C,OAAO/E,KAAK2mB,aAAa1lB,QAAQ8D,MAAU,CAC5C,EAGAiqE,GAAUvvE,UAAU2lB,aAAe,SAAUna,EAAMsO,GAClD,IAAI5T,EAAO3F,KACPq6D,EAEJ,UAAWpvD,GAAQ,YAAa,CAE/BovD,EAAW10D,EAAKghB,aAAavmB,OAE7B,IAAK,IAAIgwE,EAAO,EAAGA,EAAO/V,EAAU+V,IAAQ,CAC3CzqE,EAAK+sB,aAAa/sB,EAAKghB,aAAa,GAAI,KAC3C,CAEEhhB,EAAK0pE,qBAAqB91D,EAC5B,KAAQ,CACN,GAAI7Z,MAAM2F,QAAQ4F,GAAO,CACxBA,EAAKzF,SAAQ,SAAUT,GACtBY,EAAK+sB,aAAa3tB,EAAK,KAC3B,IAEGY,EAAK0pE,qBAAqB91D,EAC7B,KAAS,CACN5T,EAAK+sB,aAAaznB,EAAMsO,EAC3B,CACA,CACA,EAGAy1D,GAAUvvE,UAAUizB,aAAe,SAAUu9C,EAAS12D,GACrD,IAAI5T,EAAO3F,KACP+E,EAAMY,EAAKpD,MAAMM,WAAWob,QAAQgyD,GACpCjuE,EAEJ,GAAI+C,EAAK,CACR/C,EAAQ2D,EAAKghB,aAAahnB,WAAU,SAAU0wE,GAC7C,OAAOA,GAAetrE,CACzB,IAEE,GAAI/C,GAAS,EAAG,CAEf+C,EAAIjB,aAAaP,UAAUmkB,OAAO,sBAClC,IAAK3iB,EAAIP,QAAQgpB,OAAQ,CACxBzoB,EAAIP,QAAQgpB,OAAS,EACzB,CAEGzoB,EAAIP,QAAQgpB,OAAO+hD,SAAW,MAC9B,GAAIxqE,EAAIP,QAAQgpB,OAAO0iD,WAAY,CAClCnrE,EAAIP,QAAQgpB,OAAO0iD,WAAWnlB,QAAU,KAC5C,CACGplD,EAAKghB,aAAa3f,OAAOhF,EAAO,GAEhC,GAAIhC,KAAKuC,MAAMkB,QAAQm3B,wBAAyB,CAC/C56B,KAAKmwE,kBAAkBprE,EAAK,MAChC,CAEG,IAAKwU,EAAQ,CACZ5T,EAAKpD,MAAMkB,QAAQ27B,cAAc3+B,KAAKT,KAAKuC,MAAOwC,EAAI6E,eAC1D,CAEGjE,EAAK0pE,qBAAqB91D,EAC7B,CACA,KAAQ,CACN,IAAKA,EAAQ,CACZlN,QAAQC,KAAK,6DAA+D2jE,EAC/E,CACA,CACA,EAEAjB,GAAUvvE,UAAU+oC,gBAAkB,WACrC,IAAI7jC,EAAO,GAEX3E,KAAK2mB,aAAanhB,SAAQ,SAAUT,GACnCJ,EAAKY,KAAKR,EAAIic,UAChB,IAEC,OAAOrc,CACR,EAEAqqE,GAAUvvE,UAAU8oC,gBAAkB,WAErC,IAAIt9B,EAAO,GAEXjL,KAAK2mB,aAAanhB,SAAQ,SAAUT,GACnCkG,EAAK1F,KAAKR,EAAI6E,eAChB,IAEC,OAAOqB,CACR,EAEA+jE,GAAUvvE,UAAU4vE,qBAAuB,SAAU91D,GACpD,GAAIvZ,KAAKovE,sBAAuB,CAC/B,GAAIpvE,KAAK2mB,aAAavmB,SAAW,EAAG,CACnCJ,KAAKovE,sBAAsBrkB,QAAU,MACrC/qD,KAAKovE,sBAAsBtkB,cAAgB,KAC9C,MAAS,GAAI9qD,KAAKuC,MAAMM,WAAWoI,KAAK7K,SAAWJ,KAAK2mB,aAAavmB,OAAQ,CAC1EJ,KAAKovE,sBAAsBrkB,QAAU,KACrC/qD,KAAKovE,sBAAsBtkB,cAAgB,KAC9C,KAAS,CACN9qD,KAAKovE,sBAAsBtkB,cAAgB,KAC3C9qD,KAAKovE,sBAAsBrkB,QAAU,KACxC,CACA,CAEC,IAAKxxC,EAAQ,CACZvZ,KAAKuC,MAAMkB,QAAQy7B,oBAAoBz+B,KAAKT,KAAKuC,MAAOvC,KAAKwoC,kBAAmBxoC,KAAKuoC,kBACvF,CACA,EAEAymC,GAAUvvE,UAAUw2D,0BAA4B,SAAUlxD,EAAKpC,GAC9D,IAAKoC,EAAIkoB,KAAKzoB,QAAQgpB,OAAQ,CAC7BzoB,EAAIkoB,KAAKzoB,QAAQgpB,OAAS,EAC5B,CAECzoB,EAAIkoB,KAAKzoB,QAAQgpB,OAAO0iD,WAAavtE,CACtC,EAEAqsE,GAAUvvE,UAAUy2D,6BAA+B,SAAUvzD,GAC5D3C,KAAKovE,sBAAwBzsE,CAC9B,EAEAqsE,GAAUvvE,UAAU0wE,kBAAoB,SAAUprE,EAAKyoB,GACtD,IAAIiD,EAAWzwB,KAAKuC,MAAMiC,QAAQ0G,SAASuwC,YAAY12C,EAAK,MAE5D,GAAIyoB,EAAQ,CACX,IAAK,IAAI8iD,EAAa7/C,EAAU8/C,EAAY7wE,MAAM2F,QAAQirE,GAAaE,EAAO,EAAGF,EAAaC,EAAYD,EAAaA,EAAWjxE,OAAOC,cAAe,CACvJ,IAAImxE,EAEJ,GAAIF,EAAW,CACd,GAAIC,GAAQF,EAAWlwE,OAAQ,MAC/BqwE,EAAQH,EAAWE,IACvB,KAAU,CACNA,EAAOF,EAAWx5C,OAClB,GAAI05C,EAAKnC,KAAM,MACfoC,EAAQD,EAAK1wE,KACjB,CAEG,IAAI+Z,EAAQ42D,EAEZzwE,KAAK8vE,WAAWj2D,EAAO,KAC1B,CACA,KAAQ,CACN,IAAK,IAAI62D,EAAajgD,EAAUkgD,EAAYjxE,MAAM2F,QAAQqrE,GAAaE,EAAO,EAAGF,EAAaC,EAAYD,EAAaA,EAAWrxE,OAAOC,cAAe,CACvJ,IAAIuxE,EAEJ,GAAIF,EAAW,CACd,GAAIC,GAAQF,EAAWtwE,OAAQ,MAC/BywE,EAAQH,EAAWE,IACvB,KAAU,CACNA,EAAOF,EAAW55C,OAClB,GAAI85C,EAAKvC,KAAM,MACfwC,EAAQD,EAAK9wE,KACjB,CAEG,IAAIgxE,EAASD,EAEb7wE,KAAK0yB,aAAao+C,EAAQ,KAC7B,CACA,CACA,EAEApjE,EAAUjO,UAAU6rC,eAAe,YAAa0jC,IAEhD,IAAI+B,GAAO,SAASA,EAAKxuE,GACxBvC,KAAKuC,MAAQA,EACbvC,KAAK2nC,SAAW,GAChB3nC,KAAKm2B,QAAU,KAChB,EAGA46C,GAAKtxE,UAAU2U,iBAAmB,SAAU3N,EAAQksC,GACnD,IAAIhtC,EAAO3F,KACPgF,EAAS,MACT2B,EACAqqE,EAEJ,OAAQ5xE,EAAQqH,EAAOH,WAAWtB,SACjC,IAAK,SACJ,GAAIW,EAAKse,QAAQxd,EAAOH,WAAWtB,QAAS,CAC3CA,EAASW,EAAKse,QAAQxd,EAAOH,WAAWtB,OAC5C,KAAU,CACNqH,QAAQC,KAAK,sCAAuC7F,EAAOH,WAAWtB,OAC1E,CACG,MAED,IAAK,WACJA,EAASyB,EAAOH,WAAWtB,OAC3B,MAGFyB,EAAOjC,QAAQqR,KAAO,CACrB7Q,OAAQA,EAAQ4Y,IAAK,OACrB9F,OAAQrR,EAAOH,WAAW2qE,cAAgB,GAC1CC,YAAazqE,EAAOH,WAAW6qE,uBAAyB,MACxD1mB,gBAAiBhkD,EAAOH,WAAWqyB,qBAAuB,YAAclyB,EAAOH,WAAWqyB,mBAAqB34B,KAAKuC,MAAMkB,QAAQk1B,oBAGnI,UAAWlyB,EAAOH,WAAWoyB,aAAe,YAAc14B,KAAKuC,MAAMkB,QAAQi1B,aAAe,MAAQjyB,EAAOH,WAAWoyB,aAAe,MAAO,CAE3I/xB,EAAQF,EAAO3C,aAEf6C,EAAMpD,UAAUC,IAAI,sBAEpBwtE,EAAU3tE,SAASC,cAAc,OACjC0tE,EAAQztE,UAAUC,IAAI,wBAEtB,GAAIpE,EAAQY,KAAKuC,MAAMkB,QAAQm1B,oBAAsB,SAAU,CAC9Do4C,EAAQ5pE,YAAYpH,KAAKuC,MAAMkB,QAAQm1B,kBAC1C,KAAS,CACNo4C,EAAQ14D,UAAYtY,KAAKuC,MAAMkB,QAAQm1B,iBAC1C,CAGE+Z,EAAQvrC,YAAY4pE,GAEpBvqE,EAAOjC,QAAQqR,KAAKlT,QAAUquE,EAG9BrqE,EAAMgO,iBAAiB,SAAS,SAAUC,GACzC,IAAIgJ,EAAM,GACNqG,EAAU,GACV3e,EAAQ,MAEZ,GAAImB,EAAOjC,QAAQqR,KAAM,CACxB,GAAIpP,EAAOjC,QAAQqR,KAAK40C,SAAU,CACjC,GAAIhkD,EAAOjC,QAAQqR,KAAK+H,KAAO,OAAQ,CACtCA,EAAMnX,EAAOjC,QAAQqR,KAAKq7D,WAChC,KAAY,CACN,GAAIzqE,EAAOjC,QAAQqR,KAAK+H,KAAOnX,EAAOjC,QAAQqR,KAAKq7D,YAAa,CAC/DtzD,EAAMnX,EAAOjC,QAAQqR,KAAK+H,KAAO,MAAQ,OAAS,KACzD,KAAa,CACNA,EAAM,MACb,CACA,CACA,KAAW,CACN,OAAQnX,EAAOjC,QAAQqR,KAAK+H,KAC3B,IAAK,MACJA,EAAM,OACN,MAED,IAAK,OACJA,EAAM,MACN,MAED,QACCA,EAAMnX,EAAOjC,QAAQqR,KAAKq7D,YAEjC,CAEI,GAAIvrE,EAAKpD,MAAMkB,QAAQ+0B,wBAA0B5jB,EAAEmpD,UAAYnpD,EAAEkpD,SAAU,CAC1E75C,EAAUte,EAAKue,UAEf5e,EAAQ2e,EAAQtkB,WAAU,SAAUqF,GACnC,OAAOA,EAAOG,QAAUsB,EAAO+G,UACrC,IAEK,GAAIlI,GAAS,EAAG,CACf2e,EAAQ3e,GAAOsY,IAAMA,EAErB,GAAItY,GAAS2e,EAAQ7jB,OAAS,EAAG,CAChCkF,EAAQ2e,EAAQjd,OAAO1B,EAAO,GAAG,GACjC,GAAIsY,GAAO,OAAQ,CAClBqG,EAAQ1e,KAAKD,EACrB,CACA,CACA,KAAY,CACN,GAAIsY,GAAO,OAAQ,CAClBqG,EAAQ1e,KAAK,CAAEkB,OAAQA,EAAQmX,IAAKA,GAC3C,CACA,CAGKjY,EAAK+8B,QAAQze,EAClB,KAAW,CACN,GAAIrG,GAAO,OAAQ,CAClBjY,EAAKka,OACX,KAAY,CAENla,EAAK+8B,QAAQj8B,EAAQmX,EAC3B,CACA,CAEIjY,EAAKpD,MAAMM,WAAW+hB,eAAejf,EAAKgiC,SAASvnC,OACvD,CACA,GACA,CACA,EAGA2wE,GAAKtxE,UAAU8wD,WAAa,WAC3B,IAAIp6B,EAAUn2B,KAAKm2B,QACnBn2B,KAAKm2B,QAAU,MACf,OAAOA,CACR,EAGA46C,GAAKtxE,UAAUykB,QAAU,WACxB,IAAIve,EAAO3F,KACPikB,EAAU,GAEdte,EAAKgiC,SAASniC,SAAQ,SAAUkc,GAC/B,GAAIA,EAAKjb,OAAQ,CAChBwd,EAAQ1e,KAAK,CAAEkB,OAAQib,EAAKjb,OAAOmD,eAAgBzE,MAAOuc,EAAKjb,OAAO+G,WAAYoQ,IAAK8D,EAAK9D,KAC/F,CACA,IAEC,OAAOqG,CACR,EAGA8sD,GAAKtxE,UAAUijC,QAAU,SAAUiF,EAAU/pB,GAC5C,IAAIjY,EAAO3F,KACPoxE,EAAc,GAElB,IAAK1xE,MAAM2F,QAAQsiC,GAAW,CAC7BA,EAAW,CAAC,CAAElhC,OAAQkhC,EAAU/pB,IAAKA,GACvC,CAEC+pB,EAASniC,SAAQ,SAAUkc,GAC1B,IAAIjb,EAEJA,EAASd,EAAKpD,MAAMmI,cAAczC,WAAWyZ,EAAKjb,QAElD,GAAIA,EAAQ,CACXib,EAAKjb,OAASA,EACd2qE,EAAY7rE,KAAKmc,GACjB/b,EAAKwwB,QAAU,IAClB,KAAS,CACN9pB,QAAQC,KAAK,kEAAmEoV,EAAKjb,OACxF,CACA,IAECd,EAAKgiC,SAAWypC,EAEhB,GAAIpxE,KAAKuC,MAAMkB,QAAQkH,aAAe3K,KAAKuC,MAAMgC,UAAU,cAAe,OAASvE,KAAKuC,MAAMiC,QAAQmG,YAAYC,OAAOiL,KAAM,CAC9H7V,KAAKuC,MAAMiC,QAAQmG,YAAYE,KAAK,OACtC,CACA,EAGAkmE,GAAKtxE,UAAUogB,MAAQ,WACtB7f,KAAK0iC,QAAQ,GACd,EAGAquC,GAAKtxE,UAAU4xE,WAAa,SAAU5qE,GACrC,IAAI1B,EAAM/E,KAAKuC,MAAMM,WAAWwH,WAAW,GACvCrF,EAAS,SACTG,EACArF,EAEJ,GAAIiF,EAAK,CACRA,EAAMA,EAAIic,UACV7b,EAAQsB,EAAO+G,WAEf,GAAIrI,EAAO,CAEVrF,EAAQ2G,EAAOgK,cAAc1L,GAE7B,cAAejF,IAAU,YAAc,YAAcV,EAAQU,IAC5D,IAAK,YACJkF,EAAS,SACT,MAED,IAAK,UACJA,EAAS,UACT,MAED,QACC,IAAKrD,MAAM7B,IAAUA,IAAU,GAAI,CAClCkF,EAAS,QACf,KAAY,CACN,GAAIlF,EAAMwF,MAAM,wCAAyC,CACxDN,EAAS,UAChB,CACA,CACK,MAEL,CACA,CAEC,OAAOhF,KAAKikB,QAAQjf,EACrB,EAGA+rE,GAAKtxE,UAAUoW,KAAO,SAAUlR,GAC5B,IAACgB,EAAO3F,KACP2nC,EAAW3nC,KAAKuC,MAAMkB,QAAQg1B,iBAAmB9yB,EAAKgiC,SAAStiB,QAAQ5D,UAAY9b,EAAKgiC,SACxF2pC,EAAiB,GACjBC,EAAgB,GAGpB,GAAI5rE,EAAKpD,MAAMkB,QAAQs8B,YAAa,CACnCp6B,EAAKpD,MAAMkB,QAAQs8B,YAAYt/B,KAAKkF,EAAKpD,MAAOoD,EAAKue,UACvD,CAECve,EAAK6rE,qBAEL,IAAK7rE,EAAKpD,MAAMkB,QAAQugB,YAAa,CAGpC2jB,EAASniC,SAAQ,SAAUkc,EAAM5b,GAChC,IAAI2rE,EAAU/vD,EAAKjb,OAAOjC,QAAQqR,KAElC,GAAI6L,EAAKjb,QAAUgrE,EAAS,CAG3B,IAAKA,EAAQzsE,OAAQ,CACpBysE,EAAQzsE,OAASW,EAAK0rE,WAAW3vD,EAAKjb,OAC3C,CAEIib,EAAK5J,cAAgB25D,EAAQ35D,SAAW,WAAa25D,EAAQ35D,OAAO4J,EAAKjb,OAAOmD,eAAgB8X,EAAK9D,KAAO6zD,EAAQ35D,OAEpHw5D,EAAe/rE,KAAKmc,EACxB,CAEG/b,EAAK+rE,gBAAgBhwD,EAAKjb,OAAQib,EAAK9D,IAC1C,IAGE,GAAI0zD,EAAelxE,OAAQ,CAC1BuF,EAAKgsE,WAAWhtE,EAAM2sE,EACzB,CACA,KAAQ,CACN3pC,EAASniC,SAAQ,SAAUkc,EAAM5b,GAChCH,EAAK+rE,gBAAgBhwD,EAAKjb,OAAQib,EAAK9D,IAC1C,GACA,CAEC,GAAIjY,EAAKpD,MAAMkB,QAAQu8B,WAAY,CAClCr7B,EAAKa,SAAQ,SAAUT,GACtBwsE,EAAchsE,KAAKR,EAAI6E,eAC1B,IAEEjE,EAAKpD,MAAMkB,QAAQu8B,WAAWv/B,KAAKkF,EAAKpD,MAAOoD,EAAKue,UAAWqtD,EACjE,CACA,EAGAR,GAAKtxE,UAAU+xE,mBAAqB,WACnCxxE,KAAKuC,MAAMmI,cAAcxB,iBAAiB1D,SAAQ,SAAUiB,GAC3D,GAAIA,EAAOjC,QAAQqR,KAAM,CACxBpP,EAAOjC,QAAQqR,KAAK+H,IAAM,OAC1BnX,EAAO3C,aAAa6O,aAAa,YAAa,OACjD,CACA,GACA,EAGAo+D,GAAKtxE,UAAUiyE,gBAAkB,SAAUjrE,EAAQmX,GAClDnX,EAAOjC,QAAQqR,KAAK+H,IAAMA,EAC1BnX,EAAO3C,aAAa6O,aAAa,YAAaiL,EAC/C,EAGAmzD,GAAKtxE,UAAUkyE,WAAa,SAAUhtE,EAAMgjC,GAC3C,IAAIiqC,EAAU5xE,KAEd,IAAI6xE,EAAclqC,EAASvnC,OAAS,EAEpCuE,EAAKkR,MAAK,SAAUiwB,EAAGC,GACtB,IAAIj2B,EAEJ,IAAK,IAAIhK,EAAI+rE,EAAa/rE,GAAK,EAAGA,IAAK,CACtC,IAAIgsE,EAAWnqC,EAAS7hC,GAExBgK,EAAS8hE,EAAQG,SAASjsC,EAAGC,EAAG+rC,EAASrrE,OAAQqrE,EAASl0D,IAAKk0D,EAASh6D,QAExE,GAAIhI,IAAW,EAAG,CACjB,KACJ,CACA,CAEE,OAAOA,CACT,GACA,EAGAihE,GAAKtxE,UAAUsyE,SAAW,SAAUjsC,EAAGC,EAAGt/B,EAAQmX,EAAK9F,GACnD,IAACk6D,EAASC,EAGb,IAAIC,EAAMt0D,GAAO,MAAQkoB,EAAIC,EAC7B,IAAIosC,EAAMv0D,GAAO,MAAQmoB,EAAID,EAE7BA,EAAIr/B,EAAOgK,cAAcyhE,EAAIlxD,WAC7B+kB,EAAIt/B,EAAOgK,cAAc0hE,EAAInxD,WAE7B8kB,SAAWA,IAAM,YAAcA,EAAI,GACnCC,SAAWA,IAAM,YAAcA,EAAI,GAEnCisC,EAAUE,EAAItoE,eACdqoE,EAAUE,EAAIvoE,eAEd,OAAOnD,EAAOjC,QAAQqR,KAAK7Q,OAAOvE,KAAKT,KAAM8lC,EAAGC,EAAGisC,EAASC,EAASxrE,EAAOmD,eAAgBgU,EAAK9F,EAClG,EAGAi5D,GAAKtxE,UAAUwkB,QAAU,CAGxBsgC,OAAQ,SAASA,EAAOze,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GACtD,IAAIw6D,EAAmBx6D,EAAOw6D,iBAC9B,IAAItf,EAAUl7C,EAAOy6D,iBACrB,IAAInf,EAAWt7C,EAAO06D,kBACtB,IAAIC,EAAa,EAEjB3sC,EAAIllC,OAAOklC,GACXC,EAAInlC,OAAOmlC,GAEX,GAAIqtB,EAAU,CACbttB,EAAIA,EAAEj9B,MAAMuqD,GAAU1f,KAAK,IAC3B3N,EAAIA,EAAEl9B,MAAMuqD,GAAU1f,KAAK,GAC9B,CAEE,GAAIsf,EAAS,CACZltB,EAAIA,EAAEj9B,MAAMmqD,GAAStf,KAAK,KAC1B3N,EAAIA,EAAEl9B,MAAMmqD,GAAStf,KAAK,IAC7B,CAEE5N,EAAIoS,WAAWpS,GACfC,EAAImS,WAAWnS,GAGf,GAAIpkC,MAAMmkC,GAAI,CACb2sC,EAAa9wE,MAAMokC,GAAK,GAAK,CAChC,MAAS,GAAIpkC,MAAMokC,GAAI,CACpB0sC,EAAa,CAChB,KAAS,CAEN,OAAO3sC,EAAIC,CACd,CAGE,GAAIusC,IAAqB,OAAS10D,IAAQ,QAAU00D,IAAqB,UAAY10D,IAAQ,MAAO,CACnG60D,IAAe,CAClB,CAEE,OAAOA,CACT,EAGCC,OAAQ,SAASA,EAAO5sC,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GACtD,IAAIw6D,EAAmBx6D,EAAOw6D,iBAC9B,IAAIG,EAAa,EACjB,IAAI/2C,EAGJ,IAAKoK,EAAG,CACP2sC,GAAc1sC,EAAI,GAAK,CAC1B,MAAS,IAAKA,EAAG,CACd0sC,EAAa,CAChB,KAAS,CAEN,OAAQrzE,EAAQ0Y,EAAO4jB,SACtB,IAAK,UACJ,GAAI5jB,EAAO4jB,OAAQ,CAClBA,EAAS17B,KAAKuC,MAAMiC,QAAQmP,SAAS8zB,WAC3C,CACK,MACD,IAAK,SACJ/L,EAAS5jB,EAAO4jB,OAChB,MAGF,OAAO96B,OAAOklC,GAAG4J,cAAcijC,cAAc/xE,OAAOmlC,GAAG2J,cAAehU,EACzE,CAGE,GAAI42C,IAAqB,OAAS10D,IAAQ,QAAU00D,IAAqB,UAAY10D,IAAQ,MAAO,CACnG60D,IAAe,CAClB,CAEE,OAAOA,CACT,EAGC7d,KAAM,SAASA,EAAK9uB,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GAClD,IAAKA,EAAO3B,OAAQ,CACnB2B,EAAO3B,OAAS,YACnB,CAEE,OAAOnW,KAAKikB,QAAQgwC,SAASxzD,KAAKT,KAAM8lC,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,EACzE,EAGC86D,KAAM,SAASA,EAAK9sC,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GAClD,IAAKA,EAAO3B,OAAQ,CACnB2B,EAAO3B,OAAS,OACnB,CAEE,OAAOnW,KAAKikB,QAAQgwC,SAASxzD,KAAKT,KAAM8lC,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,EACzE,EAGCm8C,SAAU,SAASA,EAASnuB,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GAC1D,IAAI3B,EAAS2B,EAAO3B,QAAU,sBAC1Bm8D,EAAmBx6D,EAAOw6D,iBAC1BG,EAAa,EAEjB,UAAWne,QAAU,YAAa,CACjCxuB,EAAIwuB,OAAOxuB,EAAG3vB,GACd4vB,EAAIuuB,OAAOvuB,EAAG5vB,GAEd,IAAK2vB,EAAElS,UAAW,CACjB6+C,GAAc1sC,EAAEnS,UAAY,GAAK,CACrC,MAAU,IAAKmS,EAAEnS,UAAW,CACxB6+C,EAAa,CACjB,KAAU,CAEN,OAAO3sC,EAAIC,CACf,CAGG,GAAIusC,IAAqB,OAAS10D,IAAQ,QAAU00D,IAAqB,UAAY10D,IAAQ,MAAO,CACnG60D,IAAe,CACnB,CAEG,OAAOA,CACV,KAAS,CACNpmE,QAAQ+T,MAAM,2DACjB,CACA,EAGCyyD,QAAS,SAASA,EAAQ/sC,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GACxD,IAAIo6D,EAAMpsC,IAAM,MAAQA,IAAM,QAAUA,IAAM,QAAUA,IAAM,EAAI,EAAI,EACtE,IAAIqsC,EAAMpsC,IAAM,MAAQA,IAAM,QAAUA,IAAM,QAAUA,IAAM,EAAI,EAAI,EAEtE,OAAOmsC,EAAMC,CACf,EAGCW,MAAO,SAASA,EAAMhtC,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GACpD,IAAIo6D,EAAM,EACV,IAAIC,EAAM,EACV,IAAIlkE,EAAO6J,EAAO7J,MAAQ,SAC1B,IAAIqkE,EAAmBx6D,EAAOw6D,iBAC9B,IAAIG,EAAa,EAEjB,SAASM,EAAKjzE,GAEb,OAAQmO,GACP,IAAK,SACJ,OAAOnO,EAAMM,OAGd,IAAK,MACJ,OAAON,EAAMg4C,QAAO,SAAUkI,EAAGgzB,GAChC,OAAOhzB,EAAIgzB,CACjB,IAGI,IAAK,MACJ,OAAO3xE,KAAKC,IAAI4pE,MAAM,KAAMprE,GAG7B,IAAK,MACJ,OAAOuB,KAAK+K,IAAI8+D,MAAM,KAAMprE,GAG7B,IAAK,MACJ,OAAOA,EAAMg4C,QAAO,SAAUkI,EAAGgzB,GAChC,OAAOhzB,EAAIgzB,CACjB,IAAUlzE,EAAMM,OAGhB,CAGE,IAAKV,MAAM2F,QAAQygC,GAAI,CACtBwsC,GAAoB5yE,MAAM2F,QAAQ0gC,GAAK,GAAK,CAC/C,MAAS,IAAKrmC,MAAM2F,QAAQ0gC,GAAI,CAC7BusC,EAAmB,CACtB,KAAS,CAGNJ,EAAMpsC,EAAIitC,EAAKjtC,GAAK,EACpBqsC,EAAMpsC,EAAIgtC,EAAKhtC,GAAK,EAEpB,OAAOmsC,EAAMC,CAChB,CAGE,GAAIG,IAAqB,OAAS10D,IAAQ,QAAU00D,IAAqB,UAAY10D,IAAQ,MAAO,CACnG60D,IAAe,CAClB,CAEE,OAAOA,CACT,EAGChW,OAAQ,SAASA,EAAO32B,EAAGC,EAAGqsC,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GACtD,IAAIo6D,SAAapsC,GAAK,YAAc,EAAI,EACxC,IAAIqsC,SAAapsC,GAAK,YAAc,EAAI,EAExC,OAAOmsC,EAAMC,CACf,EAGCc,SAAU,SAASA,EAASC,EAAIC,EAAIf,EAAMC,EAAM5rE,EAAQmX,EAAK9F,GAC5D,IAAIguB,EACAC,EACAqtC,EACAC,EACAvtE,EAAI,EACJwtE,EACAC,EAAK,eACLC,EAAK,KACT,IAAIlB,EAAmBx6D,EAAOw6D,iBAC9B,IAAIG,EAAa,EAGjB,IAAKS,GAAMA,IAAO,EAAG,CACpBT,GAAcU,GAAMA,IAAO,EAAI,GAAK,CACvC,MAAS,IAAKA,GAAMA,IAAO,EAAG,CAC3BV,EAAa,CAChB,KAAS,CAEN,GAAIgB,SAASP,IAAOO,SAASN,GAAK,OAAOD,EAAKC,EAC9CrtC,EAAIllC,OAAOsyE,GAAIxjC,cACf3J,EAAInlC,OAAOuyE,GAAIzjC,cACf,GAAI5J,IAAMC,EAAG,OAAO,EACpB,KAAMytC,EAAGlwC,KAAKwC,IAAM0tC,EAAGlwC,KAAKyC,IAAK,OAAOD,EAAIC,EAAI,GAAK,EACrDD,EAAIA,EAAExgC,MAAMiuE,GACZxtC,EAAIA,EAAEzgC,MAAMiuE,GACZD,EAAIxtC,EAAE1lC,OAAS2lC,EAAE3lC,OAAS2lC,EAAE3lC,OAAS0lC,EAAE1lC,OACvC,MAAO0F,EAAIwtE,EAAG,CACbF,EAAKttC,EAAEhgC,GACPutE,EAAKttC,EAAEjgC,KACP,GAAIstE,IAAOC,EAAI,CACd,GAAII,SAASL,IAAOK,SAASJ,GAAK,CACjC,GAAID,EAAG5hC,OAAO,KAAO,IAAK4hC,EAAK,IAAMA,EACrC,GAAIC,EAAG7hC,OAAO,KAAO,IAAK6hC,EAAK,IAAMA,EACrC,OAAOD,EAAKC,CAClB,MAAY,OAAOD,EAAKC,EAAK,GAAK,CAClC,CACA,CAEG,OAAOvtC,EAAE1lC,OAAS2lC,EAAE3lC,MACvB,CAGE,GAAIkyE,IAAqB,OAAS10D,IAAQ,QAAU00D,IAAqB,UAAY10D,IAAQ,MAAO,CACnG60D,IAAe,CAClB,CAEE,OAAOA,CACT,GAGA/kE,EAAUjO,UAAU6rC,eAAe,OAAQylC,IAE3C,IAAI2C,GAAW,SAASA,EAASnxE,GAChCvC,KAAKuC,MAAQA,EACbvC,KAAK2zE,aAAe,EACrB,EAGAD,GAASj0E,UAAU2U,iBAAmB,SAAU3N,GAC/C,IAAId,EAAO3F,KACP4K,EAAS,GACT0L,EAEJ,GAAI7P,EAAOH,WAAWgQ,UAAW,CAEhC,GAAI5W,MAAM2F,QAAQoB,EAAOH,WAAWgQ,WAAY,CAC/C7P,EAAOH,WAAWgQ,UAAU9Q,SAAQ,SAAUkc,GAC7CpL,EAAY3Q,EAAKiuE,kBAAkBlyD,GAEnC,GAAIpL,EAAW,CACd1L,EAAOrF,KAAK+Q,EACjB,CACA,GACA,KAAS,CACNA,EAAYtW,KAAK4zE,kBAAkBntE,EAAOH,WAAWgQ,WAErD,GAAIA,EAAW,CACd1L,EAAOrF,KAAK+Q,EAChB,CACA,CAEE7P,EAAOjC,QAAQuL,SAAWnF,EAAOxK,OAASwK,EAAS,KACrD,CACA,EAEA8oE,GAASj0E,UAAUm0E,kBAAoB,SAAU9zE,GAChD,IAAImO,EAAM6J,EAAQqJ,EAElB,cAAerhB,IAAU,YAAc,YAAcV,EAAQU,IAC5D,IAAK,SACJqhB,EAAMrhB,EAAMmB,QAAQ,KAEpB,GAAIkgB,GAAO,EAAG,CACblT,EAAOnO,EAAM+zE,UAAU,EAAG1yD,GAC1BrJ,EAAShY,EAAM+zE,UAAU1yD,EAAM,EACnC,KAAU,CACNlT,EAAOnO,CACX,CAEG,OAAOE,KAAK8zE,gBAAgB7lE,EAAM6J,GAGnC,IAAK,WACJ,OAAO9X,KAAK8zE,gBAAgBh0E,GAG7B,IAAK,SACJ,OAAOE,KAAK8zE,gBAAgBh0E,EAAMmO,KAAMnO,EAAMi0E,YAGjD,EAEAL,GAASj0E,UAAUq0E,gBAAkB,SAAU7lE,EAAM6J,GAEpD,IAAI63C,SAAc1hD,GAAQ,WAAaA,EAAOjO,KAAKg0E,WAAW/lE,GAE9D,IAAK0hD,EAAM,CACVtjD,QAAQC,KAAK,uDAAwD2B,GACrE,OAAO,KACT,KAAQ,CACN,MAAO,CACNA,YAAaA,GAAQ,WAAa,WAAaA,EAC/C0hD,KAAMA,EACN73C,OAAQA,EAEX,CACA,EAEA47D,GAASj0E,UAAUsQ,SAAW,SAAUikE,EAAY1oE,EAAMxL,GACzD,IAAI6F,EAAO3F,KACP22B,EAAQ,GACRs9C,EAAej0E,KAAK2zE,aAAa1yE,QAAQqK,GAE7C,GAAI0oE,EAAY,CACfA,EAAWxuE,SAAQ,SAAUkc,GAC5B,IAAKA,EAAKiuC,KAAKlvD,KAAKkF,EAAM2F,EAAK1B,eAAgB9J,EAAO4hB,EAAK5J,QAAS,CACnE6e,EAAMpxB,KAAK,CACV0I,KAAMyT,EAAKzT,KACX8lE,WAAYryD,EAAK5J,QAEtB,CACA,GACA,CAEC6e,EAAQA,EAAMv2B,OAASu2B,EAAQ,KAE/B,IAAKrrB,EAAK9G,QAAQuL,SAAU,CAC3BzE,EAAK9G,QAAQuL,SAAW,EAC1B,CAEC,GAAI4mB,IAAU,KAAM,CACnBrrB,EAAK9G,QAAQuL,SAAS4K,QAAU,MAChCrP,EAAKxH,aAAaP,UAAUmkB,OAAO,6BAEnC,GAAIusD,GAAgB,EAAG,CACtBj0E,KAAK2zE,aAAa3sE,OAAOitE,EAAc,EAC1C,CACA,KAAQ,CACN3oE,EAAK9G,QAAQuL,SAAS4K,QAAU,KAEhC,GAAI3a,KAAKuC,MAAMkB,QAAQu9B,iBAAmB,SAAU,CACnD11B,EAAKxH,aAAaP,UAAUC,IAAI,4BACnC,CAEE,GAAIywE,IAAiB,EAAG,CACvBj0E,KAAK2zE,aAAapuE,KAAK+F,EAC1B,CACA,CAEC,OAAOqrB,CACR,EAEA+8C,GAASj0E,UAAUgpC,gBAAkB,WACpC,IAAIl/B,EAAS,GAEbvJ,KAAK2zE,aAAanuE,SAAQ,SAAU8F,GACnC/B,EAAOhE,KAAK+F,EAAK1B,eACnB,IAEC,OAAOL,CACR,EAEAmqE,GAASj0E,UAAUo0B,gBAAkB,SAAUvoB,GAC9C,IAAI2oE,EAEJ,GAAI3oE,EAAK9G,QAAQuL,UAAYzE,EAAK9G,QAAQuL,SAAS4K,QAAS,CAE3DrP,EAAKxH,aAAaP,UAAUmkB,OAAO,6BACnCpc,EAAK9G,QAAQuL,SAAS4K,QAAU,MAEhCs5D,EAAej0E,KAAK2zE,aAAa1yE,QAAQqK,GAEzC,GAAI2oE,GAAgB,EAAG,CACtBj0E,KAAK2zE,aAAa3sE,OAAOitE,EAAc,EAC1C,CACA,CACA,EAEAP,GAASj0E,UAAUu0E,WAAa,CAG/BjhB,QAAS,SAASA,EAAQznD,EAAMxL,EAAOi0E,GACtC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACEA,EAAQk4C,OAAOl4C,GACf,cAAcA,IAAU,UAAY2zE,SAAS3zE,IAAUuB,KAAK0Y,MAAMja,KAAWA,CAC/E,EAGCo0E,MAAO,SAASA,EAAM5oE,EAAMxL,EAAOi0E,GAClC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACEA,EAAQk4C,OAAOl4C,GACf,cAAcA,IAAU,UAAY2zE,SAAS3zE,IAAUA,EAAQ,IAAM,CACvE,EAGCq0E,QAAS,SAASA,EAAQ7oE,EAAMxL,EAAOi0E,GACtC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAQ6B,MAAM7B,EAChB,EAGC4yE,OAAQ,SAASA,EAAOpnE,EAAMxL,EAAOi0E,GACpC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAO6B,MAAM7B,EACf,EAGCwB,IAAK,SAASA,EAAIgK,EAAMxL,EAAOi0E,GAC9B,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOo4C,WAAWp4C,IAAUi0E,CAC9B,EAGC3nE,IAAK,SAASA,EAAId,EAAMxL,EAAOi0E,GAC9B,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOo4C,WAAWp4C,IAAUi0E,CAC9B,EAGCniB,OAAQ,SAASA,EAAOtmD,EAAMxL,EAAOi0E,GACpC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOc,OAAOd,GAAO4vC,cAAc6X,WAAW3mD,OAAOmzE,GAAYrkC,cACnE,EAGCmiB,KAAM,SAASA,EAAKvmD,EAAMxL,EAAOi0E,GAChC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOc,OAAOd,GAAO4vC,cAAcoiB,SAASlxD,OAAOmzE,GAAYrkC,cACjE,EAGC0kC,UAAW,SAASA,EAAU9oE,EAAMxL,EAAOi0E,GAC1C,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOc,OAAOd,GAAOM,QAAU2zE,CACjC,EAGCM,UAAW,SAASA,EAAU/oE,EAAMxL,EAAOi0E,GAC1C,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,OAAOc,OAAOd,GAAOM,QAAU2zE,CACjC,EAGChiB,GAAI,SAASC,EAAI1mD,EAAMxL,EAAOi0E,GAC7B,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,UAAWi0E,GAAc,SAAU,CAClCA,EAAaA,EAAWlrE,MAAM,IACjC,CAEE,OAAO/I,IAAU,IAAMi0E,EAAW9yE,QAAQnB,IAAU,CACtD,EAGCwxD,MAAO,SAASA,EAAMhmD,EAAMxL,EAAOi0E,GAClC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,IAAIw0E,EAAM,IAAItzE,OAAO+yE,GAErB,OAAOO,EAAIhxC,KAAKxjC,EAClB,EAGCy0E,OAAQ,SAASA,EAAOjpE,EAAMxL,EAAOi0E,GACpC,GAAIj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,YAAa,CACnE,OAAO,IACV,CACE,IAAIy0E,EAAS,KAEb,IAAIC,EAAWlpE,EAAK0V,UACpB,IAAIva,EAAS6E,EAAK6nB,YAAY/qB,WAE9BpI,KAAKuC,MAAMM,WAAWoI,KAAKzF,SAAQ,SAAUT,GAC5C,IAAIJ,EAAOI,EAAIic,UAEf,GAAIrc,IAAS6vE,EAAU,CACtB,GAAI10E,GAAS2G,EAAOgK,cAAc9L,GAAO,CACxC4vE,EAAS,KACd,CACA,CACA,IAEE,OAAOA,CACT,EAGC/oC,SAAU,SAASA,EAASlgC,EAAMxL,EAAOi0E,GACxC,OAAOj0E,IAAU,IAAMA,IAAU,aAAeA,IAAU,WAC5D,GAGA4N,EAAUjO,UAAU6rC,eAAe,WAAYooC,ICnluB/C,MAAMv5B,QAACA,IAAW,GAIlB,MAAMs6B,GAAK,WAEX,MAAMC,GAAO,CACX,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,UAEP,MAAMC,GAAKC,GAAKF,GAAKE,GASd,MAAMC,GAASC,GAAM36B,GAAQ15C,KAAKq0E,EAAIL,GAAIE,I,MCtCpCI,GACTv1E,YAAoBw1E,GAAAh1E,KAAAg1E,OAChBh1E,KAAKkvB,OAASlvB,KAAKkvB,OAAOtb,KAAK5T,K,CAS5BkvB,OAAOzoB,G,MACV,MAAMH,EAAyC,CAC3ClB,MAAOqB,EAAOrB,MACdD,MAAOsB,EAAOtB,MACdmL,SAAU7J,EAAOwuE,gBACjBv8C,WAAYjyB,EAAOiyB,WACnBy4C,sBAAuB,QAG3B,GAAI1qE,EAAOyuE,gBAAiB,CACxB5uE,EAAW2R,eAAiBk9D,GAAa1uE,E,CAG7C,KAAI2uE,EAAA3uE,EAAOuL,aAAS,MAAAojE,SAAA,SAAAA,EAAEjqC,OAAQ1kC,EAAOmR,UAAW,CAC5CtR,EAAWsR,UAAYy9D,GAAgB5uE,EAAQzG,KAAKg1E,MACpD1uE,EAAWssD,gBAAkBnsD,C,CAGjC,GAAIA,EAAO6uE,WAAY,CACnBhvE,EAAWoO,WAAa6gE,GAAoB9uE,E,CAGhD,OAAOH,C,EAUR,MAAM6uE,GAAgB1uE,GAAmB,KAC5C,MAAMypD,EAAgB7sD,SAASC,cAAc,OAC7C4sD,EAAcv9C,aAAa,QAAS,oCAEpC,MAAMzC,EAAe7M,SAASC,cAAc,QAC5C4M,EAAayC,aAAa,QAAS,wBACnCzC,EAAa6+D,UAAYtoE,EAAOrB,MAEhC,MAAMowE,EAAgBnyE,SAASC,cAAcmD,EAAOyuE,gBAAgB/pC,MACpEqqC,EAAc7iE,aAAa,QAAS,wBAEpC,IAAI87C,EAAgBhoD,EAAOyuE,gBAAgBzmB,OAAS,GACpD,GAAIhoD,EAAOyuE,gBAAgBO,aAAc,CACrChnB,EAAK7uD,OAAAgC,OAAAhC,OAAAgC,OAAA,GACE6sD,GAEAhoD,EAAOyuE,gBAAgBO,aAAa,M,CAI/CC,GAAqBF,EAAe/mB,GAEpCyB,EAAc9oD,YAAY8I,GAC1BggD,EAAc9oD,YAAYouE,GAE1B,OAAOtlB,CAAa,E,SAURmlB,GACZ5uE,EACAuuE,G,MAEA,MAAKI,EAAA3uE,EAAOuL,aAAS,MAAAojE,SAAA,SAAAA,EAAEjqC,MAAM,CACzB,OAAOwqC,E,CAGX,IAAKC,GAAoBnvE,GAAS,CAE9B4F,QAAQC,KACJ,iDAAiD7F,EAAOtB,MAAMgzC,gCAC1D1xC,EAAOuL,UAAUm5B,uDAIzB,OAAOwqC,E,CAGX,OAAQrqE,IACJ,MAAMxL,EAAQ61E,GAAWrqE,EAAM7E,GAE/B,OAAOovE,GAAsBvqE,EAAM7E,EAAQ3G,EAAOk1E,EAAK,CAE/D,CAEA,SAASY,GAAoBnvE,GACzB,MAAM0kC,EAAO1kC,EAAOuL,UAAUm5B,KAC9B,UAAWA,IAAS,SAAU,CAC1B,MAAM2qC,GAAmB3qC,EAAKtqC,SAAS,KACvC,MAAMk1E,EAAsBC,eAAehN,IAAIviE,EAAOuL,UAAUm5B,MAEhE,OAAO2qC,GAAmBC,C,KACvB,CACH,OAAO,K,CAEf,C,SASgBJ,GACZrqE,EACA7E,GAEA,MAAM9B,EAAO2G,EAAK0V,UAClB,IAAIlhB,EAAQwL,EAAK6M,WAEjB,GAAI1R,EAAOmR,UAAW,CAClB9X,EAAQ2G,EAAOmR,UAAU9X,EAAO6E,E,CAGpC,UAAW7E,IAAU,WAAa2G,EAAOuL,UAAW,CAChDlS,EAAQ+0E,GAAO/0E,E,CAGnB,OAAOA,CACX,C,SAWgB+1E,GACZvqE,EACA7E,EACA3G,EACAk1E,GAEA,MAAM7vE,EAAQmG,EAAKkC,WACnB,MAAM7I,EAAO2G,EAAK0V,UAElB,MAAMre,EAAUqyE,EAAKhM,IAAIviE,EAAOuL,UAAUm5B,MAC1C,IAAIsjB,EAAgBhoD,EAAOuL,UAAUy8C,OAAS,GAC9C,GAAIhoD,EAAOuL,UAAUyjE,aAAc,CAC/BhnB,EAAK7uD,OAAAgC,OAAAhC,OAAAgC,OAAA,GACE6sD,GACAhoD,EAAOuL,UAAUyjE,aAAa9wE,G,CAIzC8pD,EAAK7uD,OAAAgC,OAAAhC,OAAAgC,OAAA,GACE6sD,GAAK,CACRtpD,MAAOA,EACPrF,MAAOA,EACP6E,KAAMA,IAGVhC,EAAQ0B,MAAMoV,QAAU,eACxBi8D,GAAqB/yE,EAAS8rD,GAE9BwnB,GAAqBtzE,EAAS2I,EAAK6nB,aAEnC,OAAOxwB,CACX,C,SAQgB+yE,GAAqB/yE,EAAsB8rD,GACvD,MAAMynB,EAAaC,EAAO1nB,EAAO2nB,EAAOC,KACxCz2E,OAAOgC,OAAOe,EAASuzE,GAEvB,MAAMI,EAAYH,EAAO1nB,EAAO4nB,IAChCz2E,OAAO22E,QAAQD,GAAW9wE,SAAQ,EAAEP,EAAKnF,MACrC,MAAM8pB,EAAQ4sD,GAAavxE,GAC3BtC,EAAQgS,iBAAiBiV,EAAO9pB,EAAa,GAErD,CAYA,SAASu2E,GAAgBv2E,EAAYmF,GACjC,UAAWnF,IAAU,WAAY,CAC7B,OAAO,K,CAGX,MAAO,WAAWwjC,KAAKr+B,EAC3B,CAUA,SAASuxE,GAAaC,GAElB,OAAOA,EAAcjlC,OAAO,GAAG9B,cAAgB+mC,EAAcpxD,MAAM,EACvE,CAEA,SAAS4wD,GACLtzE,EACA8D,GAEA,KAAM,mBAAoBikB,QAAS,CAC/B,M,CAGJ,MAAMgsD,EAAiB,IACvB,MAAMC,EAAiB,GAEvB,MAAMhK,EAAW,IAAIO,gBAAe,KAChC,MAAMpjE,EAAQnH,EAAQwmB,wBAAwBrf,MAC9C,MAAM8sE,EAAW9sE,EAAQ6sE,EAEzB,GAAIC,EAAWnwE,EAAOoD,WAAY,CAC9B,M,CAGJpD,EAAOoJ,SAAS+mE,EAAS,IAE7BjK,EAASY,QAAQ5qE,GAIjB4S,YAAW,KACPo3D,EAASa,UAAU7qE,EAAQ,GAC5B+zE,EACP,CAcO,MAAMG,GACR/zE,GACAkC,IACG,MAAMyB,EAAS3D,EAAQpC,MAAMwE,GAAQA,EAAIC,QAAUH,EAAOG,QAC1D,MAAMm8B,EAAYt8B,EAAO4Y,IAAI6zB,cAE7B,MAAO,CACHhrC,OAAQA,EACR66B,UAAWA,EACd,E,SAGOi0C,GAAoB9uE,GAChC,MAAM6uE,EAAa7uE,EAAO6uE,WAC1B,GAAIwB,GAAqBxB,GAAa,CAClC,MAAO,CAAC/rC,EAAe5kC,IACZ2wE,EAAW7uE,EAAQ8iC,EAAQ5kC,E,CAI1C,OAAO2wE,CACX,CAEA,SAASwB,GAAqBh3E,GAC1B,cAAcA,IAAU,UAC5B,C,MChTai3E,GAKTv3E,YAAY6D,GAuBJrD,KAAAg3E,OAAUr0E,IACN3C,KAAKi3E,aAAaC,IAAIv0E,GAvB9B3C,KAAKqD,SAAWA,EAChBrD,KAAKm3E,aACLn3E,KAAK6f,O,CASFmpD,IAAI79B,G,MACP,IAAIxoC,GAAUyyE,EAAAp1E,KAAKg1E,KAAK7pC,MAAK,MAAAiqC,SAAA,SAAAA,EAAE10E,KAAKV,KAAKg3E,QACzC,IAAKr0E,EAAS,CACVA,EAAU3C,KAAKsD,cAAc6nC,E,CAGjCnrC,KAAKi3E,aAAalO,IAAIpmE,EAAS,MAE/B,OAAOA,C,CAYJy0E,QAAQz0E,GACX3C,KAAKi3E,aAAazoE,OAAO7L,E,CAMtBw0E,aACHn3E,KAAKi3E,aAAe,IAAII,O,CAOrBx3D,QACH7f,KAAKg1E,KAAO,E,CAGR1xE,cAAc6nC,GAClB,MAAMxoC,EAAU3C,KAAKqD,SAASC,cAAc6nC,GAC5C,KAAMA,KAAQnrC,KAAKg1E,MAAO,CACtBh1E,KAAKg1E,KAAK7pC,GAAQ,E,CAGtBnrC,KAAKg1E,KAAK7pC,GAAM5lC,KAAK5C,GAErB,OAAOA,C,QCxCF20E,GAYT93E,YAAoB+3E,GAAAv3E,KAAAu3E,iBAwEZv3E,KAAAw3E,YAAc,CAClBr2E,EACA6J,KAEA,MAAMwiB,GAAUxtB,KAAKy3E,cAAcP,IAAIl3E,KAAKu3E,eAAevsE,IAE3D,MAAM0sE,EAAar2E,KAAK+K,IAAIjL,EAAW6J,GACvC,MAAM2sE,EAAat2E,KAAKC,IAAIH,EAAW6J,GACvC,MAAM4sE,EAAiB,GACvB,MAAMC,EAAe,GACrB,IAAK,IAAI71E,EAAQ01E,EAAY11E,GAAS21E,EAAY31E,IAAS,CACvD,MAAM2C,EAAO3E,KAAKu3E,eAAev1E,GAEjC,IAAK2C,EAAM,CACP,Q,CAGJ,MAAMkpB,EAAa7tB,KAAKy3E,cAAcP,IAAIvyE,GAE1C,GAAIkpB,IAAeL,EAAQ,CACvB,Q,CAGJ,GAAIA,EAAQ,CACRxtB,KAAKy3E,cAAcj0E,IAAImB,E,KACpB,CACH3E,KAAKy3E,cAAcjpE,OAAO7J,E,CAG9BizE,EAAeryE,KAAKvD,GACpB61E,EAAatyE,KAAKZ,E,CAGtB3E,KAAK83E,iBAAmB9sE,EAExB,MAAO,CACHukE,SAAU/hD,EACV4iB,MAAOynC,EACPE,QAASH,EACZ,EA9GD53E,KAAK6f,O,CAMLkpB,WACA,OAAO/oC,KAAKy3E,cAAc1uC,I,CAM1BqH,YACA,OAAO1wC,MAAMsK,KAAKhK,KAAKy3E,c,CAMvBrnC,UAAMA,GACNpwC,KAAKy3E,cAAgB,IAAIO,IAAI5nC,GAC7BpwC,KAAK83E,kBAAoB,C,CAStBZ,IAAIvyE,GACP,OAAO3E,KAAKy3E,cAAcP,IAAIvyE,E,CAS3BszE,gBAAgBj2E,GACnB,OAAOhC,KAAKw3E,YAAYx1E,EAAOA,E,CAa5Bk2E,6BAA6Bl2E,GAChC,GAAIhC,KAAK83E,iBAAmB,EAAG,CAC3B,OAAO93E,KAAKi4E,gBAAgBj2E,E,CAGhC,OAAOhC,KAAKw3E,YAAYx3E,KAAK83E,iBAAkB91E,E,CAM5C6d,QACH7f,KAAKy3E,cAAgB,IAAIO,IACzBh4E,KAAK83E,kBAAoB,C,EClGjC,MAAMK,GAAiB,iBAEvB,MAAMC,GAAYzzE,IAAa,IAAAywE,EAAK,OAAAA,EAAAzwE,EAAKujE,MAAE,MAAAkN,SAAA,EAAAA,EAAIzwE,CAAI,E,MAKtC0zE,GAUT74E,YACYoP,EACAomE,EACAsD,GAFAt4E,KAAA4O,WACA5O,KAAAg1E,OACAh1E,KAAAs4E,cAiGFt4E,KAAAu4E,qBAAuB,CAC7BC,EACAltE,KAEAktE,EAAGlhE,kBACHkhE,EAAGpjD,iBAEH,MAAMqjD,EAAantE,EAAK4nB,SACxB,MAAMwlD,EAAcD,EAAWtrD,YAAY,MAE3C,GAAIqrD,EAAGza,SAAU,CACb/9D,KAAK24E,mBACD34E,KAAKq1B,UAAU6iD,6BAA6BQ,G,KAE7C,CACH14E,KAAK24E,mBACD34E,KAAKq1B,UAAU4iD,gBAAgBS,G,CAIvC14E,KAAKs4E,YAAYM,KAAK54E,KAAKq1B,UAAU+a,MAAMyoC,IAAI74E,KAAK84E,YAAY,EAG5D94E,KAAA84E,WAAcp3D,IAClB,UAAWA,IAAS,SAAU,CAC1B,OAAOA,C,CAGX,OAAO1hB,KAAK4O,WAAWskB,OAAOxR,GAAMV,SAAS,EAGzChhB,KAAA24E,mBAAsBI,IAC1BA,EAAUhB,QACLc,IAAI74E,KAAKg5E,eACTxzE,SAAST,GAAQ/E,KAAKi5E,kBAAkBl0E,EAAKg0E,EAAUxJ,WAAU,EAGlEvvE,KAAAi5E,kBAAoB,CACxBl0E,EACAgmD,KAEA,MAAMz/C,EAAOvG,EAAImJ,WAAW,GAC5B,GAAI5C,EAAM,CACN,MAAM4tE,EAAW5tE,EAAKxH,aAAawzB,cAAc6gD,IACjDe,EAASnuB,QAAUA,C,GAInB/qD,KAAAm5E,cAAgD,KACpD,MAAM52E,EAAQvC,KAAK4O,WACnB,IAAKrM,EAAO,CACR,MAAO,E,CAGX,OAAOA,EAAMqhB,QAAQ,SAAS,EAG1B5jB,KAAAg5E,cAAiBh3E,GACdhC,KAAK4O,WAAW0P,mBAAmBtc,EAAO,MAzJjDhC,KAAKq1B,UAAY,IAAIiiD,IAAWt1E,GAC5Bo2E,GAASp4E,KAAKg5E,cAAch3E,GAAOgf,Y,CAOvCo4D,mBACA,OAAOp5E,KAAKq1B,UAAU0T,KAAO,C,CAM1BlpB,QACH7f,KAAKq1B,UAAUxV,O,CAQZw5D,aAAa10E,EAAkB,IAClC,MAAM20E,EAAW30E,EAAKk0E,IAAIT,IAC1B,GACIp4E,KAAKq1B,UAAU0T,OAASpkC,EAAKvE,QAC7BJ,KAAKq1B,UAAU+a,MAAM4qB,OACjB,CAACue,EAASv3E,IAAUu3E,IAAYD,EAASt3E,KAE/C,CACE,M,CAGJhC,KAAKq1B,UAAU+a,MAAQkpC,EACvB,MAAMruE,EAAOjL,KAAKm5E,gBAClBluE,EAAKzF,SAAST,GACV/E,KAAKi5E,kBACDl0E,EACA/E,KAAKq1B,UAAU6hD,IAAIkB,GAASrzE,EAAIic,c,CAWrC0lB,qBACH8yC,GAEA,MAAO,CAACx5E,KAAKy5E,oCAAqCD,E,CAG9CC,iCACJ,MAAO,CACHr0E,MAAO,GACPwS,UAAW5X,KAAK05E,0BAChB1oE,UAAWhR,KAAKu4E,qBAChBvjE,YAAahV,KAAKgV,YAClB0jB,WAAY,MACZjiB,SAAU,4BACV21D,UAAW,MACXh5D,WAAY,MACZ4lB,UAAW,M,CAIXhkB,YAAYwjE,GAChBA,EAAGlhE,iB,CAGCoiE,0BACJ,OAAQpuE,IACJ,MAAM3I,EAAU3C,KAAKg1E,KAAKhM,IAAImP,IAC9BzC,GAAqB/yE,EAAS,CAC1BooD,QAAS/qD,KAAKq1B,UAAU6hD,IAAIkB,GAAS9sE,EAAK0V,cAE9Cre,EAAQ0B,MAAMoV,QAAU,eAExB,OAAO9W,CAAO,C,WC5FVg3E,GAAUvsE,GACtB,MAAMwsE,EAAU,CACZC,kBAAmB,iBACnBC,eAAgB,aAChBC,WAAY,WAGhB,OAAOH,EAAQxsE,IAAW,aAC9B,CC5BA,MAAM4sE,GAAW,y1uCCwBjB,MAAMC,GAAa,E,MAwBNC,GAAK,MA2Jd16E,YAAA26E,G,2PAofQn6E,KAAAm5E,cAAgD,KACpD,IAAKn5E,KAAKo6E,UAAW,CACjB,MAAO,E,CAGX,OAAOp6E,KAAKo6E,UAAUx2D,QAAQ,SAAS,EAGnC5jB,KAAAq6E,kBAAoC,IAIjCr6E,KAAKm5E,gBAAgBN,KAAK9zE,GAAQA,EAAIic,YAGzChhB,KAAAs6E,kBAAqB9B,IACzB,MAAM+B,EAAY/B,EAAGgC,OAErBhC,EAAGlhE,kBACHkhE,EAAGpjD,iBAEH,MAAMqlD,EAAeF,EAAYv6E,KAAKq6E,oBAAsB,GAC5Dr6E,KAAKwtB,OAAOorD,KAAK6B,GACjBz6E,KAAK06E,eAAerB,aAAaoB,GACjCz6E,KAAKu6E,UAAU3B,KAAK2B,EAAU,EAmD1Bv6E,KAAA26E,iBAAmB,KACvB,IAAK36E,KAAKwU,eAAgB,CACtB,MAAO,E,CAGX,MAAO,CACHA,eAAgB,KAChB/J,YAAazK,KAAK46E,iBACrB,EAGG56E,KAAA46E,iBAAmB,CAAC1pB,EAAG2pB,KAC3B,MAAM/3E,EAAU+3E,EAAWhC,IAAI74E,KAAKiI,YAAY6G,QAAQkxC,GAAMA,IAC9DhgD,KAAK86E,cAAclC,KAAK91E,EAAQ,EAG5B9C,KAAAiI,WAAc+J,GACXhS,KAAK8C,QAAQpC,MAAM+F,GAElBA,EAAOtB,QAAU6M,EAAUxE,YAC3B/G,EAAOrB,QAAU4M,EAAUxI,gBAAgBpE,Q,UAzuB/B,G,aAMG,G,UASO,Q,oFA6BD,G,oEAkBP,M,UAMJ60E,G,yGAmFlBj6E,KAAK+6E,kBAAoB/6E,KAAK+6E,kBAAkBnnE,KAAK5T,MACrDA,KAAKg7E,iBAAmBh7E,KAAKg7E,iBAAiBpnE,KAAK5T,MACnDA,KAAKi7E,qBAAuBj7E,KAAKi7E,qBAAqBrnE,KAAK5T,MAC3DA,KAAKk7E,YAAcl7E,KAAKk7E,YAAYtnE,KAAK5T,MACzCA,KAAKm7E,WAAan7E,KAAKm7E,WAAWvnE,KAAK5T,MACvCA,KAAKo7E,UAAYp7E,KAAKo7E,UAAUxnE,KAAK5T,MACrCA,KAAKq7E,WAAar7E,KAAKq7E,WAAWznE,KAAK5T,MACvCA,KAAKs7E,cAAgBt7E,KAAKs7E,cAAc1nE,KAAK5T,MAC7CA,KAAKu7E,uBAAyBv7E,KAAKu7E,uBAAuB3nE,KAAK5T,MAC/DA,KAAKq5E,aAAer5E,KAAKq5E,aAAazlE,KAAK5T,MAC3CA,KAAKw7E,oBAAsBx7E,KAAKw7E,oBAAoB5nE,KAAK5T,MACzDA,KAAKg1E,KAAO,IAAI+B,GAAY1zE,UAC5BrD,KAAKy7E,cAAgB,IAAI1G,GAAwB/0E,KAAKg1E,K,CAGnD0G,oBACH17E,KAAK27E,aAAe37E,KAAK0sC,OAAS,SAClC1sC,KAAK47E,oB,CAGFC,mBACH77E,KAAK87E,M,CAGFC,uBACH/7E,KAAKg1E,KAAKn1D,O,CAIJm8D,mBACNh8E,KAAKs7E,e,CAICW,kBACNj8E,KAAKs7E,e,CAICY,cACN,IAAKl8E,KAAKo6E,UAAW,CACjB,M,CAGJ,GAAIp6E,KAAKo6E,UAAUnxC,YAAcjpC,KAAK8hB,KAAM,CACxC,M,CAGJ9hB,KAAKo6E,UAAU11D,QAAQ1kB,KAAK8hB,K,CAItBq6D,mBACN,IAAKn8E,KAAKo6E,UAAW,CACjB,M,CAGJp6E,KAAKq7E,Y,CAIC9tD,WAAW6uD,EAAqB,GAAIC,EAAqB,IAC/D,MAAMC,EAAgBt8E,KAAKu8E,kBAAkBH,EAASC,GAEtD9mE,YAAW,KACP,IAAKvV,KAAKo6E,UAAW,CACjB,M,CAGJ,GAAIkC,EAAe,CACft8E,KAAKg1E,KAAKmC,aACVn3E,KAAKo6E,UAAUn1C,YAAYm3C,GAC3Bp8E,KAAKq5E,eAEL,M,CAGJr5E,KAAKo6E,UAAU90C,gBAAgB82C,EAAQ,G,CAKrCI,cAAcC,EAAsBC,GAC1C,IAAK18E,KAAKo6E,UAAW,CACjB,M,CAGJ,GAAIp6E,KAAK28E,eAAeF,EAAYC,GAAa,CAC7C,M,CAGJ,MAAME,EAAiB58E,KAAKo6E,UACvBnxE,aACA6F,QAAQkxC,GAAMA,EAAExyC,aAErB,MAAMqvE,EAAoBD,EAAe/D,KAAK74B,GAC1C08B,EAAWh8E,MAAMgrB,GAAQA,EAAIvmB,QAAU66C,EAAExyC,eAG7C,GAAIxN,KAAK28E,eAAeF,EAAYI,GAAoB,CACpD,M,CAKJ78E,KAAK87E,M,CAICgB,iBACNC,EACAC,GAEA,IAAKh9E,KAAKo6E,UAAW,CACjB,M,CAGJ,GAAI6C,EAAQF,EAAeC,GAAgB,CACvC,M,CAGJ,IAAKh9E,KAAKk9E,wBAAwBH,EAAeC,GAAgB,CAC7Dh9E,KAAK87E,OAEL,M,CAGJ97E,KAAKo6E,UAAUhwE,SACfpK,KAAKo6E,UAAUv3E,WAAWwD,Q,CAIpB82E,gBAAgB1C,GACtB,IAAKz6E,KAAK06E,eAAgB,CACtB,M,CAGJ16E,KAAK06E,eAAerB,aAAaoB,E,CAI3B2C,mBACN,GAAIp9E,KAAK06E,iBAAmB16E,KAAKklB,WAAY,CACzCllB,KAAK06E,eAAiB,I,CAG1B16E,KAAK47E,qBACL57E,KAAK87E,M,CAICuB,cACNjnD,EACApC,GAEA,MAAMspD,EAAat9E,KAAKu9E,gBAAgBnnD,GACxC,MAAMonD,EAAax9E,KAAKu9E,gBAAgBvpD,GACxC,GAAIipD,EAAQK,EAAYE,GAAa,CACjC,M,CAGJx9E,KAAKo6E,UAAU13C,QAAQ46C,E,CAGnBf,kBAAkBH,EAAoBC,GAC1C,MAAMoB,EAASrB,EAAQvD,KAAKn3D,IAAI,IAAA0zD,EAAK,OAAAA,EAAA1zD,EAAKwmD,MAAE,MAAAkN,SAAA,EAAAA,EAAI1zD,CAAI,IAGpD,MAAMg8D,EAASrB,EAAQxD,KAAKn3D,IAAI,IAAA0zD,EAAK,OAAAA,EAAA1zD,EAAKwmD,MAAE,MAAAkN,SAAA,EAAAA,EAAI1zD,CAAI,IAIpD,OACK1hB,KAAK29E,YAAYF,EAAQC,KACzB19E,KAAK49E,YAAYH,EAAQC,E,CAI1BC,YACJF,EACAC,GAEA,MAAMG,EAAW,IAAI7F,IAAIyF,GACzB,MAAMK,EAAW,IAAI9F,IAAI0F,GAEzB,OACIG,EAAS90C,OAAS+0C,EAAS/0C,MAC3B00C,EAAOziB,OAAOkN,GAAO4V,EAAS5G,IAAIhP,I,CAIlC0V,YACJH,EACAC,GAEA,OAAOD,EAAOziB,OAAM,CAACkN,EAAIlmE,IAAUkmE,IAAOwV,EAAO17E,I,CAG7C26E,eAAeF,EAAsBC,GACzC,OACID,EAAWr8E,SAAWs8E,EAAWt8E,QACjCq8E,EAAWzhB,OAAOv0D,GAAWi2E,EAAW77E,SAAS4F,I,CAIjDy2E,wBACJH,EACAC,GAEA,MAAMe,GAAqBf,IAAa,MAAbA,SAAa,SAAbA,EAAenE,KAAK/yC,GAAMA,EAAE3gC,UAAU,GAEjE,OACI43E,IAAa,MAAbA,SAAa,SAAbA,EAAe38E,WAAW48E,IAAa,MAAbA,SAAa,SAAbA,EAAe58E,YACvC28E,IAAa,MAAbA,SAAa,SAAbA,EAAe/hB,OAAOl1B,GAAMi4C,EAAmBl9E,SAASilC,EAAE3gC,S,CAI5D22E,OACJ,GAAI97E,KAAKo6E,UAAW,CAChBp6E,KAAKg1E,KAAKmC,aACVn3E,KAAKo6E,UAAUv3C,S,CAGnB,MAAMtgC,EACFvC,KAAKg+E,KAAKC,WAAW3mD,cAAc,oBACvCt3B,KAAKu7E,uBAAuBh5E,E,CAYxBg5E,uBAAuBh5E,GAI3B,KAAM,mBAAoBmoB,QAAS,CAC/B1qB,KAAKo6E,UAAY,IAAI8D,EAAe37E,EAAOvC,KAAKm+E,cAChDn+E,KAAKq5E,eAEL,M,CAGJ,MAAM1M,EAAW,IAAIO,gBAAe,KAChCkR,uBAAsB,KAClBp+E,KAAKo6E,UAAY,IAAI8D,EAAe37E,EAAOvC,KAAKm+E,cAChDn+E,KAAKq5E,eACL1M,EAASa,UAAUjrE,GACnBoqE,EAAS/H,YAAY,GACvB,IAEN+H,EAASY,QAAQhrE,E,CAGbq5E,qBACJ,GAAI57E,KAAKklB,WAAY,CACjBllB,KAAK06E,eAAiB,IAAIrC,IACtB,IAAMr4E,KAAKo6E,WACXp6E,KAAKg1E,KACLh1E,KAAKwtB,QAETxtB,KAAK06E,eAAerB,aAAar5E,KAAKq1B,U,EAItCgkD,eACJ,KAAMr5E,KAAKo6E,WAAap6E,KAAK06E,gBAAiB,CAC1C,M,CAGJ16E,KAAK06E,eAAerB,aAAar5E,KAAKq1B,U,CAGlCimD,gB,OACJlG,EAAAp1E,KAAKo6E,aAAS,MAAAhF,SAAA,SAAAA,EAAExsC,WAAW5oC,KAAKq+E,qB,CAG5BF,aACJ,MAAMG,EAAct+E,KAAKu+E,iBACzB,MAAMC,EAAoBx+E,KAAKy+E,uBAC/B,MAAMC,EAAgB1+E,KAAK26E,mBAE3B,OAAA/6E,OAAAgC,OAAAhC,OAAAgC,OAAAhC,OAAAgC,OAAAhC,OAAAgC,OAAA,CACI+C,KAAM3E,KAAK2E,KACXyI,OAAQusE,GAAU35E,KAAKoN,QACvBtK,QAAS9C,KAAK0mC,uBACd3G,YAAa//B,KAAK+6E,kBAClBj6C,WAAY9gC,KAAKg7E,kBACdsD,GACAE,GAAiB,CACpBjvD,SAAUvvB,KAAKm7E,WACf9qD,aAAcrwB,KAAKo7E,UACnB/iD,YAAar4B,KAAK2+E,oBAClB7rE,qBAAsB,QACnB4rE,E,CAIHC,oBACJ,GAAI3+E,KAAK4+E,gBAAkB5+E,KAAK4+E,eAAex+E,OAAQ,CACnD,OAAOJ,KAAKu9E,gBAAgBv9E,KAAK4+E,e,CAGrC,OAAO5+E,KAAKu9E,gBAAgBv9E,KAAK6+E,Q,CAG7BtB,gBAAgBsB,GACpB,OAAOA,EAAQhG,KAAK7zE,IACT,CACHyB,OAAQ7F,OAAOoE,EAAOyB,OAAOtB,OAC7ByY,IAAK5Y,EAAOs8B,UAAUw9C,uB,CAK1Bp4C,uBACJ,MAAM8yC,EAAoBx5E,KAAK8C,QAC1B+1E,IAAI74E,KAAKw7E,qBACT3C,IAAI74E,KAAKy7E,cAAcvsD,QAE5B,GAAIlvB,KAAK06E,eAAgB,CACrB,OAAO16E,KAAK06E,eAAeh0C,qBAAqB8yC,E,CAGpD,OAAOA,C,CAGHgC,oBAAoB/0E,G,MACxB,MAAK2uE,EAAAp1E,KAAK++E,cAAU,MAAA3J,SAAA,SAAAA,EAAEh1E,SAAUqG,EAAO6uE,WAAY,CAC/C,OAAO7uE,C,CAGX,MAAMu4E,EAAYh/E,KAAK++E,WAAWr+E,MAAMolC,GAAMA,EAAE3gC,QAAUsB,EAAOtB,QACjE,GAAI65E,EAAW,CACXv4E,EAAO6uE,WAAa,CAChBpwE,EAEA+5E,EAEAC,K,MAEA,IAAKh6E,EAAK,CACN,OAAOvE,S,CAGX,MAAMb,GAAQs1E,EAAAp1E,KAAK++E,WAAWr+E,MACzBolC,GAAMA,EAAE3gC,QAAUD,EAAIC,WAC1B,MAAAiwE,SAAA,SAAAA,EAAEt1E,MAEH,GAAIoF,EAAI0S,UAAW,CACf,OAAO1S,EAAI0S,UAAU9X,E,CAGzB,OAAOA,CAAK,C,CAIpB,OAAO2G,C,CAGH83E,iBACJ,IAAKv+E,KAAKm/E,eAAgB,CACtB,MAAO,E,CAKX,MAAMC,EAAY,oBAElB,MAAO,CACHp7D,YAAa,KACb6Y,QAASuiD,EACTliD,gBAAiBl9B,KAAKk7E,YACtBx7C,eAAgB1/B,KAAKi7E,qB,CAkBrBA,uB,MACJ,MAAMoE,EAAer/E,KAAK27E,kBAAkBvG,EAAAp1E,KAAK2E,QAAI,MAAAywE,SAAA,SAAAA,EAAEh1E,QACvDJ,KAAK27E,aAAe,MAEpB,GAAI0D,EAAc,CACd9pE,YAAW,KACPvV,KAAKs7E,gBACLt7E,KAAKo6E,UAAUn1C,YAAYjlC,KAAK2E,KAAK,IAGzC,OAAO,K,CAGX,OAAO,I,CAGH85E,uBACJ,IAAKz+E,KAAKs/E,SAAU,CAChB,MAAO,E,CAGX,MAAO,CACHhgE,WAAYtf,KAAKm/E,eAAiB,SAAW,QAC7C7iD,eAAgBt8B,KAAKs/E,SACrB/iD,sBAAuBv8B,KAAK8hB,K,CAI5Bo5D,YAAYhqB,EAAGquB,EAAIznE,GACvB,MAAMmM,EAAUnM,EAAOmM,QACvB,MAAMu7D,EAAc1nE,EAAOgK,KAE3B,GAAI9hB,KAAK8hB,OAAS09D,EAAa,CAC3Bx/E,KAAKy/E,WAAW7G,KAAK4G,E,CAGzB,MAAME,EAAgBz7D,EAAQ40D,IAAIhC,GAAmB72E,KAAK8C,UAE1D,MAAM2/B,EAAO,CACT3gB,KAAM09D,EACNv7D,QAASy7D,GAOb,MAAMC,EAAsB9zE,QAAQC,QAAQ,CACxCg8D,UAAW9nE,KAAKq+E,qBAChB15E,KAAM3E,KAAK2E,OAGf,GAAIs4E,EAAQj9E,KAAK4/E,YAAan9C,GAAO,CACjC,OAAOk9C,C,CAGX3/E,KAAK4+E,eAAiBc,EACtB1/E,KAAK4/E,YAAcn9C,EACnBziC,KAAKyiC,KAAKm2C,KAAKn2C,GAEf,OAAOk9C,C,CAGHR,eACJ,OAAOn/E,KAAK0sC,OAAS,Q,CAGjBquC,kBAAkB92D,GACtB,GAAIjkB,KAAKm/E,eAAgB,CACrB,M,CAGJ,MAAMO,EAAgBz7D,EAAQ40D,IAAIhC,GAAmB72E,KAAK8C,UAC1D,GAAI48E,EAAct/E,SAAW,EAAG,CAC5B,M,CAGJJ,KAAK6V,KAAK+iE,KAAK8G,E,CAGX1E,iBAAiBl5D,GACrB,GAAI9hB,KAAKm/E,eAAgB,CACrB,M,CAGJn/E,KAAKy/E,WAAW7G,KAAK92D,E,CAGjBq5D,WAAW0E,EAAK96E,GACpB,UAAWA,EAAIooB,cAAgB,YAAa,CAExC,M,CAGJ,GAAIntB,KAAK8/E,YAAY/6E,GAAM,CACvB/E,KAAK+/E,UAAY,I,KACd,CACH//E,KAAK+/E,UAAYh7E,EAAIic,S,CAGzBhhB,KAAKw3B,SAASohD,KAAK54E,KAAK+/E,U,CA8BpB1E,aACJr7E,KAAKo6E,UAAUx2D,UAAUpe,QAAQxF,KAAKo7E,U,CAGlCA,UAAUr2E,GACd,GAAI/E,KAAK8/E,YAAY/6E,GAAM,CACvBA,EAAIjB,aAAaP,UAAUC,IAAI,S,KAC5B,CACHuB,EAAIjB,aAAaP,UAAUmkB,OAAO,S,CAGtC,MAAMs4D,EAA6Bj7E,EAC9BjB,aACAgqD,uBAAuB,wBAC5B,GAAIkyB,EAA2B5/E,SAAW,EAAG,CACzC,MAAMuC,EAAUoC,EAAIjB,aAAam8E,cAAc38E,cAAc,OAC7DX,EAAQY,UAAUC,IAAI,wBACtBuB,EAAIjB,aAAagpB,QAAQnqB,E,EAIzBm9E,YAAY/6E,G,MAChB,IAAK/E,KAAK+/E,UAAW,CACjB,OAAO,K,CAGX,MAAMG,GAAc9K,EAAAp1E,KAAK+/E,UAAU7X,MAAE,MAAAkN,SAAA,EAAAA,EAAI,KAEzC,GAAI8K,IAAgB,KAAM,CACtB,OAAOA,IAAgBn7E,EAAIic,UAAUknD,E,CAGzC,OAAOloE,KAAK+/E,YAAch7E,EAAIic,S,CAG1Bq9D,qBACJ,IAAI8B,EAAQngF,KAAKogF,UACjB,IAAKD,EAAO,CACRA,EAAQngF,KAAK2E,KAAKvE,M,CAGtB,OAAOiB,KAAK4mB,KAAKk4D,EAAQngF,KAAKs/E,S,CAG1Be,eAAev9E,GACnB,OAAOA,EAAQw9E,MAAM75E,GAAWywE,EAAIzwE,EAAQ,e,CA4BhD85E,S,MACI,OACIC,EAACC,EAAI,CACDC,MAAO,CACH,kBAAmB1gF,KAAKoN,SAAW,eAGvCozE,EAAA,OACItY,GAAG,sBACHwY,MAAO,CACH,iBAAkB1gF,KAAKogF,UAAYpgF,KAAKs/E,SACxC,kBAAmBt/E,KAAKqgF,eAAergF,KAAK8C,SAC5C,sBAAuB9C,KAAKwU,eAC5B,kBAAmBxU,KAAKklB,WACxB,iBAAiBkwD,EAAAp1E,KAAK06E,kBAAc,MAAAtF,SAAA,SAAAA,EAAEgE,eAM1CoH,EAAA,OACItY,GAAG,mBACH7jE,MAAO,CAAEoV,QAASzZ,KAAKqwC,QAAU,OAAS,SAE1CmwC,EAAA,iBAAez3C,KAAK,WAEvB/oC,KAAK2gF,qBACL3gF,KAAK4gF,kBACNJ,EAAA,OAAKtY,GAAG,qB,CAMhB0Y,kB,UACJ,IAAK5gF,KAAKklB,WAAY,CAClB,M,CAGJ,MAAM27D,GAAiB7gF,KAAKqwC,SAAWrwC,KAAK06E,eAE5C,OACI8F,EAAA,OACIE,MAAM,aACNr8E,MAAO,CAAEoV,QAASonE,EAAgB,eAAiB,SAEnDL,EAAA,kBACI18B,SAAU9jD,KAAKs6E,kBACfta,UAAWhgE,KAAK2E,KAAKvE,OACrB2qD,SAASqqB,EAAAp1E,KAAK06E,kBAAc,MAAAtF,SAAA,SAAAA,EAAEgE,aAC9BtuB,gBACIg2B,EAAA9gF,KAAK06E,kBAAc,MAAAoG,SAAA,SAAAA,EAAE1H,iBACrB2H,EAAA/gF,KAAKq1B,aAAS,MAAA0rD,SAAA,SAAAA,EAAE3gF,QAASJ,KAAK2E,KAAKvE,S,CAO/CugF,qBACJ,MAAMK,GACDhhF,KAAKqwC,UAAYrwC,KAAK2E,KAAKvE,QAAUJ,KAAKihF,aAE/C,OACIT,EAAA,OACItY,GAAG,uBACH7jE,MAAO,CAAEoV,QAASunE,EAAmB,OAAS,SAE9CR,EAAA,YAAOxgF,KAAKihF,c"}
|