{"version":3,"sources":["webpack:///../node_modules/moment/moment.js","webpack:///../node_modules/react-tabulator/lib/Utils.js","webpack:///../node_modules/react-tabulator/lib/ReactTabulator.js","webpack:///../node_modules/pick-react-known-prop/dist/index.js","webpack:///../node_modules/react-tabulator/lib/ConfigUtils.js","webpack:///../node_modules/tabulator-tables/dist/js/tabulator.es2015.js","webpack:///../node_modules/moment/locale/af.js","webpack:///../node_modules/moment/locale/ar.js","webpack:///../node_modules/moment/locale/ar-dz.js","webpack:///../node_modules/moment/locale/ar-kw.js","webpack:///../node_modules/moment/locale/ar-ly.js","webpack:///../node_modules/moment/locale/ar-ma.js","webpack:///../node_modules/moment/locale/ar-sa.js","webpack:///../node_modules/moment/locale/ar-tn.js","webpack:///../node_modules/moment/locale/az.js","webpack:///../node_modules/moment/locale/be.js","webpack:///../node_modules/moment/locale/bg.js","webpack:///../node_modules/moment/locale/bm.js","webpack:///../node_modules/moment/locale/bn.js","webpack:///../node_modules/moment/locale/bo.js","webpack:///../node_modules/moment/locale/br.js","webpack:///../node_modules/moment/locale/bs.js","webpack:///../node_modules/moment/locale/ca.js","webpack:///../node_modules/moment/locale/cs.js","webpack:///../node_modules/moment/locale/cv.js","webpack:///../node_modules/moment/locale/cy.js","webpack:///../node_modules/moment/locale/da.js","webpack:///../node_modules/moment/locale/de.js","webpack:///../node_modules/moment/locale/de-at.js","webpack:///../node_modules/moment/locale/de-ch.js","webpack:///../node_modules/moment/locale/dv.js","webpack:///../node_modules/moment/locale/el.js","webpack:///../node_modules/moment/locale/en-SG.js","webpack:///../node_modules/moment/locale/en-au.js","webpack:///../node_modules/moment/locale/en-ca.js","webpack:///../node_modules/moment/locale/en-gb.js","webpack:///../node_modules/moment/locale/en-ie.js","webpack:///../node_modules/moment/locale/en-il.js","webpack:///../node_modules/moment/locale/en-nz.js","webpack:///../node_modules/moment/locale/eo.js","webpack:///../node_modules/moment/locale/es.js","webpack:///../node_modules/moment/locale/es-do.js","webpack:///../node_modules/moment/locale/es-us.js","webpack:///../node_modules/moment/locale/et.js","webpack:///../node_modules/moment/locale/eu.js","webpack:///../node_modules/moment/locale/fa.js","webpack:///../node_modules/moment/locale/fi.js","webpack:///../node_modules/moment/locale/fo.js","webpack:///../node_modules/moment/locale/fr.js","webpack:///../node_modules/moment/locale/fr-ca.js","webpack:///../node_modules/moment/locale/fr-ch.js","webpack:///../node_modules/moment/locale/fy.js","webpack:///../node_modules/moment/locale/ga.js","webpack:///../node_modules/moment/locale/gd.js","webpack:///../node_modules/moment/locale/gl.js","webpack:///../node_modules/moment/locale/gom-latn.js","webpack:///../node_modules/moment/locale/gu.js","webpack:///../node_modules/moment/locale/he.js","webpack:///../node_modules/moment/locale/hi.js","webpack:///../node_modules/moment/locale/hr.js","webpack:///../node_modules/moment/locale/hu.js","webpack:///../node_modules/moment/locale/hy-am.js","webpack:///../node_modules/moment/locale/id.js","webpack:///../node_modules/moment/locale/is.js","webpack:///../node_modules/moment/locale/it.js","webpack:///../node_modules/moment/locale/it-ch.js","webpack:///../node_modules/moment/locale/ja.js","webpack:///../node_modules/moment/locale/jv.js","webpack:///../node_modules/moment/locale/ka.js","webpack:///../node_modules/moment/locale/kk.js","webpack:///../node_modules/moment/locale/km.js","webpack:///../node_modules/moment/locale/kn.js","webpack:///../node_modules/moment/locale/ko.js","webpack:///../node_modules/moment/locale/ku.js","webpack:///../node_modules/moment/locale/ky.js","webpack:///../node_modules/moment/locale/lb.js","webpack:///../node_modules/moment/locale/lo.js","webpack:///../node_modules/moment/locale/lt.js","webpack:///../node_modules/moment/locale/lv.js","webpack:///../node_modules/moment/locale/me.js","webpack:///../node_modules/moment/locale/mi.js","webpack:///../node_modules/moment/locale/mk.js","webpack:///../node_modules/moment/locale/ml.js","webpack:///../node_modules/moment/locale/mn.js","webpack:///../node_modules/moment/locale/mr.js","webpack:///../node_modules/moment/locale/ms.js","webpack:///../node_modules/moment/locale/ms-my.js","webpack:///../node_modules/moment/locale/mt.js","webpack:///../node_modules/moment/locale/my.js","webpack:///../node_modules/moment/locale/nb.js","webpack:///../node_modules/moment/locale/ne.js","webpack:///../node_modules/moment/locale/nl.js","webpack:///../node_modules/moment/locale/nl-be.js","webpack:///../node_modules/moment/locale/nn.js","webpack:///../node_modules/moment/locale/pa-in.js","webpack:///../node_modules/moment/locale/pl.js","webpack:///../node_modules/moment/locale/pt.js","webpack:///../node_modules/moment/locale/pt-br.js","webpack:///../node_modules/moment/locale/ro.js","webpack:///../node_modules/moment/locale/ru.js","webpack:///../node_modules/moment/locale/sd.js","webpack:///../node_modules/moment/locale/se.js","webpack:///../node_modules/moment/locale/si.js","webpack:///../node_modules/moment/locale/sk.js","webpack:///../node_modules/moment/locale/sl.js","webpack:///../node_modules/moment/locale/sq.js","webpack:///../node_modules/moment/locale/sr.js","webpack:///../node_modules/moment/locale/sr-cyrl.js","webpack:///../node_modules/moment/locale/ss.js","webpack:///../node_modules/moment/locale/sv.js","webpack:///../node_modules/moment/locale/sw.js","webpack:///../node_modules/moment/locale/ta.js","webpack:///../node_modules/moment/locale/te.js","webpack:///../node_modules/moment/locale/tet.js","webpack:///../node_modules/moment/locale/tg.js","webpack:///../node_modules/moment/locale/th.js","webpack:///../node_modules/moment/locale/tl-ph.js","webpack:///../node_modules/moment/locale/tlh.js","webpack:///../node_modules/moment/locale/tr.js","webpack:///../node_modules/moment/locale/tzl.js","webpack:///../node_modules/moment/locale/tzm.js","webpack:///../node_modules/moment/locale/tzm-latn.js","webpack:///../node_modules/moment/locale/ug-cn.js","webpack:///../node_modules/moment/locale/uk.js","webpack:///../node_modules/moment/locale/ur.js","webpack:///../node_modules/moment/locale/uz.js","webpack:///../node_modules/moment/locale/uz-latn.js","webpack:///../node_modules/moment/locale/vi.js","webpack:///../node_modules/moment/locale/x-pseudo.js","webpack:///../node_modules/moment/locale/yo.js","webpack:///../node_modules/moment/locale/zh-cn.js","webpack:///../node_modules/moment/locale/zh-hk.js","webpack:///../node_modules/moment/locale/zh-tw.js","webpack:///../node_modules/react-tabulator/lib/index.js","webpack:///config/versionTemplate.txt","webpack:///lib/es6-promise/utils.js","webpack:///lib/es6-promise/asap.js","webpack:///lib/es6-promise/then.js","webpack:///lib/es6-promise/promise/resolve.js","webpack:///lib/es6-promise/-internal.js","webpack:///lib/es6-promise/enumerator.js","webpack:///lib/es6-promise/promise.js","webpack:///lib/es6-promise/promise/all.js","webpack:///lib/es6-promise/promise/race.js","webpack:///lib/es6-promise/promise/reject.js","webpack:///lib/es6-promise.js","webpack:///lib/es6-promise/polyfill.js","webpack:///../node_modules/react-tabulator/lib/React15Tabulator.js","webpack:///../node_modules/react-tabulator/lib/ReactTabulatorExample.js","webpack:///../node_modules/react-tabulator/lib/editors/DateEditor.js","webpack:///../node_modules/react-tabulator/lib/editors/DateEditorUtils.js","webpack:///../node_modules/react-tabulator/lib/editors/MultiSelectEditor.js","webpack:///../node_modules/react-tag-autocomplete/dist-es5/ReactTags.js","webpack:///../node_modules/react-tag-autocomplete/dist-es5/Tag.js","webpack:///../node_modules/react-tag-autocomplete/dist-es5/Input.js","webpack:///../node_modules/react-tag-autocomplete/dist-es5/Suggestions.js","webpack:///../node_modules/react-tabulator/lib/formatters/MultiValueFormatter.js"],"names":["module","exports","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","isUndefined","isNumber","isDate","Date","map","arr","fn","i","res","length","push","hasOwnProp","a","b","hasOwnProperty","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","this","len","momentProperties","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","config","updateOffset","isMoment","obj","absFloor","number","Math","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","compareArrays","array1","array2","dontConvert","min","lengthDiff","abs","diffs","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","args","key","slice","join","Error","stack","keys","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInYear","year","isLeapYear","y","parseTwoDigitYear","parseInt","indexOf","getSetYear","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","split","defaultLocaleMonthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","d","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","j","next","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","defaults","c","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","w","weekYear","temp","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","result","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","k","isObjectEmpty","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","parts","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","zone","isLocal","prefix","suffix","toJSON","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","factory","__esModule","reactFormatter","isSameObject","isSameArray","React","require","react_dom_1","JSON","parse","stringify","JSX","cell","formatterParams","onRendered","renderFn","cellEl","getElement","querySelector","CompWithMoreProps","cloneElement","render","setTimeout","extendStatics","__extends","setPrototypeOf","__proto__","p","TypeError","String","__","constructor","create","__assign","assign","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","done","then","__generator","body","f","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","pop","__spreadArray","il","ReactDOM","pick_react_known_prop_1","ConfigUtils_1","Utils_1","tabulator_tables_1","default_1","_super","_this","state","columns","props","options","ref","htmlProps","mainId","random","table","pickValidHTMLProps","pickHTMLProps","initTabulator","domEle","_b","propOptions","_c","findDOMNode","propsToOptions","layout","tableBuilding","dataLoaded","invalidOptionWarnings","setState","componentDidMount","componentWillUnmount","destroy","getDerivedStateFromProps","noData","componentDidUpdate","prevProps","prevState","setData","setColumns","className","createElement","Component","modules","installedModules","__webpack_require__","moduleId","id","loaded","defineProperty","pickSVGProps","_pickHtmlProps2","_interopRequireDefault","_pickSvgProps2","default","_extends","target","_htmlAttributes2","_pickProps2","ReactHTMLAttrs","reduce","attrs","Boolean","_lodash","_lodash2","filter","transform","funcProto","objectProto","funcToString","objectCtorString","objectToString","getPrototype","getPrototypeOf","isObjectLike","isHostObject","Ctor","_svgAttributes2","Es6Promise","NOOPS","syncRender","comp","el","defaultOptions_1","opt","callbackNames_1","callbackName","document","innerHTML","_typeof","findIndex","predicate","kValue","find","includes","search","start","searchElement","fromIndex","varArgs","nextSource","nextKey","writable","configurable","ColumnManager","blockHozScrollEvent","headersElement","createHeadersElement","element","createHeaderElement","rowManager","columnsByIndex","columnsByField","scrollLeft","insertBefore","firstChild","classList","headerVisible","initialize","setRowManager","manager","getHeadersElement","scrollHorizontal","left","hozAdjust","scrollWidth","clientWidth","style","marginLeft","modExists","frozenColumns","generateColumnsFromRowData","row","sorter","cols","definitions","autoColumnsDefinitions","col","title","def","self","removeChild","reset","_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","getColumnByIndex","getFirstVisibileColumn","visible","getColumns","getRealColumns","traverse","getDefinitions","active","getDefinition","getDefinitionTree","getComponents","structured","getComponent","getWidth","width","moveColumn","after","moveColumnActual","columnCalcs","recalc","activeRows","parent","isGroup","_moveColumnInArray","columnMoved","columnManager","persistence","save","updateRows","toIndex","_this2","rows","dataTree","getTreeChildren","cells","scrollToColumn","position","ifVisible","_this3","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","offsetWidth","generateCells","generateCell","getFlexBaseWidth","totalWidth","fixedWidth","scrollHeight","clientHeight","minWidth","colWidth","columnMinWidth","addColumn","_this4","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","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","move","toColumn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","setWidth","validate","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","tooltip","hozAlign","vertAlign","fieldStructure","getFieldValue","setFieldValue","titleFormatterRendered","setField","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","dblTap","tapHold","tap","headerClick","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","headerTapHold","cellEdited","cellEditing","cellEditCancelled","_this6","headerContextMenu","headerClickMenu","headerMenu","menu","initializeColumnHeader","editor","edit","validator","mutator","accessor","cssClass","setMinWidth","columnMaxWidth","setMaxWidth","tooltips","cellHozAlign","cellVertAlign","textAlign","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","columnTitleChanged","text","_formatColumnHeaderTitle","formatter","contents","params","mockCell","_this7","titleFormatter","getFormatter","getValue","titleFormatterParams","Node","_this8","dataObj","structure","_i2","alignment","parentHeight","getGroupElement","offsetHeight","paddingTop","rowNumColumn","getFirstColumn","getLastColumn","updateBranches","colDefs","columnVisibilityChanged","silent","responsiveToggle","display","updateColumnVisibility","matchChildWidths","childWidth","child","setWidthActual","checkCellHeights","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","_this9","currentCell","cancelEdit","cellCount","_i3","Cell","_nextVisibleColumn","_prevVisibleColumn","hideHeaderFilterElements","fitToData","showHeaderFilterElements","clearWidth","_this10","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","getRowFromDataObject","getRowFromPosition","scrollToRow","rowTop","_this11","rowIndex","getDisplayRows","rowEl","scrollToRowPosition","scrollToRowIfVisible","elOffset","_virtualRenderFill","offsetTop","renderInPosition","columnsChanged","_this12","pagination","_setDataActual","reRenderInPosition","autoColumns","dataLoading","_wipeElements","history","clear","selectRow","clearSelectionData","reactiveData","watchData","refreshActiveData","error","wipe","deleteRow","blockRedraw","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","rowDeleted","dataChanged","getData","updateGroupRows","addRow","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","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","resetDisplayRows","frozenRows","getDisplayIndex","setDisplayIndex","getNextDisplayIndex","setDisplayRows","setMaxRows","dataChange","renderTable","layoutColumnsOnNewData","_this16","getCell","_generateContents","getVisibleRows","viewable","topEdge","bottomEdge","topFound","topRow","bottomRow","selectedRows","getRenderMode","topOffset","virtualDom","renderStarted","_simpleRender","renderEmptyScroll","placeholder","renderComplete","_clearVirtualDom","checkClassicModeGroupHeaderWidth","onlyGroupHeaders","paddingBottom","visibility","remove","forceMove","holder","topPad","rowsHeight","topPadHeight","heightOccupied","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","ok","rtl","frozen","_this17","scroll","deinitialize","change","collsWidth","colEnd","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","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","newRowData","_this22","tempData","attrname","block","unblock","setValueProcessData","groupUpdateOnCellEdit","reassignRowToGroup","redrawNeeded","rowUpdated","getCellIndex","findCell","findNextEditableCell","nextCell","allowEdit","check","findPrevEditableCell","prevCell","toRow","_this23","deleteActual","detatchModules","group","rowDelete","recalcRowGroup","_deselectRow","detachRow","_i8","CellComponent","_cell","getOldValue","getInitialValue","initialValue","getRow","getColumn","setValue","mutate","restoreOldValue","setValueActual","restoreInitialValue","isEdited","edited","clearEdited","clearValidation","nav","checkHeight","oldValue","build","_configureCell","alignItems","bottom","middle","justifyContent","right","center","tooltipGenerationMode","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","initializeCell","preventDefault","selection","range","createTextRange","moveToElementText","getSelection","createRange","selectNode","removeAllRanges","addRange","formatValue","containerOnly","layoutElement","newValue","changed","transformCell","contextMenu","clickMenu","editCell","editing","getCurrentCell","clearComponentHistory","calcs","prev","up","down","FooterManager","links","_initialize","footerElement","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","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","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","clipboardCopyHeader","columnHeaders","_clearSelection","_clearObjectPointers","bindModules","tagName","htmlTableImport","parseTable","_buildElement","_loadInitialData","_this24","mod","_detectBrowser","setHeaderFilterPlaceholder","installLang","setLocale","span","load","setSort","setFilter","print","deregister","unwatchData","clearBindings","ua","navigator","userAgent","vendor","opera","setDataFromLocalFile","extensions","_this25","accept","file","files","reader","FileReader","readAsText","onload","onerror","click","blockActiveRequest","_setData","inPosition","getUrl","setConfig","setUrl","searchRows","searchData","getHtml","export","printFullscreen","getAjaxUrl","replaceData","_this26","responses","addData","_this27","updateOrAddData","_this28","newRows","_this29","count","successCount","foundRows","doneCheck","_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","getLang","sortList","getSorters","clearSort","refreshFilter","addFilter","all","getHeaderFilters","removeFilter","clearFilter","clearHeaderFilter","deselectRow","toggleSelectRow","getSelectedRows","getSelectedData","getInvalidCells","clearCellValidation","_this38","valid","setMaxPage","_this39","setPageSize","size","previousPage","getPage","getPageMax","setGroupBy","groups","setGroupValues","setGroupStartOpen","setGroupHeader","getGroupedData","getEditedCells","clearCellEdited","_this40","getCalcResults","getResults","recalcAll","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","undo","redo","getHistoryUndoSize","getHistoryRedoSize","clearHistory","download","filename","downloadToTab","tableComms","receive","moduleBindings","extendModule","property","registerModule","plugin","required","box","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","deepClone","tables","lookupTable","query","results","querySelectorAll","matchElement","findTable","Layout","mode","modes","_this41","colsWidth","gap","lastCol","responsive","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Localize","bindings","langList","headerFilters","_setLangProp","desiredLocale","language","traverseLang","trans","path","_executeBindings","getText","pathArray","_getLangElement","level","rootPath","_loop","binding","Comms","getConnections","selectors","connections","con","send","connection","commsReceived","Accessor","allowedTypes","lookupAccessor","accessors","rowComponent","colCompnent","Ajax","url","urlGenerator","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","loading","requestOrder","template","trim","content","defaultLoaderPromise","defaultURLGenerator","initializeProgressive","getParams","_loadDefaultConfig","method","defaultConfig","_loadDataProgressive","_loadDataStandard","_this42","generateParamsList","serializeParams","encoded","encodeURIComponent","requestNo","_this43","showLoader","hideLoader","showError","contentType","contentTypeFormatters","headers","Accept","location","origin","credentials","fetch","response","json","status","statusText","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","calcParams","precision","sum","Number","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","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","sub","_this50","childData","childRow","childIndex","findChildIndex","_this51","recurse","_this52","checkForRestyle","getChildField","Download","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","_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","parseRow","styles","colSpan","rowSpan","orientation","doc","autoTable","addPageContent","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","generateSheet","merges","worksheet","r","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editable","editorParams","editors","clearEditor","cancel","variableHeight","contains","preventScroll","button","focusCellNoEvent","forceEdit","focusScrollAdjust","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","blur","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","editIndex","success","cellValue","padding","boxSizing","elementAttributes","getAttribute","onChange","textarea","vertNav","verticalNavigation","whiteSpace","resize","heightNow","selectionStart","stopImmediatePropagation","blurFunc","removeEventListener","_this53","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","itemParams","setItem","sortValuesList","listItemFormatter","toggleItem","chooseItem","fillList","setCurrentItem","scrollIntoView","behavior","inline","fillInput","unsetItem","hideList","chooseItems","cancelItem","cursor","readOnly","_i9","unsetItems","character","fromCharCode","startsWith","scrollTovalue","showList","autocomplete","_this54","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","current","emptyPlaceholder","freetext","allowEmpty","showInputValue","log","star","maxStars","getElementsByTagName","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","changeValue","textOverflow","progress","mouseDrag","mouseDragWidth","percent","handle","bar","updateValue","calcVal","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","checked","indeterminate","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","classNames","_this61","cellWrapper","formatCells","formatExportValue","renderedCallback","lookup","fromStyle","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","filterFunc","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","headerFilterFuncParams","fieldVal","colVal","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","_this62","headerElement","headerFilterEmptyCheck","headerFilterParams","hasAttribute","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","filtersToArray","_this63","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","filterVal","rowVal","filterParams","keywords","keyword","matchAll","endsWith","Format","lookupFormatter","formatterPrint","formatterClipboard","formatterHtmlOutput","crossElement","formatters","plaintext","sanitizeHTML","entityMap","emptyToSpace","money","integer","decimal","rgx","floatVal","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","datetime","inputFormat","outputFormat","invalidPlaceholder","newDatetime","moment","timezone","tz","datetimediff","traffic","percentValue","colors","color","legend","legendColor","legendAlign","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","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","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","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","headerMenuEl","_this71","LoadMenuEvent","loadMenu","_this72","_this73","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","_i13","parentOffset","_this74","docHeight","innerHeight","touches","pageX","pageY","menus","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","mouseup","tableRowDrop","previousSibling","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","elementRowDrop","connectionTables","_this75","dropEvent","tabulatorElementDropEvent","connect","disconnect","dropComplete","sender","senders","receiver","receivers","fromTable","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","oldParams","pageParams","_this82","_parseRemoteData","last_page","footer","Persistence","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","localStorage","removeItem","retreivedData","readers","writers","retreiveData","getOwnPropertyDescriptor","oldCols","newCols","_findColumn","validateSorters","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","getItem","cookie","cookiePos","expireDate","setDate","toUTCString","Print","manualBlock","replaceTable","cleanup","footerContent","scrollX","scrollY","footerEl","tableEl","ReactiveData","origFuncs","currentVersion","enumerable","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","tableStyle","_this83","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","formatCollapsedData","order","generateCollapsedContent","_iterator","_isArray","_i17","_ref","generateCollapsedRowContent","colCount","working","generateCollapsedRowData","mockCellComponent","node_content","titleData","valueData","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","_rowSelectionChanged","endSelect","selected","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","_this84","rowInfo","checkboxEl","childRowSelection","_i18","selectedRow","_iterator2","_isArray2","_i19","_ref2","_iterator3","_isArray3","_i20","_ref3","_child","Sort","arrowEl","sorterParams","startingDir","headerSortStartingDir","newSortList","findSorter","sortListActual","rowComponents","clearColumnHeaders","setColumnHeader","sortObj","_sortItems","_this85","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","emptyAlign","localeCompare","boolean","calc","alphanum","bs","a1","b1","rx","rd","Validate","invalidCells","_extractValidator","substring","_buildValidator","parameters","validators","invalidIndex","float","numeric","starts","ends","minLength","maxLength","in","unique","cellData","symbolMap","numberMap","pluralForm","plurals","pluralize","str","weekdaysParseExact","suffixes","1","5","8","70","80","2","7","20","50","3","4","100","6","9","10","30","60","90","relativeTimeWithPlural","num","forms","standalone","lastDigit","last2Digits","relativeTimeWithMutation","mutationTable","softMutation","mutation","lastNumber","translate","monthsParseExact","ll","lll","llll","plural","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","0","40","isUpper","eifelerRegelAppliesToNumber","translateSingular","special","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","12","13","numbersNouns","numberNoun","hundred","ten","one","word","numberAsNoun","processHoursFunction","__createBinding","k2","ReactTabulatorExample","React15Tabulator","ReactTabulator","vertxNext","customSchedulerFn","asap","queue","flush","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useSetTimeout","globalSetTimeout","channel","iterations","node","onFulfillment","onRejection","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","object","promise","nextTick","createTextNode","characterData","port1","onmessage","port2","postMessage","vertx","runOnLoop","runOnContext","attemptVertx","handleMaybeThenable","maybeThenable","then$$1","thenable","fulfill","reason","handleOwnThenable","sealed","fulfillmentHandler","rejectionHandler","tryThen","_label","handleForeignThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","detail","hasCallback","succeeded","Enumerator","Constructor","_instanceConstructor","_remaining","_enumerate","_eachEntry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","enumerator","resolver","needsResolver","initializePromise","needsNew","finally","entries","race","_setScheduler","scheduleFn","_setAsap","asapFn","_asap","polyfill","global","promiseToString","cast","componentWillReceiveProps","ReactTabulator_1","DateEditor_1","MultiSelectEditor_1","MultiValueFormatter_1","onClick","alert","age","dob","rating","passed","pets","colorOptions","red","green","yellow","editableColumns","selectedName","renderAjaxScrollExample","current_page","newData","href","DateEditorUtils_1","inputCss","fontFamily","Editor","setValueOnSuccess","valueDate","ev","onKeyPress","today","onBlur","valueDt","onKeyUp","container","setGlobalDateMasks","setGlobalDateI18n","defaultI18n","literal","shorten","sLen","newArr","monthUpdate","arrName","i18n","origObj","args_1","dayNames","monthNames","monthNamesShort","dayNamesShort","amPm","DoFn","globalI18n","pad","formatFlags","dateObj","DD","Do","ddd","dddd","MMM","MMMM","YY","YYYY","getHours","H","HH","getMinutes","getSeconds","S","getMilliseconds","SS","SSS","A","ZZ","Z","monthParse","emptyDigits","emptyWord","timezoneOffset","parseFlags","cent","globalMasks","shortDate","mediumDate","longDate","fullDate","isoDate","isoDateTime","shortTime","mediumTime","longTime","masks","literals","$0","$1","combinedI18nSettings","dateStr","dateInfo","parseInfo","newFormat","specifiedFields","requiredFields","info","requiredField","dateWithoutTZ","validateFields","ReactTags","autofocus","handleDelete","newValues","handleAddition","handleBlur","parentElement","zIndex","suggestions","tags","allowNew","autoresize","minQueryLength","PropTypes","Tag","Input","Suggestions","KEYS","CLASS_NAMES","rootFocused","selectedTag","selectedTagName","searchInput","suggestionActive","suggestionDisabled","superclass","focused","expandable","selectedIndex","inputEventHandlers","onFocus","handleFocus","onInput","handleInput","onKeyDown","handleKeyDown","createRef","newProps","handleInputChange","ref$1","delimiters","delimiterChars","handleDelimiter","allowBackspace","deleteTag","suggestion","addTag","handleClick","activeElement","addOnBlur","handleDeleteTag","interactiveEls","currentEl","currentTarget","tag","handleValidate","clearInputOnDelete","this$1","TagComponent","tagComponent","onDelete","inputAttributes","listboxId","ariaLabel","noSuggestionsText","suggestionsFilter","maxSuggestionsLength","defaultProps","propTypes","arrayOf","bool","isRequired","oneOfType","SIZER_STYLES","STYLE_PROPS","inputWidth","copyInputStyles","updateInputWidth","inputStyle","sizer","role","escapeForRegExp","markIt","__html","filterSuggestions","filtered","disableMarkIt","handleMouseDown","onMouseDown","dangerouslySetInnerHTML","markInput","createCellEl"],"mappings":"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","file":"4.js?id=a7841f0aad7c6a357a66","sourcesContent":["//! moment.js\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null,\n            rfc2822         : false,\n            weekdayMismatch : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        ss : '%d seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            var args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays (ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        var weekdays = isArray(this._weekdays) ? this._weekdays :\n            this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n        return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n            : (m) ? weekdays[m.day()] : weekdays;\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var localeFamilies = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                var aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {}\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher);\n\n        if (matches === null) {\n            return null;\n        }\n\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ?\n          0 :\n          parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (isNumber(input)) {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])                         * sign,\n                h  : toInt(match[HOUR])                         * sign,\n                m  : toInt(match[MINUTE])                       * sign,\n                s  : toInt(match[SECOND])                       * sign,\n                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function calendar$1 (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000;\n    var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n    var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n    var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return (dividend % divisor + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2 () {\n        return isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1 (duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':   return months;\n                case 'quarter': return months / 3;\n                case 'year':    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asQuarters     = makeAs('Q');\n    var asYears        = makeAs('y');\n\n    function clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        ss: 44,         // a few seconds to seconds\n        s : 45,         // seconds to minute\n        m : 45,         // minutes to hour\n        h : 22,         // hours to day\n        d : 26,         // days to month\n        M : 11          // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', seconds] ||\n                minutes <= 1             && ['m']           ||\n                minutes < thresholds.m   && ['mm', minutes] ||\n                hours   <= 1             && ['h']           ||\n                hours   < thresholds.h   && ['hh', hours]   ||\n                days    <= 1             && ['d']           ||\n                days    < thresholds.d   && ['dd', days]    ||\n                months  <= 1             && ['M']           ||\n                months  < thresholds.M   && ['MM', months]  ||\n                years   <= 1             && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asQuarters     = asQuarters;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks.version = '2.24.0';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","\"use strict\";\nexports.__esModule = true;\nexports.reactFormatter = exports.isSameObject = exports.isSameArray = exports.clone = void 0;\nvar React = require(\"react\");\nvar react_dom_1 = require(\"react-dom\");\nfunction clone(obj) {\n    return JSON.parse(JSON.stringify(obj));\n}\nexports.clone = clone;\nfunction isSameArray(a, b) {\n    var i = a && a.length ? a.length : 0;\n    if (i !== (b && b.length ? b.length : 0)) {\n        return false;\n    }\n    while (i--) {\n        if (a[i] !== b[i]) {\n            return false;\n        }\n    }\n    return true;\n}\nexports.isSameArray = isSameArray;\nfunction isSameObject(a, b) {\n    return JSON.stringify(a) === JSON.stringify(b);\n}\nexports.isSameObject = isSameObject;\nfunction reactFormatter(JSX) {\n    return function customFormatter(cell, formatterParams, onRendered) {\n        //cell - the cell component\n        //formatterParams - parameters set for the column\n        //onRendered - function to call when the formatter has been rendered\n        var renderFn = function () {\n            var cellEl = cell.getElement();\n            if (cellEl) {\n                var formatterCell = cellEl.querySelector('.formatterCell');\n                if (formatterCell) {\n                    var CompWithMoreProps = React.cloneElement(JSX, { cell: cell });\n                    react_dom_1.render(CompWithMoreProps, cellEl.querySelector('.formatterCell'));\n                }\n            }\n        };\n        onRendered(renderFn); // initial render only.\n        setTimeout(function () {\n            renderFn(); // render every time cell value changed.\n        }, 0);\n        return '<div class=\"formatterCell\"></div>';\n    };\n}\nexports.reactFormatter = reactFormatter;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nexports.__esModule = true;\nvar React = require(\"react\");\nvar ReactDOM = require(\"react-dom\");\nvar pick_react_known_prop_1 = require(\"pick-react-known-prop\");\nvar ConfigUtils_1 = require(\"./ConfigUtils\");\nvar Utils_1 = require(\"./Utils\");\n/* tslint:disable-next-line */\nvar tabulator_tables_1 = require(\"tabulator-tables\");\nvar default_1 = /** @class */ (function (_super) {\n    __extends(default_1, _super);\n    function default_1() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = {\n            data: [],\n            columns: _this.props.columns,\n            options: _this.props.options\n        };\n        _this.ref = null;\n        _this.htmlProps = null;\n        _this.mainId = \"tabulator-\" + +new Date() + \"-\" + Math.floor(Math.random() * 9999999); // random id\n        _this.table = null; // will be set once Tabulator instantiated.\n        _this.pickValidHTMLProps = function () {\n            // run once\n            if (!_this.htmlProps) {\n                _this.htmlProps = pick_react_known_prop_1.pickHTMLProps(_this.props); // pick valid html props\n                delete _this.htmlProps['data']; // don't render data & columns as attributes\n                delete _this.htmlProps['columns'];\n            }\n        };\n        return _this;\n    }\n    default_1.prototype.initTabulator = function () {\n        var _a;\n        return __awaiter(this, void 0, void 0, function () {\n            var domEle, that, _b, columns, data, options, propOptions;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0:\n                        domEle = ReactDOM.findDOMNode(this.ref);\n                        that = this;\n                        _b = this.props, columns = _b.columns, data = _b.data, options = _b.options;\n                        return [4 /*yield*/, ConfigUtils_1.propsToOptions(this.props)];\n                    case 1:\n                        propOptions = _c.sent();\n                        new tabulator_tables_1[\"default\"](domEle, __assign(__assign(__assign(__assign({ columns: columns }, propOptions), { layout: (_a = this.props.layout) !== null && _a !== void 0 ? _a : 'fitColumns', // fit columns to width of table (optional)\n                            tableBuilding: function () {\n                                that.table = this; // keep the table instance.\n                                that.props.tableBuilding ? that.props.tableBuilding() : '';\n                            },\n                            dataLoaded: function () {\n                                that.props.dataLoaded ? that.props.dataLoaded() : '';\n                            }, invalidOptionWarnings: false }), options), { // props.options are passed to Tabulator's options.\n                            data: data }));\n                        // await table.setData(data);\n                        if (data && data.length > 0) {\n                            this.setState({ data: data });\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    default_1.prototype.componentDidMount = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.initTabulator()];\n                    case 1:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    default_1.prototype.componentWillUnmount = function () {\n        this.table && this.table.destroy();\n    };\n    // React 16.5.x - \"getDerivedStateFromProps\" replaces both \"componentWillMount\" & \"componentWillReceiveProps\"\n    // This function will be ignored when running with React 15.6.x\n    default_1.getDerivedStateFromProps = function (props, state) {\n        // console.log('- getDerivedStateFromProps', props, state);\n        var noData = !props.data || props.data.length === 0;\n        if (!state && noData) {\n            // first time (similar to: componentWillMount)\n            return null;\n        }\n        if (state && state.data.length && state.data.length === 0 && props && props.data && props.data.length === 0) {\n            return null;\n        }\n        // if (state && props.columns) {\n        //   // this triggers componentDidUpdate\n        //   if (!isSameArray(state.columns, props.columns)) {\n        //     console.log('--- Columns changed');\n        //     // console.log('columns changed!');\n        //     return { ...state, columns: [...props.columns] };\n        //   }\n        // }\n        if (state && (props.data || props.columns | props.options)) {\n            // this triggers componentDidUpdate\n            if (!Utils_1.isSameArray(state.data, props.data) ||\n                !Utils_1.isSameArray(state.columns, props.columns) ||\n                !Utils_1.isSameObject(state.options, props.options)) {\n                // console.log('data changed!');\n                return __assign(__assign({}, state), { data: __spreadArray([], props.data), columns: __spreadArray([], props.columns), options: __assign({}, props.options) });\n            }\n        }\n        return {};\n    };\n    // componentDidUpdate(prevProps, prevState)\n    default_1.prototype.componentDidUpdate = function (prevProps, prevState) {\n        // props data changed! (see: getDerivedStateFromProps)\n        if (!Utils_1.isSameArray(prevState.data, this.state.data)) {\n            // only when data is really different: call this.table.setData (will re-render table)\n            this.table && this.table.setData(this.state.data);\n        }\n        if (!Utils_1.isSameArray(prevState.columns, this.state.columns)) {\n            // only when data is really different: call this.table.setData (will re-render table)\n            this.table && this.table.setColumns(this.state.columns);\n        }\n        if (!Utils_1.isSameObject(prevState.options, this.state.options)) {\n            // console.log('options changed', this.state.options);\n            this.initTabulator();\n        }\n    };\n    default_1.prototype.render = function () {\n        var _this = this;\n        this.pickValidHTMLProps();\n        var className = this.props.className;\n        return (React.createElement(\"div\", __assign({ ref: function (ref) { return (_this.ref = ref); }, \"data-instance\": this.mainId }, this.htmlProps, { className: className })));\n    };\n    return default_1;\n}(React.Component));\nexports[\"default\"] = default_1;\n","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.pickSVGProps = exports.pickHTMLProps = undefined;\n\n\tvar _pickHtmlProps = __webpack_require__(1);\n\n\tvar _pickHtmlProps2 = _interopRequireDefault(_pickHtmlProps);\n\n\tvar _pickSvgProps = __webpack_require__(5);\n\n\tvar _pickSvgProps2 = _interopRequireDefault(_pickSvgProps);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.pickHTMLProps = _pickHtmlProps2.default;\n\texports.pickSVGProps = _pickSvgProps2.default;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\tvar _htmlAttributes = __webpack_require__(2);\n\n\tvar _htmlAttributes2 = _interopRequireDefault(_htmlAttributes);\n\n\tvar _pickProps = __webpack_require__(3);\n\n\tvar _pickProps2 = _interopRequireDefault(_pickProps);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar extra = ['about', 'datatype', 'defaultChecked', 'defaultValue', 'inlist', 'prefix', 'property', 'resource', 'typeof', 'vocab', 'autoCapitalize', 'autoCorrect', 'color', 'itemProp', 'itemScope', 'itemType', 'itemRef', 'itemID', 'security', 'unselectable', 'results', 'autoSave', 'allowtransparency', 'charSet', 'ismap', 'typemustmatch',\n\n\t// handlers:\n\t'onBlur', 'onChange', 'onClick', 'onContextMenu', 'onCopy', 'onCut', 'onDoubleClick', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragExit', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onFocus', 'onInput', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPaste', 'onScroll', 'onSubmit', 'onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart', 'onWheel', 'onCompositionEnd', 'onCompositionStart', 'onCompositionUpdate', 'onInvalid', 'onPointerDown', 'onPointerMove', 'onPointerUp', 'onPointerCancel', 'onGotPointerCapture', 'onLostPointerCapture', 'onPointerEnter', 'onPointerLeave', 'onPointerOver', 'onPointerOut', 'onSelect', 'onAbort', 'onCanPlay', 'onCanPlayThrough', 'onDurationChange', 'onEmptied', 'onEncrypted', 'onEnded', 'onError', 'onLoadedData', 'onLoadedMetadata', 'onLoadStart', 'onPause', 'onPlay', 'onPlaying', 'onProgress', 'onRateChange', 'onSeeked', 'onSeeking', 'onStalled', 'onSuspend', 'onTimeUpdate', 'onVolumeChange', 'onWaiting', 'onLoad', 'onError', 'onAnimationStart', 'onAnimationEnd', 'onAnimationIteration', 'onTransitionEnd', 'onToggle'];\n\n\tvar ReactHTMLAttrs = _extends({}, _htmlAttributes2.default, extra.reduce(function (attrs, prop) {\n\t  attrs[prop] = prop;\n\t  return attrs;\n\t}, {}));\n\n\texports.default = (0, _pickProps2.default)(function (prop) {\n\t  return Boolean(ReactHTMLAttrs[prop]) || /^(data|aria)-/.test(prop);\n\t});\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * html-attributes\n\t * https://github.com/alexmingoia/html-attributes\n\t */\n\n\t'use strict';\n\n\t/**\n\t * @module html-attributes\n\t */\n\n\tmodule.exports = {\n\t  \"abbr\": \"abbr\",\n\t  \"accept\": \"accept\",\n\t  \"acceptCharset\": \"accept-charset\",\n\t  \"accessKey\": \"accesskey\",\n\t  \"action\": \"action\",\n\t  \"allowFullScreen\": \"allowfullscreen\",\n\t  \"allowTransparency\": \"allowtransparency\",\n\t  \"alt\": \"alt\",\n\t  \"async\": \"async\",\n\t  \"autoComplete\": \"autocomplete\",\n\t  \"autoFocus\": \"autofocus\",\n\t  \"autoPlay\": \"autoplay\",\n\t  \"cellPadding\": \"cellpadding\",\n\t  \"cellSpacing\": \"cellspacing\",\n\t  \"challenge\": \"challenge\",\n\t  \"charset\": \"charset\",\n\t  \"checked\": \"checked\",\n\t  \"cite\": \"cite\",\n\t  \"class\": \"class\",\n\t  \"className\": \"class\",\n\t  \"cols\": \"cols\",\n\t  \"colSpan\": \"colspan\",\n\t  \"command\": \"command\",\n\t  \"content\": \"content\",\n\t  \"contentEditable\": \"contenteditable\",\n\t  \"contextMenu\": \"contextmenu\",\n\t  \"controls\": \"controls\",\n\t  \"coords\": \"coords\",\n\t  \"crossOrigin\": \"crossorigin\",\n\t  \"data\": \"data\",\n\t  \"dateTime\": \"datetime\",\n\t  \"default\": \"default\",\n\t  \"defer\": \"defer\",\n\t  \"dir\": \"dir\",\n\t  \"disabled\": \"disabled\",\n\t  \"download\": \"download\",\n\t  \"draggable\": \"draggable\",\n\t  \"dropzone\": \"dropzone\",\n\t  \"encType\": \"enctype\",\n\t  \"for\": \"for\",\n\t  \"form\": \"form\",\n\t  \"formAction\": \"formaction\",\n\t  \"formEncType\": \"formenctype\",\n\t  \"formMethod\": \"formmethod\",\n\t  \"formNoValidate\": \"formnovalidate\",\n\t  \"formTarget\": \"formtarget\",\n\t  \"frameBorder\": \"frameBorder\",\n\t  \"headers\": \"headers\",\n\t  \"height\": \"height\",\n\t  \"hidden\": \"hidden\",\n\t  \"high\": \"high\",\n\t  \"href\": \"href\",\n\t  \"hrefLang\": \"hreflang\",\n\t  \"htmlFor\": \"for\",\n\t  \"httpEquiv\": \"http-equiv\",\n\t  \"icon\": \"icon\",\n\t  \"id\": \"id\",\n\t  \"inputMode\": \"inputmode\",\n\t  \"isMap\": \"ismap\",\n\t  \"itemId\": \"itemid\",\n\t  \"itemProp\": \"itemprop\",\n\t  \"itemRef\": \"itemref\",\n\t  \"itemScope\": \"itemscope\",\n\t  \"itemType\": \"itemtype\",\n\t  \"kind\": \"kind\",\n\t  \"label\": \"label\",\n\t  \"lang\": \"lang\",\n\t  \"list\": \"list\",\n\t  \"loop\": \"loop\",\n\t  \"manifest\": \"manifest\",\n\t  \"max\": \"max\",\n\t  \"maxLength\": \"maxlength\",\n\t  \"media\": \"media\",\n\t  \"mediaGroup\": \"mediagroup\",\n\t  \"method\": \"method\",\n\t  \"min\": \"min\",\n\t  \"minLength\": \"minlength\",\n\t  \"multiple\": \"multiple\",\n\t  \"muted\": \"muted\",\n\t  \"name\": \"name\",\n\t  \"noValidate\": \"novalidate\",\n\t  \"open\": \"open\",\n\t  \"optimum\": \"optimum\",\n\t  \"pattern\": \"pattern\",\n\t  \"ping\": \"ping\",\n\t  \"placeholder\": \"placeholder\",\n\t  \"poster\": \"poster\",\n\t  \"preload\": \"preload\",\n\t  \"radioGroup\": \"radiogroup\",\n\t  \"readOnly\": \"readonly\",\n\t  \"rel\": \"rel\",\n\t  \"required\": \"required\",\n\t  \"role\": \"role\",\n\t  \"rows\": \"rows\",\n\t  \"rowSpan\": \"rowspan\",\n\t  \"sandbox\": \"sandbox\",\n\t  \"scope\": \"scope\",\n\t  \"scoped\": \"scoped\",\n\t  \"scrolling\": \"scrolling\",\n\t  \"seamless\": \"seamless\",\n\t  \"selected\": \"selected\",\n\t  \"shape\": \"shape\",\n\t  \"size\": \"size\",\n\t  \"sizes\": \"sizes\",\n\t  \"sortable\": \"sortable\",\n\t  \"span\": \"span\",\n\t  \"spellCheck\": \"spellcheck\",\n\t  \"src\": \"src\",\n\t  \"srcDoc\": \"srcdoc\",\n\t  \"srcSet\": \"srcset\",\n\t  \"start\": \"start\",\n\t  \"step\": \"step\",\n\t  \"style\": \"style\",\n\t  \"tabIndex\": \"tabindex\",\n\t  \"target\": \"target\",\n\t  \"title\": \"title\",\n\t  \"translate\": \"translate\",\n\t  \"type\": \"type\",\n\t  \"typeMustMatch\": \"typemustmatch\",\n\t  \"useMap\": \"usemap\",\n\t  \"value\": \"value\",\n\t  \"width\": \"width\",\n\t  \"wmode\": \"wmode\",\n\t  \"wrap\": \"wrap\"\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _lodash = __webpack_require__(4);\n\n\tvar _lodash2 = _interopRequireDefault(_lodash);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = function (filter) {\n\t  return function (props) {\n\t    if (!(0, _lodash2.default)(props)) throw new Error('props should be a plain object');\n\t    var out = {};\n\t    for (var key in props) {\n\t      if (props.hasOwnProperty(key) && filter(key)) {\n\t        out[key] = props[key];\n\t      }\n\t    }\n\t    return out;\n\t  };\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t/**\n\t * lodash (Custom Build) <https://lodash.com/>\n\t * Build: `lodash modularize exports=\"npm\" -o ./`\n\t * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n\t * Released under MIT license <https://lodash.com/license>\n\t * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n\t * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t */\n\n\t/** `Object#toString` result references. */\n\tvar objectTag = '[object Object]';\n\n\t/**\n\t * Checks if `value` is a host object in IE < 9.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n\t */\n\tfunction isHostObject(value) {\n\t  // Many host objects are `Object` objects that can coerce to strings\n\t  // despite having improperly defined `toString` methods.\n\t  var result = false;\n\t  if (value != null && typeof value.toString != 'function') {\n\t    try {\n\t      result = !!(value + '');\n\t    } catch (e) {}\n\t  }\n\t  return result;\n\t}\n\n\t/**\n\t * Creates a unary function that invokes `func` with its argument transformed.\n\t *\n\t * @private\n\t * @param {Function} func The function to wrap.\n\t * @param {Function} transform The argument transform.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction overArg(func, transform) {\n\t  return function(arg) {\n\t    return func(transform(arg));\n\t  };\n\t}\n\n\t/** Used for built-in method references. */\n\tvar funcProto = Function.prototype,\n\t    objectProto = Object.prototype;\n\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/** Used to infer the `Object` constructor. */\n\tvar objectCtorString = funcToString.call(Object);\n\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objectToString = objectProto.toString;\n\n\t/** Built-in value references. */\n\tvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n\t/**\n\t * Checks if `value` is object-like. A value is object-like if it's not `null`\n\t * and has a `typeof` result of \"object\".\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t * @example\n\t *\n\t * _.isObjectLike({});\n\t * // => true\n\t *\n\t * _.isObjectLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObjectLike(_.noop);\n\t * // => false\n\t *\n\t * _.isObjectLike(null);\n\t * // => false\n\t */\n\tfunction isObjectLike(value) {\n\t  return !!value && typeof value == 'object';\n\t}\n\n\t/**\n\t * Checks if `value` is a plain object, that is, an object created by the\n\t * `Object` constructor or one with a `[[Prototype]]` of `null`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.8.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n\t * @example\n\t *\n\t * function Foo() {\n\t *   this.a = 1;\n\t * }\n\t *\n\t * _.isPlainObject(new Foo);\n\t * // => false\n\t *\n\t * _.isPlainObject([1, 2, 3]);\n\t * // => false\n\t *\n\t * _.isPlainObject({ 'x': 0, 'y': 0 });\n\t * // => true\n\t *\n\t * _.isPlainObject(Object.create(null));\n\t * // => true\n\t */\n\tfunction isPlainObject(value) {\n\t  if (!isObjectLike(value) ||\n\t      objectToString.call(value) != objectTag || isHostObject(value)) {\n\t    return false;\n\t  }\n\t  var proto = getPrototype(value);\n\t  if (proto === null) {\n\t    return true;\n\t  }\n\t  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n\t  return (typeof Ctor == 'function' &&\n\t    Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n\t}\n\n\tmodule.exports = isPlainObject;\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\n\tvar _pickProps = __webpack_require__(3);\n\n\tvar _pickProps2 = _interopRequireDefault(_pickProps);\n\n\tvar _svgAttributes = __webpack_require__(6);\n\n\tvar _svgAttributes2 = _interopRequireDefault(_svgAttributes);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = (0, _pickProps2.default)(function (prop) {\n\t  return Boolean(_svgAttributes2.default[prop]);\n\t});\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t/*!\n\t * svg-attributes\n\t * https://github.com/alexmingoia/svg-attributes\n\t */\n\n\t'use strict';\n\n\t/**\n\t * @module svg-attributes\n\t */\n\n\tmodule.exports = {\n\t  /**\n\t   * Regular attributes\n\t   */\n\t  \"accentHeight\": \"accent-height\",\n\t  \"accumulate\": \"accumulate\",\n\t  \"additive\": \"additive\",\n\t  \"alphabetic\": \"alphabetic\",\n\t  \"amplitude\": \"amplitude\",\n\t  \"arabicForm\": \"arabic-form\",\n\t  \"ascent\": \"ascent\",\n\t  \"attributeName\": \"attributeName\",\n\t  \"attributeType\": \"attributeType\",\n\t  \"azimuth\": \"azimuth\",\n\t  \"baseFrequency\": \"baseFrequency\",\n\t  \"baseProfile\": \"baseProfile\",\n\t  \"bbox\": \"bbox\",\n\t  \"begin\": \"begin\",\n\t  \"bias\": \"bias\",\n\t  \"by\": \"by\",\n\t  \"calcMode\": \"calcMode\",\n\t  \"capHeight\": \"cap-height\",\n\t  \"class\": \"class\",\n\t  \"clipPathUnits\": \"clipPathUnits\",\n\t  \"contentScriptType\": \"contentScriptType\",\n\t  \"contentStyleType\": \"contentStyleType\",\n\t  \"cx\": \"cx\",\n\t  \"cy\": \"cy\",\n\t  \"d\": \"d\",\n\t  \"descent\": \"descent\",\n\t  \"diffuseConstant\": \"diffuseConstant\",\n\t  \"divisor\": \"divisor\",\n\t  \"dur\": \"dur\",\n\t  \"dx\": \"dx\",\n\t  \"dy\": \"dy\",\n\t  \"edgeMode\": \"edgeMode\",\n\t  \"elevation\": \"elevation\",\n\t  \"end\": \"end\",\n\t  \"exponent\": \"exponent\",\n\t  \"externalResourcesRequired\": \"externalResourcesRequired\",\n\t  \"fill\": \"fill\",\n\t  \"filterRes\": \"filterRes\",\n\t  \"filterUnits\": \"filterUnits\",\n\t  \"fontFamily\": \"font-family\",\n\t  \"fontSize\": \"font-size\",\n\t  \"fontStretch\": \"font-stretch\",\n\t  \"fontStyle\": \"font-style\",\n\t  \"format\": \"format\",\n\t  \"from\": \"from\",\n\t  \"fx\": \"fx\",\n\t  \"fy\": \"fy\",\n\t  \"g1\": \"g1\",\n\t  \"g2\": \"g2\",\n\t  \"glyphame\": \"glyph-name\",\n\t  \"glyphRef\": \"glyphRef\",\n\t  \"gradientTransform\": \"gradientTransform\",\n\t  \"gradientUnits\": \"gradientUnits\",\n\t  \"hanging\": \"hanging\",\n\t  \"height\": \"height\",\n\t  \"horizAdvX\": \"horiz-adv-x\",\n\t  \"horizOriginX\": \"horiz-origin-x\",\n\t  \"horizOriginY\": \"horiz-origin-y\",\n\t  \"id\": \"id\",\n\t  \"ideographic\": \"ideographic\",\n\t  \"in\": \"in\",\n\t  \"in2\": \"in2\",\n\t  \"intercept\": \"intercept\",\n\t  \"k\": \"k\",\n\t  \"k1\": \"k1\",\n\t  \"k2\": \"k2\",\n\t  \"k3\": \"k3\",\n\t  \"k4\": \"k4\",\n\t  \"kernelMatrix\": \"kernelMatrix\",\n\t  \"kernelUnitLength\": \"kernelUnitLength\",\n\t  \"keyPoints\": \"keyPoints\",\n\t  \"keySplines\": \"keySplines\",\n\t  \"keyTimes\": \"keyTimes\",\n\t  \"lang\": \"lang\",\n\t  \"lengthAdjust\": \"lengthAdjust\",\n\t  \"limitingConeAngle\": \"limitingConeAngle\",\n\t  \"local\": \"local\",\n\t  \"markerHeight\": \"markerHeight\",\n\t  \"markerUnits\": \"markerUnits\",\n\t  \"markerWidth\": \"markerWidth\",\n\t  \"maskContentUnits\": \"maskContentUnits\",\n\t  \"maskUnits\": \"maskUnits\",\n\t  \"mathematical\": \"mathematical\",\n\t  \"max\": \"max\",\n\t  \"media\": \"media\",\n\t  \"method\": \"method\",\n\t  \"min\": \"min\",\n\t  \"mode\": \"mode\",\n\t  \"name\": \"name\",\n\t  \"numOctaves\": \"numOctaves\",\n\t  \"offset\": \"offset\",\n\t  \"onAbort\": \"onabort\",\n\t  \"onActivate\": \"onactivate\",\n\t  \"onBegin\": \"onbegin\",\n\t  \"onClick\": \"onclick\",\n\t  \"onEnd\": \"onend\",\n\t  \"onError\": \"onerror\",\n\t  \"onFocusIn\": \"onfocusin\",\n\t  \"onFocusOut\": \"onfocusout\",\n\t  \"onLoad\": \"onload\",\n\t  \"onMouseDown\": \"onmousedown\",\n\t  \"onMouseMove\": \"onmousemove\",\n\t  \"onMouseOut\": \"onmouseout\",\n\t  \"onMouseOver\": \"onmouseover\",\n\t  \"onMouseUp\": \"onmouseup\",\n\t  \"onRepeat\": \"onrepeat\",\n\t  \"onResize\": \"onresize\",\n\t  \"onScroll\": \"onscroll\",\n\t  \"onUnload\": \"onunload\",\n\t  \"onZoom\": \"onzoom\",\n\t  \"operator\": \"operator\",\n\t  \"order\": \"order\",\n\t  \"orient\": \"orient\",\n\t  \"orientation\": \"orientation\",\n\t  \"origin\": \"origin\",\n\t  \"overlinePosition\": \"overline-position\",\n\t  \"overlineThickness\": \"overline-thickness\",\n\t  \"panose1\": \"panose-1\",\n\t  \"path\": \"path\",\n\t  \"pathLength\": \"pathLength\",\n\t  \"patternContentUnits\": \"patternContentUnits\",\n\t  \"patternTransform\": \"patternTransform\",\n\t  \"patternUnits\": \"patternUnits\",\n\t  \"points\": \"points\",\n\t  \"pointsAtX\": \"pointsAtX\",\n\t  \"pointsAtY\": \"pointsAtY\",\n\t  \"pointsAtZ\": \"pointsAtZ\",\n\t  \"preserveAlpha\": \"preserveAlpha\",\n\t  \"preserveAspectRatio\": \"preserveAspectRatio\",\n\t  \"primitiveUnits\": \"primitiveUnits\",\n\t  \"r\": \"r\",\n\t  \"radius\": \"radius\",\n\t  \"refX\": \"refX\",\n\t  \"refY\": \"refY\",\n\t  \"renderingIntent\": \"rendering-intent\",\n\t  \"repeatCount\": \"repeatCount\",\n\t  \"repeatDur\": \"repeatDur\",\n\t  \"requiredExtensions\": \"requiredExtensions\",\n\t  \"requiredFeatures\": \"requiredFeatures\",\n\t  \"restart\": \"restart\",\n\t  \"result\": \"result\",\n\t  \"rotate\": \"rotate\",\n\t  \"rx\": \"rx\",\n\t  \"ry\": \"ry\",\n\t  \"scale\": \"scale\",\n\t  \"seed\": \"seed\",\n\t  \"slope\": \"slope\",\n\t  \"spacing\": \"spacing\",\n\t  \"specularConstant\": \"specularConstant\",\n\t  \"specularExponent\": \"specularExponent\",\n\t  \"spreadMethod\": \"spreadMethod\",\n\t  \"startOffset\": \"startOffset\",\n\t  \"stdDeviation\": \"stdDeviation\",\n\t  \"stemh\": \"stemh\",\n\t  \"stemv\": \"stemv\",\n\t  \"stitchTiles\": \"stitchTiles\",\n\t  \"strikethroughPosition\": \"strikethrough-position\",\n\t  \"strikethroughThickness\": \"strikethrough-thickness\",\n\t  \"string\": \"string\",\n\t  \"style\": \"style\",\n\t  \"surfaceScale\": \"surfaceScale\",\n\t  \"systemLanguage\": \"systemLanguage\",\n\t  \"tableValues\": \"tableValues\",\n\t  \"target\": \"target\",\n\t  \"targetX\": \"targetX\",\n\t  \"targetY\": \"targetY\",\n\t  \"textLength\": \"textLength\",\n\t  \"title\": \"title\",\n\t  \"to\": \"to\",\n\t  \"transform\": \"transform\",\n\t  \"type\": \"type\",\n\t  \"u1\": \"u1\",\n\t  \"u2\": \"u2\",\n\t  \"underlinePosition\": \"underline-position\",\n\t  \"underlineThickness\": \"underline-thickness\",\n\t  \"unicode\": \"unicode\",\n\t  \"unicodeRange\": \"unicode-range\",\n\t  \"unitsPerEm\": \"units-per-em\",\n\t  \"vAlphabetic\": \"v-alphabetic\",\n\t  \"vHanging\": \"v-hanging\",\n\t  \"vIdeographic\": \"v-ideographic\",\n\t  \"vMathematical\": \"v-mathematical\",\n\t  \"values\": \"values\",\n\t  \"version\": \"version\",\n\t  \"vertAdvY\": \"vert-adv-y\",\n\t  \"vertOriginX\": \"vert-origin-x\",\n\t  \"vertOriginY\": \"vert-origin-y\",\n\t  \"viewBox\": \"viewBox\",\n\t  \"viewTarget\": \"viewTarget\",\n\t  \"width\": \"width\",\n\t  \"widths\": \"widths\",\n\t  \"x\": \"x\",\n\t  \"xHeight\": \"x-height\",\n\t  \"x1\": \"x1\",\n\t  \"x2\": \"x2\",\n\t  \"xChannelSelector\": \"xChannelSelector\",\n\t  \"xlink\": \"xlink\",\n\t  \"xml\": \"xml\",\n\t  \"y\": \"y\",\n\t  \"y1\": \"y1\",\n\t  \"y2\": \"y2\",\n\t  \"yChannelSelector\": \"yChannelSelector\",\n\t  \"z\": \"z\",\n\t  \"zoomAndPan\": \"zoomAndPan\",\n\t  /**\n\t   * Presentation attributes\n\t   */\n\t  \"alignmentBaseline\": \"alignment-baseline\",\n\t  \"baselineShift\": \"baseline-shift\",\n\t  \"clipPath\": \"clip-path\",\n\t  \"clipRule\": \"clip-rule\",\n\t  \"clip\": \"clip\",\n\t  \"colorInterpolationFilters\": \"color-interpolation-filters\",\n\t  \"colorInterpolation\": \"color-interpolation\",\n\t  \"colorProfile\": \"color-profile\",\n\t  \"colorRendering\": \"color-rendering\",\n\t  \"color\": \"color\",\n\t  \"cursor\": \"cursor\",\n\t  \"direction\": \"direction\",\n\t  \"display\": \"display\",\n\t  \"dominantBaseline\": \"dominant-baseline\",\n\t  \"enableBackground\": \"enable-background\",\n\t  \"fillOpacity\": \"fill-opacity\",\n\t  \"fillRule\": \"fill-rule\",\n\t  \"filter\": \"filter\",\n\t  \"floodColor\": \"flood-color\",\n\t  \"floodOpacity\": \"flood-opacity\",\n\t  \"fontSizeAdjust\": \"font-size-adjust\",\n\t  \"fontVariant\": \"font-variant\",\n\t  \"fontWeight\": \"font-weight\",\n\t  \"glyphOrientationHorizontal\": \"glyph-orientation-horizontal\",\n\t  \"glyphOrientationVertical\": \"glyph-orientation-vertical\",\n\t  \"imageRendering\": \"image-rendering\",\n\t  \"kerning\": \"kerning\",\n\t  \"letterSpacing\": \"letter-spacing\",\n\t  \"lightingColor\": \"lighting-color\",\n\t  \"markerEnd\": \"marker-end\",\n\t  \"markerMid\": \"marker-mid\",\n\t  \"markerStart\": \"marker-start\",\n\t  \"mask\": \"mask\",\n\t  \"opacity\": \"opacity\",\n\t  \"overflow\": \"overflow\",\n\t  \"pointerEvents\": \"pointer-events\",\n\t  \"shapeRendering\": \"shape-rendering\",\n\t  \"stopColor\": \"stop-color\",\n\t  \"stopOpacity\": \"stop-opacity\",\n\t  \"strokeDasharray\": \"stroke-dasharray\",\n\t  \"strokeDashoffset\": \"stroke-dashoffset\",\n\t  \"strokeLinecap\": \"stroke-linecap\",\n\t  \"strokeLinejoin\": \"stroke-linejoin\",\n\t  \"strokeMiterlimit\": \"stroke-miterlimit\",\n\t  \"strokeOpacity\": \"stroke-opacity\",\n\t  \"strokeWidth\": \"stroke-width\",\n\t  \"stroke\": \"stroke\",\n\t  \"textAnchor\": \"text-anchor\",\n\t  \"textDecoration\": \"text-decoration\",\n\t  \"textRendering\": \"text-rendering\",\n\t  \"unicodeBidi\": \"unicode-bidi\",\n\t  \"visibility\": \"visibility\",\n\t  \"wordSpacing\": \"word-spacing\",\n\t  \"writingMode\": \"writing-mode\"\n\t};\n\n\n/***/ }\n/******/ ]);","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nexports.__esModule = true;\nexports.propsToOptions = void 0;\nvar Es6Promise = require(\"es6-promise\"); // without this, 'yarn build' will complain about Promise.\nvar react_dom_1 = require(\"react-dom\");\n// .prettierignore    (to keep relevant props together)\nvar NOOPS = function () { };\nfunction syncRender(comp, el) {\n    return new Es6Promise.Promise(function (resolve, reject) {\n        react_dom_1.render(comp, el, function () {\n            resolve(el);\n        });\n    });\n}\n// get callbacks from props (default: NOOP) to set them to Tabulator options later.\nvar propsToOptions = function (props) { return __awaiter(void 0, void 0, void 0, function () {\n    var output, defaultOptions, _i, defaultOptions_1, opt, callbackNames, _a, callbackNames_1, callbackName, el;\n    return __generator(this, function (_b) {\n        switch (_b.label) {\n            case 0:\n                output = {};\n                defaultOptions = ['height', 'layout', 'layoutColumnsOnNewData', 'columnMinWidth', 'columnVertAlign',\n                    'resizableColumns', 'resizableRows', 'autoResize', 'tooltips', 'tooltipsHeader', 'tooltipGenerationMode',\n                    'initialSort', 'initialFilter', 'initialHeaderFilter', 'footerElement', 'index', 'keybindings', 'clipboard', 'clipboardCopyStyled',\n                    'clipboardCopySelector', 'clipboardCopyFormatter', 'clipboardCopyHeader', 'clipboardPasteParser',\n                    'clipboardPasteAction', 'rowFormatter', 'placeholder', 'selectable'];\n                for (_i = 0, defaultOptions_1 = defaultOptions; _i < defaultOptions_1.length; _i++) {\n                    opt = defaultOptions_1[_i];\n                    if (typeof props[opt] !== 'undefined') {\n                        output[opt] = props[opt];\n                    }\n                }\n                callbackNames = ['tableBuilt', 'rowClick', 'rowDblClick', 'rowContext', 'rowTap', 'rowDblTap', 'rowTapHold',\n                    'rowAdded', 'rowDeleted', 'rowMoved', 'rowUpdated', 'rowSelectionChanged', 'rowSelected', 'rowDeselected', 'rowResized',\n                    'cellClick', 'cellDblClick', 'cellContext', 'cellTap', 'cellDblTap', 'cellTapHold', 'cellEditing', 'cellEdited', 'cellEditCancelled',\n                    'columnMoved', 'columnResized', 'columnTitleChanged', 'columnVisibilityChanged',\n                    'htmlImporting', 'htmlImported', 'dataLoading', 'dataLoaded', 'dataChanged',\n                    'ajaxRequesting', 'ajaxResponse', 'ajaxError', 'dataFiltering', 'dataFiltered', 'dataSorting', 'dataSorted',\n                    'renderStarted', 'renderComplete', 'pageLoaded', 'localized', 'dataGrouping', 'dataGrouped',\n                    'groupVisibilityChanged', 'groupClick', 'groupDblClick', 'groupContext', 'groupTap', 'groupDblTap', 'groupTapHold',\n                    'movableRowsSendingStart', 'movableRowsSent', 'movableRowsSentFailed', 'movableRowsSendingStop', 'movableRowsReceivingStart', 'movableRowsReceived', 'movableRowsReceivedFailed', 'movableRowsReceivingStop',\n                    'validationFailed', 'clipboardCopied', 'clipboardPasted', 'clipboardPasteError',\n                    'downloadReady', 'downloadComplete'];\n                for (_a = 0, callbackNames_1 = callbackNames; _a < callbackNames_1.length; _a++) {\n                    callbackName = callbackNames_1[_a];\n                    output[callbackName] = props[callbackName] || NOOPS;\n                }\n                if (!(typeof props['footerElement'] === 'object')) return [3 /*break*/, 2];\n                return [4 /*yield*/, syncRender(props['footerElement'], document.createElement('div'))];\n            case 1:\n                el = _b.sent();\n                output['footerElement'] = el.innerHTML;\n                _b.label = 2;\n            case 2: return [2 /*return*/, output];\n        }\n    });\n}); };\nexports.propsToOptions = propsToOptions;\n","/* 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 || \"&nbsp;\";\n\t\t\t});\n\t\t} else {\n\t\t\ttitleElement.value = def.title || \"&nbsp;\";\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 || \"&nbsp;\");\n\t\t\t});\n\t\t} else {\n\t\t\tself._formatColumnHeaderTitle(titleHolderElement, def.title || \"&nbsp;\");\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 === \"\" ? \"&nbsp;\" : 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 === \"\" ? \"&nbsp;\" : 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'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;',\n\t\t\t'/': '&#x2F;',\n\t\t\t'`': '&#x60;',\n\t\t\t'=': '&#x3D;'\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 === \"\" ? \"&nbsp;\" : 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 \"&nbsp;\";\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 = \"&vellip;\";\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;","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var af = moment.defineLocale('af', {\n        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM : function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Vandag om] LT',\n            nextDay : '[Môre om] LT',\n            nextWeek : 'dddd [om] LT',\n            lastDay : '[Gister om] LT',\n            lastWeek : '[Laas] dddd [om] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'oor %s',\n            past : '%s gelede',\n            s : '\\'n paar sekondes',\n            ss : '%d sekondes',\n            m : '\\'n minuut',\n            mm : '%d minute',\n            h : '\\'n uur',\n            hh : '%d ure',\n            d : '\\'n dag',\n            dd : '%d dae',\n            M : '\\'n maand',\n            MM : '%d maande',\n            y : '\\'n jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week : {\n            dow : 1, // Maandag is die eerste dag van die week.\n            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        }\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var ar = moment.defineLocale('ar', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arDz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '1',\n        '2': '2',\n        '3': '3',\n        '4': '4',\n        '5': '5',\n        '6': '6',\n        '7': '7',\n        '8': '8',\n        '9': '9',\n        '0': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss : '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات'\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arTn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı'\n    };\n\n    var az = moment.defineLocale('az', {\n        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[sabah saat] LT',\n            nextWeek : '[gələn həftə] dddd [saat] LT',\n            lastDay : '[dünən] LT',\n            lastWeek : '[keçən həftə] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s əvvəl',\n            s : 'birneçə saniyə',\n            ss : '%d saniyə',\n            m : 'bir dəqiqə',\n            mm : '%d dəqiqə',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir il',\n            yy : '%d il'\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM : function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal : function (number) {\n            if (number === 0) {  // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = number % 100 - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            'dd': 'дзень_дні_дзён',\n            'MM': 'месяц_месяцы_месяцаў',\n            'yy': 'год_гады_гадоў'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months : {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n        },\n        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays : {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n        },\n        calendar : {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'праз %s',\n            past : '%s таму',\n            s : 'некалькі секунд',\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithPlural,\n            hh : relativeTimeWithPlural,\n            d : 'дзень',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM : function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bg = moment.defineLocale('bg', {\n        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Днес в] LT',\n            nextDay : '[Утре в] LT',\n            nextWeek : 'dddd [в] LT',\n            lastDay : '[Вчера в] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[В изминалата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[В изминалия] dddd [в] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'след %s',\n            past : 'преди %s',\n            s : 'няколко секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дни',\n            M : 'месец',\n            MM : '%d месеца',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bm = moment.defineLocale('bm', {\n        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'MMMM [tile] D [san] YYYY',\n            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bi lɛrɛ] LT',\n            nextDay : '[Sini lɛrɛ] LT',\n            nextWeek : 'dddd [don lɛrɛ] LT',\n            lastDay : '[Kunu lɛrɛ] LT',\n            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s kɔnɔ',\n            past : 'a bɛ %s bɔ',\n            s : 'sanga dama dama',\n            ss : 'sekondi %d',\n            m : 'miniti kelen',\n            mm : 'miniti %d',\n            h : 'lɛrɛ kelen',\n            hh : 'lɛrɛ %d',\n            d : 'tile kelen',\n            dd : 'tile %d',\n            M : 'kalo kelen',\n            MM : 'kalo %d',\n            y : 'san kelen',\n            yy : 'san %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return bm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '১',\n        '2': '২',\n        '3': '৩',\n        '4': '৪',\n        '5': '৫',\n        '6': '৬',\n        '7': '৭',\n        '8': '৮',\n        '9': '৯',\n        '0': '০'\n    },\n    numberMap = {\n        '১': '1',\n        '২': '2',\n        '৩': '3',\n        '৪': '4',\n        '৫': '5',\n        '৬': '6',\n        '৭': '7',\n        '৮': '8',\n        '৯': '9',\n        '০': '0'\n    };\n\n    var bn = moment.defineLocale('bn', {\n        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm সময়',\n            LTS : 'A h:mm:ss সময়',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm সময়',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n        },\n        calendar : {\n            sameDay : '[আজ] LT',\n            nextDay : '[আগামীকাল] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[গতকাল] LT',\n            lastWeek : '[গত] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s পরে',\n            past : '%s আগে',\n            s : 'কয়েক সেকেন্ড',\n            ss : '%d সেকেন্ড',\n            m : 'এক মিনিট',\n            mm : '%d মিনিট',\n            h : 'এক ঘন্টা',\n            hh : '%d ঘন্টা',\n            d : 'এক দিন',\n            dd : '%d দিন',\n            M : 'এক মাস',\n            MM : '%d মাস',\n            y : 'এক বছর',\n            yy : '%d বছর'\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'রাত' && hour >= 4) ||\n                    (meridiem === 'দুপুর' && hour < 5) ||\n                    meridiem === 'বিকাল') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '༡',\n        '2': '༢',\n        '3': '༣',\n        '4': '༤',\n        '5': '༥',\n        '6': '༦',\n        '7': '༧',\n        '8': '༨',\n        '9': '༩',\n        '0': '༠'\n    },\n    numberMap = {\n        '༡': '1',\n        '༢': '2',\n        '༣': '3',\n        '༤': '4',\n        '༥': '5',\n        '༦': '6',\n        '༧': '7',\n        '༨': '8',\n        '༩': '9',\n        '༠': '0'\n    };\n\n    var bo = moment.defineLocale('bo', {\n        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[དི་རིང] LT',\n            nextDay : '[སང་ཉིན] LT',\n            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay : '[ཁ་སང] LT',\n            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ལ་',\n            past : '%s སྔན་ལ',\n            s : 'ལམ་སང',\n            ss : '%d སྐར་ཆ།',\n            m : 'སྐར་མ་གཅིག',\n            mm : '%d སྐར་མ',\n            h : 'ཆུ་ཚོད་གཅིག',\n            hh : '%d ཆུ་ཚོད',\n            d : 'ཉིན་གཅིག',\n            dd : '%d ཉིན་',\n            M : 'ཟླ་བ་གཅིག',\n            MM : '%d ཟླ་བ',\n            y : 'ལོ་གཅིག',\n            yy : '%d ལོ'\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                    meridiem === 'དགོང་དག') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            'mm': 'munutenn',\n            'MM': 'miz',\n            'dd': 'devezh'\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            'm': 'v',\n            'b': 'v',\n            'd': 'z'\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var br = moment.defineLocale('br', {\n        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h[e]mm A',\n            LTS : 'h[e]mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [a viz] MMMM YYYY',\n            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n        },\n        calendar : {\n            sameDay : '[Hiziv da] LT',\n            nextDay : '[Warc\\'hoazh da] LT',\n            nextWeek : 'dddd [da] LT',\n            lastDay : '[Dec\\'h da] LT',\n            lastWeek : 'dddd [paset da] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'a-benn %s',\n            past : '%s \\'zo',\n            s : 'un nebeud segondennoù',\n            ss : '%d eilenn',\n            m : 'ur vunutenn',\n            mm : relativeTimeWithMutation,\n            h : 'un eur',\n            hh : '%d eur',\n            d : 'un devezh',\n            dd : relativeTimeWithMutation,\n            M : 'ur miz',\n            MM : relativeTimeWithMutation,\n            y : 'ur bloaz',\n            yy : specialMutationForYears\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal : function (number) {\n            var output = (number === 1) ? 'añ' : 'vet';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ca = moment.defineLocale('ca', {\n        months : {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n            isFormat: /D[oD]?(\\s)+MMMM/\n        },\n        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [de] YYYY',\n            ll : 'D MMM YYYY',\n            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n            lll : 'D MMM YYYY, H:mm',\n            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll : 'ddd D MMM YYYY, H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextDay : function () {\n                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastDay : function () {\n                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'd\\'aquí %s',\n            past : 'fa %s',\n            s : 'uns segons',\n            ss : '%d segons',\n            m : 'un minut',\n            mm : '%d minuts',\n            h : 'una hora',\n            hh : '%d hores',\n            d : 'un dia',\n            dd : '%d dies',\n            M : 'un mes',\n            MM : '%d mesos',\n            y : 'un any',\n            yy : '%d anys'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal : function (number, period) {\n            var output = (number === 1) ? 'r' :\n                (number === 2) ? 'n' :\n                (number === 3) ? 'r' :\n                (number === 4) ? 't' : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ca;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\n    var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i];\n    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n    var monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n                break;\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex : /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex : /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm',\n            l : 'D. M. YYYY'\n        },\n        calendar : {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'před %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cv = moment.defineLocale('cv', {\n        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n        },\n        calendar : {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (output) {\n                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n                return output + affix;\n            },\n            past : '%s каялла',\n            s : 'пӗр-ик ҫеккунт',\n            ss : '%d ҫеккунт',\n            m : 'пӗр минут',\n            mm : '%d минут',\n            h : 'пӗр сехет',\n            hh : '%d сехет',\n            d : 'пӗр кун',\n            dd : '%d кун',\n            M : 'пӗр уйӑх',\n            MM : '%d уйӑх',\n            y : 'пӗр ҫул',\n            yy : '%d ҫул'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal : '%d-мӗш',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var da = moment.defineLocale('da', {\n        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay : '[i dag kl.] LT',\n            nextDay : '[i morgen kl.] LT',\n            nextWeek : 'på dddd [kl.] LT',\n            lastDay : '[i går kl.] LT',\n            lastWeek : '[i] dddd[s kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'få sekunder',\n            ss : '%d sekunder',\n            m : 'et minut',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dage',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'et år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deAt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'ޖެނުއަރީ',\n        'ފެބްރުއަރީ',\n        'މާރިޗު',\n        'އޭޕްރީލު',\n        'މޭ',\n        'ޖޫން',\n        'ޖުލައި',\n        'އޯގަސްޓު',\n        'ސެޕްޓެމްބަރު',\n        'އޮކްޓޯބަރު',\n        'ނޮވެމްބަރު',\n        'ޑިސެމްބަރު'\n    ], weekdays = [\n        'އާދިއްތަ',\n        'ހޯމަ',\n        'އަންގާރަ',\n        'ބުދަ',\n        'ބުރާސްފަތި',\n        'ހުކުރު',\n        'ހޮނިހިރު'\n    ];\n\n    var dv = moment.defineLocale('dv', {\n        months : months,\n        monthsShort : months,\n        weekdays : weekdays,\n        weekdaysShort : weekdays,\n        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat : {\n\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/M/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM : function (input) {\n            return 'މފ' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar : {\n            sameDay : '[މިއަދު] LT',\n            nextDay : '[މާދަމާ] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[އިއްޔެ] LT',\n            lastWeek : '[ފާއިތުވި] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ތެރޭގައި %s',\n            past : 'ކުރިން %s',\n            s : 'ސިކުންތުކޮޅެއް',\n            ss : 'd% ސިކުންތު',\n            m : 'މިނިޓެއް',\n            mm : 'މިނިޓު %d',\n            h : 'ގަޑިއިރެއް',\n            hh : 'ގަޑިއިރު %d',\n            d : 'ދުވަހެއް',\n            dd : 'ދުވަސް %d',\n            M : 'މަހެއް',\n            MM : 'މަސް %d',\n            y : 'އަހަރެއް',\n            yy : 'އަހަރު %d'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 7,  // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM : function (input) {\n            return ((input + '').toLowerCase()[0] === 'μ');\n        },\n        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendarEl : {\n            sameDay : '[Σήμερα {}] LT',\n            nextDay : '[Αύριο {}] LT',\n            nextWeek : 'dddd [{}] LT',\n            lastDay : '[Χθες {}] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        calendar : function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n        },\n        relativeTime : {\n            future : 'σε %s',\n            past : '%s πριν',\n            s : 'λίγα δευτερόλεπτα',\n            ss : '%d δευτερόλεπτα',\n            m : 'ένα λεπτό',\n            mm : '%d λεπτά',\n            h : 'μία ώρα',\n            hh : '%d ώρες',\n            d : 'μία μέρα',\n            dd : '%d μέρες',\n            M : 'ένας μήνας',\n            MM : '%d μήνες',\n            y : 'ένας χρόνος',\n            yy : '%d χρόνια'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4st is the first week of the year.\n        }\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enSG = moment.defineLocale('en-SG', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enSG;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enAu = moment.defineLocale('en-au', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enAu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enCa = moment.defineLocale('en-ca', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'YYYY-MM-DD',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY h:mm A',\n            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enGb = moment.defineLocale('en-gb', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enGb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIe = moment.defineLocale('en-ie', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enIe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIl = moment.defineLocale('en-il', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enIl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enNz = moment.defineLocale('en-nz', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eo = moment.defineLocale('eo', {\n        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D[-a de] MMMM, YYYY',\n            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar : {\n            sameDay : '[Hodiaŭ je] LT',\n            nextDay : '[Morgaŭ je] LT',\n            nextWeek : 'dddd [je] LT',\n            lastDay : '[Hieraŭ je] LT',\n            lastWeek : '[pasinta] dddd [je] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'post %s',\n            past : 'antaŭ %s',\n            s : 'sekundoj',\n            ss : '%d sekundoj',\n            m : 'minuto',\n            mm : '%d minutoj',\n            h : 'horo',\n            hh : '%d horoj',\n            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n            dd : '%d tagoj',\n            M : 'monato',\n            MM : '%d monatoj',\n            y : 'jaro',\n            yy : '%d jaroj'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal : '%da',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return esDo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'MM/DD/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            'ss': [number + 'sekundi', number + 'sekundit'],\n            'm' : ['ühe minuti', 'üks minut'],\n            'mm': [number + ' minuti', number + ' minutit'],\n            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n            'hh': [number + ' tunni', number + ' tundi'],\n            'd' : ['ühe päeva', 'üks päev'],\n            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n            'MM': [number + ' kuu', number + ' kuud'],\n            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n            'yy': [number + ' aasta', number + ' aastat']\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat : {\n            LT   : 'H:mm',\n            LTS : 'H:mm:ss',\n            L    : 'DD.MM.YYYY',\n            LL   : 'D. MMMM YYYY',\n            LLL  : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[Täna,] LT',\n            nextDay  : '[Homme,] LT',\n            nextWeek : '[Järgmine] dddd LT',\n            lastDay  : '[Eile,] LT',\n            lastWeek : '[Eelmine] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s pärast',\n            past   : '%s tagasi',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : '%d päeva',\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return et;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eu = moment.defineLocale('eu', {\n        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY[ko] MMMM[ren] D[a]',\n            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l : 'YYYY-M-D',\n            ll : 'YYYY[ko] MMM D[a]',\n            lll : 'YYYY[ko] MMM D[a] HH:mm',\n            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n        },\n        calendar : {\n            sameDay : '[gaur] LT[etan]',\n            nextDay : '[bihar] LT[etan]',\n            nextWeek : 'dddd LT[etan]',\n            lastDay : '[atzo] LT[etan]',\n            lastWeek : '[aurreko] dddd LT[etan]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s barru',\n            past : 'duela %s',\n            s : 'segundo batzuk',\n            ss : '%d segundo',\n            m : 'minutu bat',\n            mm : '%d minutu',\n            h : 'ordu bat',\n            hh : '%d ordu',\n            d : 'egun bat',\n            dd : '%d egun',\n            M : 'hilabete bat',\n            MM : '%d hilabete',\n            y : 'urte bat',\n            yy : '%d urte'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '۱',\n        '2': '۲',\n        '3': '۳',\n        '4': '۴',\n        '5': '۵',\n        '6': '۶',\n        '7': '۷',\n        '8': '۸',\n        '9': '۹',\n        '0': '۰'\n    }, numberMap = {\n        '۱': '1',\n        '۲': '2',\n        '۳': '3',\n        '۴': '4',\n        '۵': '5',\n        '۶': '6',\n        '۷': '7',\n        '۸': '8',\n        '۹': '9',\n        '۰': '0'\n    };\n\n    var fa = moment.defineLocale('fa', {\n        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar : {\n            sameDay : '[امروز ساعت] LT',\n            nextDay : '[فردا ساعت] LT',\n            nextWeek : 'dddd [ساعت] LT',\n            lastDay : '[دیروز ساعت] LT',\n            lastWeek : 'dddd [پیش] [ساعت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'در %s',\n            past : '%s پیش',\n            s : 'چند ثانیه',\n            ss : 'ثانیه d%',\n            m : 'یک دقیقه',\n            mm : '%d دقیقه',\n            h : 'یک ساعت',\n            hh : '%d ساعت',\n            d : 'یک روز',\n            dd : '%d روز',\n            M : 'یک ماه',\n            MM : '%d ماه',\n            y : 'یک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/[۰-۹]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal : '%dم',\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n        numbersFuture = [\n            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n            numbersPast[7], numbersPast[8], numbersPast[9]\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                return isFuture ? 'sekunnin' : 'sekuntia';\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'Do MMMM[ta] YYYY',\n            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l : 'D.M.YYYY',\n            ll : 'Do MMM YYYY',\n            lll : 'Do MMM YYYY, [klo] HH.mm',\n            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n        },\n        calendar : {\n            sameDay : '[tänään] [klo] LT',\n            nextDay : '[huomenna] [klo] LT',\n            nextWeek : 'dddd [klo] LT',\n            lastDay : '[eilen] [klo] LT',\n            lastWeek : '[viime] dddd[na] [klo] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s päästä',\n            past : '%s sitten',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fo = moment.defineLocale('fo', {\n        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Í dag kl.] LT',\n            nextDay : '[Í morgin kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[Í gjár kl.] LT',\n            lastWeek : '[síðstu] dddd [kl] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'um %s',\n            past : '%s síðani',\n            s : 'fá sekund',\n            ss : '%d sekundir',\n            m : 'ein minuttur',\n            mm : '%d minuttir',\n            h : 'ein tími',\n            hh : '%d tímar',\n            d : 'ein dagur',\n            dd : '%d dagar',\n            M : 'ein mánaður',\n            MM : '%d mánaðir',\n            y : 'eitt ár',\n            yy : '%d ár'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fr = moment.defineLocale('fr', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        }\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'oer %s',\n            past : '%s lyn',\n            s : 'in pear sekonden',\n            ss : '%d sekonden',\n            m : 'ien minút',\n            mm : '%d minuten',\n            h : 'ien oere',\n            hh : '%d oeren',\n            d : 'ien dei',\n            dd : '%d dagen',\n            M : 'ien moanne',\n            MM : '%d moannen',\n            y : 'ien jier',\n            yy : '%d jierren'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\n    var months = [\n        'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'\n    ];\n\n    var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];\n\n    var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];\n\n    var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];\n\n    var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné aig] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d mí',\n            y: 'bliain',\n            yy: '%d bliain'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ga;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n    ];\n\n    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParseExact : true,\n        weekdays : weekdays,\n        weekdaysShort : weekdaysShort,\n        weekdaysMin : weekdaysMin,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[An-diugh aig] LT',\n            nextDay : '[A-màireach aig] LT',\n            nextWeek : 'dddd [aig] LT',\n            lastDay : '[An-dè aig] LT',\n            lastWeek : 'dddd [seo chaidh] [aig] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ann an %s',\n            past : 'bho chionn %s',\n            s : 'beagan diogan',\n            ss : '%d diogan',\n            m : 'mionaid',\n            mm : '%d mionaidean',\n            h : 'uair',\n            hh : '%d uairean',\n            d : 'latha',\n            dd : '%d latha',\n            M : 'mìos',\n            MM : '%d mìosan',\n            y : 'bliadhna',\n            yy : '%d bliadhna'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n        ordinal : function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var gl = moment.defineLocale('gl', {\n        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            lastDay : function () {\n                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n            },\n            lastWeek : function () {\n                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past : 'hai %s',\n            s : 'uns segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'unha hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['thodde secondanim', 'thodde second'],\n            'ss': [number + ' secondanim', number + ' second'],\n            'm': ['eka mintan', 'ek minute'],\n            'mm': [number + ' mintanim', number + ' mintam'],\n            'h': ['eka voran', 'ek vor'],\n            'hh': [number + ' voranim', number + ' voram'],\n            'd': ['eka disan', 'ek dis'],\n            'dd': [number + ' disanim', number + ' dis'],\n            'M': ['eka mhoinean', 'ek mhoino'],\n            'MM': [number + ' mhoineanim', number + ' mhoine'],\n            'y': ['eka vorsan', 'ek voros'],\n            'yy': [number + ' vorsanim', number + ' vorsam']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'A h:mm [vazta]',\n            LTS : 'A h:mm:ss [vazta]',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY A h:mm [vazta]',\n            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n        },\n        calendar : {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Ieta to] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fatlo] dddd[,] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s',\n            past : '%s adim',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /rati|sokalli|donparam|sanje/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokalli') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokalli';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        }\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n            '1': '૧',\n            '2': '૨',\n            '3': '૩',\n            '4': '૪',\n            '5': '૫',\n            '6': '૬',\n            '7': '૭',\n            '8': '૮',\n            '9': '૯',\n            '0': '૦'\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0'\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પેહલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ'\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6 // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return gu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var he = moment.defineLocale('he', {\n        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [ב]MMMM YYYY',\n            LLL : 'D [ב]MMMM YYYY HH:mm',\n            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n            l : 'D/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[היום ב־]LT',\n            nextDay : '[מחר ב־]LT',\n            nextWeek : 'dddd [בשעה] LT',\n            lastDay : '[אתמול ב־]LT',\n            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'בעוד %s',\n            past : 'לפני %s',\n            s : 'מספר שניות',\n            ss : '%d שניות',\n            m : 'דקה',\n            mm : '%d דקות',\n            h : 'שעה',\n            hh : function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d : 'יום',\n            dd : function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M : 'חודש',\n            MM : function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y : 'שנה',\n            yy : function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            }\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM : function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        }\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var hi = moment.defineLocale('hi', {\n        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm बजे',\n            LTS : 'A h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[कल] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[कल] LT',\n            lastWeek : '[पिछले] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s में',\n            past : '%s पहले',\n            s : 'कुछ ही क्षण',\n            ss : '%d सेकंड',\n            m : 'एक मिनट',\n            mm : '%d मिनट',\n            h : 'एक घंटा',\n            hh : '%d घंटे',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महीने',\n            MM : '%d महीने',\n            y : 'एक वर्ष',\n            yy : '%d वर्ष'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return hi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months : {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n        },\n        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY. MMMM D.',\n            LLL : 'YYYY. MMMM D. H:mm',\n            LLLL : 'YYYY. MMMM D., dddd H:mm'\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar : {\n            sameDay : '[ma] LT[-kor]',\n            nextDay : '[holnap] LT[-kor]',\n            nextWeek : function () {\n                return week.call(this, true);\n            },\n            lastDay : '[tegnap] LT[-kor]',\n            lastWeek : function () {\n                return week.call(this, false);\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s múlva',\n            past : '%s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months : {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n        },\n        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY թ.',\n            LLL : 'D MMMM YYYY թ., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n        },\n        calendar : {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s հետո',\n            past : '%s առաջ',\n            s : 'մի քանի վայրկյան',\n            ss : '%d վայրկյան',\n            m : 'րոպե',\n            mm : '%d րոպե',\n            h : 'ժամ',\n            hh : '%d ժամ',\n            d : 'օր',\n            dd : '%d օր',\n            M : 'ամիս',\n            MM : '%d ամիս',\n            y : 'տարի',\n            yy : '%d տարի'\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem : function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var id = moment.defineLocale('id', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Besok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kemarin pukul] LT',\n            lastWeek : 'dddd [lalu pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lalu',\n            s : 'beberapa detik',\n            ss : '%d detik',\n            m : 'semenit',\n            mm : '%d menit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return id;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n        },\n        calendar : {\n            sameDay : '[í dag kl.] LT',\n            nextDay : '[á morgun kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[í gær kl.] LT',\n            lastWeek : '[síðasta] dddd [kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'eftir %s',\n            past : 'fyrir %s síðan',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : 'klukkustund',\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return is;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var it = moment.defineLocale('it', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var itCh = moment.defineLocale('it-ch', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ja = moment.defineLocale('ja', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日 dddd HH:mm',\n            l : 'YYYY/MM/DD',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日(ddd) HH:mm'\n        },\n        meridiemParse: /午前|午後/i,\n        isPM : function (input) {\n            return input === '午後';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar : {\n            sameDay : '[今日] LT',\n            nextDay : '[明日] LT',\n            nextWeek : function (now) {\n                if (now.week() < this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay : '[昨日] LT',\n            lastWeek : function (now) {\n                if (this.week() < now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s後',\n            past : '%s前',\n            s : '数秒',\n            ss : '%d秒',\n            m : '1分',\n            mm : '%d分',\n            h : '1時間',\n            hh : '%d時間',\n            d : '1日',\n            dd : '%d日',\n            M : '1ヶ月',\n            MM : '%dヶ月',\n            y : '1年',\n            yy : '%d年'\n        }\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var jv = moment.defineLocale('jv', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar : {\n            sameDay : '[Dinten puniko pukul] LT',\n            nextDay : '[Mbenjang pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kala wingi pukul] LT',\n            lastWeek : 'dddd [kepengker pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'wonten ing %s',\n            past : '%s ingkang kepengker',\n            s : 'sawetawis detik',\n            ss : '%d detik',\n            m : 'setunggal menit',\n            mm : '%d menit',\n            h : 'setunggal jam',\n            hh : '%d jam',\n            d : 'sedinten',\n            dd : '%d dinten',\n            M : 'sewulan',\n            MM : '%d wulan',\n            y : 'setaun',\n            yy : '%d taun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ka = moment.defineLocale('ka', {\n        months : {\n            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n        },\n        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays : {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n            isFormat: /(წინა|შემდეგ)/\n        },\n        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[დღეს] LT[-ზე]',\n            nextDay : '[ხვალ] LT[-ზე]',\n            lastDay : '[გუშინ] LT[-ზე]',\n            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n            lastWeek : '[წინა] dddd LT-ზე',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                    s.replace(/ი$/, 'ში') :\n                    s + 'ში';\n            },\n            past : function (s) {\n                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if ((/წელი/).test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n            },\n            s : 'რამდენიმე წამი',\n            ss : '%d წამი',\n            m : 'წუთი',\n            mm : '%d წუთი',\n            h : 'საათი',\n            hh : '%d საათი',\n            d : 'დღე',\n            dd : '%d დღე',\n            M : 'თვე',\n            MM : '%d თვე',\n            y : 'წელი',\n            yy : '%d წელი'\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal : function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week : {\n            dow : 1,\n            doy : 7\n        }\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші'\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгін сағат] LT',\n            nextDay : '[Ертең сағат] LT',\n            nextWeek : 'dddd [сағат] LT',\n            lastDay : '[Кеше сағат] LT',\n            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ішінде',\n            past : '%s бұрын',\n            s : 'бірнеше секунд',\n            ss : '%d секунд',\n            m : 'бір минут',\n            mm : '%d минут',\n            h : 'бір сағат',\n            hh : '%d сағат',\n            d : 'бір күн',\n            dd : '%d күн',\n            M : 'бір ай',\n            MM : '%d ай',\n            y : 'бір жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '១',\n        '2': '២',\n        '3': '៣',\n        '4': '៤',\n        '5': '៥',\n        '6': '៦',\n        '7': '៧',\n        '8': '៨',\n        '9': '៩',\n        '0': '០'\n    }, numberMap = {\n        '១': '1',\n        '២': '2',\n        '៣': '3',\n        '៤': '4',\n        '៥': '5',\n        '៦': '6',\n        '៧': '7',\n        '៨': '8',\n        '៩': '9',\n        '០': '0'\n    };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ'\n        },\n        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n        ordinal : 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return km;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '೧',\n        '2': '೨',\n        '3': '೩',\n        '4': '೪',\n        '5': '೫',\n        '6': '೬',\n        '7': '೭',\n        '8': '೮',\n        '9': '೯',\n        '0': '೦'\n    },\n    numberMap = {\n        '೧': '1',\n        '೨': '2',\n        '೩': '3',\n        '೪': '4',\n        '೫': '5',\n        '೬': '6',\n        '೭': '7',\n        '೮': '8',\n        '೯': '9',\n        '೦': '0'\n    };\n\n    var kn = moment.defineLocale('kn', {\n        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[ಇಂದು] LT',\n            nextDay : '[ನಾಳೆ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ನಿನ್ನೆ] LT',\n            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ನಂತರ',\n            past : '%s ಹಿಂದೆ',\n            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss : '%d ಸೆಕೆಂಡುಗಳು',\n            m : 'ಒಂದು ನಿಮಿಷ',\n            mm : '%d ನಿಮಿಷ',\n            h : 'ಒಂದು ಗಂಟೆ',\n            hh : '%d ಗಂಟೆ',\n            d : 'ಒಂದು ದಿನ',\n            dd : '%d ದಿನ',\n            M : 'ಒಂದು ತಿಂಗಳು',\n            MM : '%d ತಿಂಗಳು',\n            y : 'ಒಂದು ವರ್ಷ',\n            yy : '%d ವರ್ಷ'\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal : function (number) {\n            return number + 'ನೇ';\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return kn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ko = moment.defineLocale('ko', {\n        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY년 MMMM D일',\n            LLL : 'YYYY년 MMMM D일 A h:mm',\n            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n            l : 'YYYY.MM.DD.',\n            ll : 'YYYY년 MMMM D일',\n            lll : 'YYYY년 MMMM D일 A h:mm',\n            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n        },\n        calendar : {\n            sameDay : '오늘 LT',\n            nextDay : '내일 LT',\n            nextWeek : 'dddd LT',\n            lastDay : '어제 LT',\n            lastWeek : '지난주 dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s 후',\n            past : '%s 전',\n            s : '몇 초',\n            ss : '%d초',\n            m : '1분',\n            mm : '%d분',\n            h : '한 시간',\n            hh : '%d시간',\n            d : '하루',\n            dd : '%d일',\n            M : '한 달',\n            MM : '%d달',\n            y : '일 년',\n            yy : '%d년'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse : /오전|오후/,\n        isPM : function (token) {\n            return token === '오후';\n        },\n        meridiem : function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        }\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    },\n    months = [\n        'کانونی دووەم',\n        'شوبات',\n        'ئازار',\n        'نیسان',\n        'ئایار',\n        'حوزەیران',\n        'تەمموز',\n        'ئاب',\n        'ئەیلوول',\n        'تشرینی یەكەم',\n        'تشرینی دووەم',\n        'كانونی یەکەم'\n    ];\n\n\n    var ku = moment.defineLocale('ku', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysShort : 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar : {\n            sameDay : '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay : '[به‌یانی كاتژمێر] LT',\n            nextWeek : 'dddd [كاتژمێر] LT',\n            lastDay : '[دوێنێ كاتژمێر] LT',\n            lastWeek : 'dddd [كاتژمێر] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'له‌ %s',\n            past : '%s',\n            s : 'چه‌ند چركه‌یه‌ك',\n            ss : 'چركه‌ %d',\n            m : 'یه‌ك خوله‌ك',\n            mm : '%d خوله‌ك',\n            h : 'یه‌ك كاتژمێر',\n            hh : '%d كاتژمێر',\n            d : 'یه‌ك ڕۆژ',\n            dd : '%d ڕۆژ',\n            M : 'یه‌ك مانگ',\n            MM : '%d مانگ',\n            y : 'یه‌ك ساڵ',\n            yy : '%d ساڵ'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү'\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгүн саат] LT',\n            nextDay : '[Эртең саат] LT',\n            nextWeek : 'dddd [саат] LT',\n            lastDay : '[Кечээ саат] LT',\n            lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ичинде',\n            past : '%s мурун',\n            s : 'бирнече секунд',\n            ss : '%d секунд',\n            m : 'бир мүнөт',\n            mm : '%d мүнөт',\n            h : 'бир саат',\n            hh : '%d саат',\n            d : 'бир күн',\n            dd : '%d күн',\n            M : 'бир ай',\n            MM : '%d ай',\n            y : 'бир жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eng Minutt', 'enger Minutt'],\n            'h': ['eng Stonn', 'enger Stonn'],\n            'd': ['een Dag', 'engem Dag'],\n            'M': ['ee Mount', 'engem Mount'],\n            'y': ['ee Joer', 'engem Joer']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10, firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            }\n        },\n        relativeTime : {\n            future : processFutureTime,\n            past : processPastTime,\n            s : 'e puer Sekonnen',\n            ss : '%d Sekonnen',\n            m : processRelativeTime,\n            mm : '%d Minutten',\n            h : processRelativeTime,\n            hh : '%d Stonnen',\n            d : processRelativeTime,\n            dd : '%d Deeg',\n            M : processRelativeTime,\n            MM : '%d Méint',\n            y : processRelativeTime,\n            yy : '%d Joer'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var lo = moment.defineLocale('lo', {\n        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar : {\n            sameDay : '[ມື້ນີ້ເວລາ] LT',\n            nextDay : '[ມື້ອື່ນເວລາ] LT',\n            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ອີກ %s',\n            past : '%sຜ່ານມາ',\n            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss : '%d ວິນາທີ' ,\n            m : '1 ນາທີ',\n            mm : '%d ນາທີ',\n            h : '1 ຊົ່ວໂມງ',\n            hh : '%d ຊົ່ວໂມງ',\n            d : '1 ມື້',\n            dd : '%d ມື້',\n            M : '1 ເດືອນ',\n            MM : '%d ເດືອນ',\n            y : '1 ປີ',\n            yy : '%d ປີ'\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal : function (number) {\n            return 'ທີ່' + number;\n        }\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss' : 'sekundė_sekundžių_sekundes',\n        'm' : 'minutė_minutės_minutę',\n        'mm': 'minutės_minučių_minutes',\n        'h' : 'valanda_valandos_valandą',\n        'hh': 'valandos_valandų_valandas',\n        'd' : 'diena_dienos_dieną',\n        'dd': 'dienos_dienų_dienas',\n        'M' : 'mėnuo_mėnesio_mėnesį',\n        'MM': 'mėnesiai_mėnesių_mėnesius',\n        'y' : 'metai_metų_metus',\n        'yy': 'metai_metų_metus'\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months : {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n        },\n        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays : {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n            isFormat: /dddd HH:mm/\n        },\n        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY [m.] MMMM D [d.]',\n            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l : 'YYYY-MM-DD',\n            ll : 'YYYY [m.] MMMM D [d.]',\n            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n        },\n        calendar : {\n            sameDay : '[Šiandien] LT',\n            nextDay : '[Rytoj] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[Vakar] LT',\n            lastWeek : '[Praėjusį] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'po %s',\n            past : 'prieš %s',\n            s : translateSeconds,\n            ss : translate,\n            m : translateSingular,\n            mm : translate,\n            h : translateSingular,\n            hh : translate,\n            d : translateSingular,\n            dd : translate,\n            M : translateSingular,\n            MM : translate,\n            y : translateSingular,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal : function (number) {\n            return number + '-oji';\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n        'd': 'dienas_dienām_diena_dienas'.split('_'),\n        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'y': 'gada_gadiem_gads_gadi'.split('_'),\n        'yy': 'gada_gadiem_gads_gadi'.split('_')\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY.',\n            LL : 'YYYY. [gada] D. MMMM',\n            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n        },\n        calendar : {\n            sameDay : '[Šodien pulksten] LT',\n            nextDay : '[Rīt pulksten] LT',\n            nextWeek : 'dddd [pulksten] LT',\n            lastDay : '[Vakar pulksten] LT',\n            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'pēc %s',\n            past : 'pirms %s',\n            s : relativeSeconds,\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithSingular,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithSingular,\n            hh : relativeTimeWithPlural,\n            d : relativeTimeWithSingular,\n            dd : relativeTimeWithPlural,\n            M : relativeTimeWithSingular,\n            MM : relativeTimeWithPlural,\n            y : relativeTimeWithSingular,\n            yy : relativeTimeWithPlural\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mjesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mk = moment.defineLocale('mk', {\n        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Денес во] LT',\n            nextDay : '[Утре во] LT',\n            nextWeek : '[Во] dddd [во] LT',\n            lastDay : '[Вчера во] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'после %s',\n            past : 'пред %s',\n            s : 'неколку секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дена',\n            M : 'месец',\n            MM : '%d месеци',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ml = moment.defineLocale('ml', {\n        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm -നു',\n            LTS : 'A h:mm:ss -നു',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm -നു',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n        },\n        calendar : {\n            sameDay : '[ഇന്ന്] LT',\n            nextDay : '[നാളെ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ഇന്നലെ] LT',\n            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s കഴിഞ്ഞ്',\n            past : '%s മുൻപ്',\n            s : 'അൽപ നിമിഷങ്ങൾ',\n            ss : '%d സെക്കൻഡ്',\n            m : 'ഒരു മിനിറ്റ്',\n            mm : '%d മിനിറ്റ്',\n            h : 'ഒരു മണിക്കൂർ',\n            hh : '%d മണിക്കൂർ',\n            d : 'ഒരു ദിവസം',\n            dd : '%d ദിവസം',\n            M : 'ഒരു മാസം',\n            MM : '%d മാസം',\n            y : 'ഒരു വർഷം',\n            yy : '%d വർഷം'\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                    meridiem === 'വൈകുന്നേരം') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        }\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY оны MMMMын D',\n            LLL : 'YYYY оны MMMMын D HH:mm',\n            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM : function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar : {\n            sameDay : '[Өнөөдөр] LT',\n            nextDay : '[Маргааш] LT',\n            nextWeek : '[Ирэх] dddd LT',\n            lastDay : '[Өчигдөр] LT',\n            lastWeek : '[Өнгөрсөн] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s дараа',\n            past : '%s өмнө',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        }\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n    {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's': output = 'काही सेकंद'; break;\n                case 'ss': output = '%d सेकंद'; break;\n                case 'm': output = 'एक मिनिट'; break;\n                case 'mm': output = '%d मिनिटे'; break;\n                case 'h': output = 'एक तास'; break;\n                case 'hh': output = '%d तास'; break;\n                case 'd': output = 'एक दिवस'; break;\n                case 'dd': output = '%d दिवस'; break;\n                case 'M': output = 'एक महिना'; break;\n                case 'MM': output = '%d महिने'; break;\n                case 'y': output = 'एक वर्ष'; break;\n                case 'yy': output = '%d वर्षे'; break;\n            }\n        }\n        else {\n            switch (string) {\n                case 's': output = 'काही सेकंदां'; break;\n                case 'ss': output = '%d सेकंदां'; break;\n                case 'm': output = 'एका मिनिटा'; break;\n                case 'mm': output = '%d मिनिटां'; break;\n                case 'h': output = 'एका तासा'; break;\n                case 'hh': output = '%d तासां'; break;\n                case 'd': output = 'एका दिवसा'; break;\n                case 'dd': output = '%d दिवसां'; break;\n                case 'M': output = 'एका महिन्या'; break;\n                case 'MM': output = '%d महिन्यां'; break;\n                case 'y': output = 'एका वर्षा'; break;\n                case 'yy': output = '%d वर्षां'; break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm वाजता',\n            LTS : 'A h:mm:ss वाजता',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm वाजता',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[उद्या] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात्री') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळी') {\n                return hour;\n            } else if (meridiem === 'दुपारी') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'सायंकाळी') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात्री';\n            } else if (hour < 10) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return mr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ms = moment.defineLocale('ms', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var msMy = moment.defineLocale('ms-my', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mt = moment.defineLocale('mt', {\n        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Illum fil-]LT',\n            nextDay : '[Għada fil-]LT',\n            nextWeek : 'dddd [fil-]LT',\n            lastDay : '[Il-bieraħ fil-]LT',\n            lastWeek : 'dddd [li għadda] [fil-]LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'f’ %s',\n            past : '%s ilu',\n            s : 'ftit sekondi',\n            ss : '%d sekondi',\n            m : 'minuta',\n            mm : '%d minuti',\n            h : 'siegħa',\n            hh : '%d siegħat',\n            d : 'ġurnata',\n            dd : '%d ġranet',\n            M : 'xahar',\n            MM : '%d xhur',\n            y : 'sena',\n            yy : '%d sni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '၁',\n        '2': '၂',\n        '3': '၃',\n        '4': '၄',\n        '5': '၅',\n        '6': '၆',\n        '7': '၇',\n        '8': '၈',\n        '9': '၉',\n        '0': '၀'\n    }, numberMap = {\n        '၁': '1',\n        '၂': '2',\n        '၃': '3',\n        '၄': '4',\n        '၅': '5',\n        '၆': '6',\n        '၇': '7',\n        '၈': '8',\n        '၉': '9',\n        '၀': '0'\n    };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss : '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်'\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return my;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nb = moment.defineLocale('nb', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'noen sekunder',\n            ss : '%d sekunder',\n            m : 'ett minutt',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dager',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var ne = moment.defineLocale('ne', {\n        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'Aको h:mm बजे',\n            LTS : 'Aको h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[भोलि] LT',\n            nextWeek : '[आउँदो] dddd[,] LT',\n            lastDay : '[हिजो] LT',\n            lastWeek : '[गएको] dddd[,] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sमा',\n            past : '%s अगाडि',\n            s : 'केही क्षण',\n            ss : '%d सेकेण्ड',\n            m : 'एक मिनेट',\n            mm : '%d मिनेट',\n            h : 'एक घण्टा',\n            hh : '%d घण्टा',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महिना',\n            MM : '%d महिना',\n            y : 'एक बर्ष',\n            yy : '%d बर्ष'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nlBe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nn = moment.defineLocale('nn', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s sidan',\n            s : 'nokre sekund',\n            ss : '%d sekund',\n            m : 'eit minutt',\n            mm : '%d minutt',\n            h : 'ein time',\n            hh : '%d timar',\n            d : 'ein dag',\n            dd : '%d dagar',\n            M : 'ein månad',\n            MM : '%d månader',\n            y : 'eit år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '੧',\n        '2': '੨',\n        '3': '੩',\n        '4': '੪',\n        '5': '੫',\n        '6': '੬',\n        '7': '੭',\n        '8': '੮',\n        '9': '੯',\n        '0': '੦'\n    },\n    numberMap = {\n        '੧': '1',\n        '੨': '2',\n        '੩': '3',\n        '੪': '4',\n        '੫': '5',\n        '੬': '6',\n        '੭': '7',\n        '੮': '8',\n        '੯': '9',\n        '੦': '0'\n    };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm ਵਜੇ',\n            LTS : 'A h:mm:ss ਵਜੇ',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n        },\n        calendar : {\n            sameDay : '[ਅਜ] LT',\n            nextDay : '[ਕਲ] LT',\n            nextWeek : '[ਅਗਲਾ] dddd, LT',\n            lastDay : '[ਕਲ] LT',\n            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ਵਿੱਚ',\n            past : '%s ਪਿਛਲੇ',\n            s : 'ਕੁਝ ਸਕਿੰਟ',\n            ss : '%d ਸਕਿੰਟ',\n            m : 'ਇਕ ਮਿੰਟ',\n            mm : '%d ਮਿੰਟ',\n            h : 'ਇੱਕ ਘੰਟਾ',\n            hh : '%d ਘੰਟੇ',\n            d : 'ਇੱਕ ਦਿਨ',\n            dd : '%d ਦਿਨ',\n            M : 'ਇੱਕ ਮਹੀਨਾ',\n            MM : '%d ਮਹੀਨੇ',\n            y : 'ਇੱਕ ਸਾਲ',\n            yy : '%d ਸਾਲ'\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n    function plural(n) {\n        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix  ? 'godzina'  : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (format === '') {\n                // Hack: if format empty we know this is used to generate\n                // RegExp by moment. Give then back both valid forms of months\n                // in RegExp ready format.\n                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : '%s temu',\n            s : 'kilka sekund',\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : '1 dzień',\n            dd : '%d dni',\n            M : 'miesiąc',\n            MM : translate,\n            y : 'rok',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var pt = moment.defineLocale('pt', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'poucos segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº'\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                'ss': 'secunde',\n                'mm': 'minute',\n                'hh': 'ore',\n                'dd': 'zile',\n                'MM': 'luni',\n                'yy': 'ani'\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'peste %s',\n            past : '%s în urmă',\n            s : 'câteva secunde',\n            ss : relativeTimeWithPlural,\n            m : 'un minut',\n            mm : relativeTimeWithPlural,\n            h : 'o oră',\n            hh : relativeTimeWithPlural,\n            d : 'o zi',\n            dd : relativeTimeWithPlural,\n            M : 'o lună',\n            MM : relativeTimeWithPlural,\n            y : 'un an',\n            yy : relativeTimeWithPlural\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            'hh': 'час_часа_часов',\n            'dd': 'день_дня_дней',\n            'MM': 'месяц_месяца_месяцев',\n            'yy': 'год_года_лет'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months : {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n        },\n        monthsShort : {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n        },\n        weekdays : {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соотвествует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., H:mm',\n            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n        },\n        calendar : {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'через %s',\n            past : '%s назад',\n            s : 'несколько секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'час',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM : function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوري',\n        'فيبروري',\n        'مارچ',\n        'اپريل',\n        'مئي',\n        'جون',\n        'جولاءِ',\n        'آگسٽ',\n        'سيپٽمبر',\n        'آڪٽوبر',\n        'نومبر',\n        'ڊسمبر'\n    ];\n    var days = [\n        'آچر',\n        'سومر',\n        'اڱارو',\n        'اربع',\n        'خميس',\n        'جمع',\n        'ڇنڇر'\n    ];\n\n    var sd = moment.defineLocale('sd', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[اڄ] LT',\n            nextDay : '[سڀاڻي] LT',\n            nextWeek : 'dddd [اڳين هفتي تي] LT',\n            lastDay : '[ڪالهه] LT',\n            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s پوء',\n            past : '%s اڳ',\n            s : 'چند سيڪنڊ',\n            ss : '%d سيڪنڊ',\n            m : 'هڪ منٽ',\n            mm : '%d منٽ',\n            h : 'هڪ ڪلاڪ',\n            hh : '%d ڪلاڪ',\n            d : 'هڪ ڏينهن',\n            dd : '%d ڏينهن',\n            M : 'هڪ مهينو',\n            MM : '%d مهينا',\n            y : 'هڪ سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var se = moment.defineLocale('se', {\n        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'MMMM D. [b.] YYYY',\n            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s geažes',\n            past : 'maŋit %s',\n            s : 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m : 'okta minuhta',\n            mm : '%d minuhtat',\n            h : 'okta diimmu',\n            hh : '%d diimmut',\n            d : 'okta beaivi',\n            dd : '%d beaivvit',\n            M : 'okta mánnu',\n            MM : '%d mánut',\n            y : 'okta jahki',\n            yy : '%d jagit'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return se;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'a h:mm',\n            LTS : 'a h:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY MMMM D',\n            LLL : 'YYYY MMMM D, a h:mm',\n            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n        },\n        calendar : {\n            sameDay : '[අද] LT[ට]',\n            nextDay : '[හෙට] LT[ට]',\n            nextWeek : 'dddd LT[ට]',\n            lastDay : '[ඊයේ] LT[ට]',\n            lastWeek : '[පසුගිය] dddd LT[ට]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sකින්',\n            past : '%sකට පෙර',\n            s : 'තත්පර කිහිපය',\n            ss : 'තත්පර %d',\n            m : 'මිනිත්තුව',\n            mm : 'මිනිත්තු %d',\n            h : 'පැය',\n            hh : 'පැය %d',\n            d : 'දිනය',\n            dd : 'දින %d',\n            M : 'මාසය',\n            MM : 'මාස %d',\n            y : 'වසර',\n            yy : 'වසර %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal : function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM : function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        }\n    });\n\n    return si;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n                break;\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months : months,\n        monthsShort : monthsShort,\n        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'pred %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danes ob] LT',\n            nextDay  : '[jutri ob] LT',\n\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay  : '[včeraj ob] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'čez %s',\n            past   : 'pred %s',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : processRelativeTime,\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sq = moment.defineLocale('sq', {\n        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Sot në] LT',\n            nextDay : '[Nesër në] LT',\n            nextWeek : 'dddd [në] LT',\n            lastDay : '[Dje në] LT',\n            lastWeek : 'dddd [e kaluar në] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'në %s',\n            past : '%s më parë',\n            s : 'disa sekonda',\n            ss : '%d sekonda',\n            m : 'një minutë',\n            mm : '%d minuta',\n            h : 'një orë',\n            hh : '%d orë',\n            d : 'një ditë',\n            dd : '%d ditë',\n            M : 'një muaj',\n            MM : '%d muaj',\n            y : 'një vit',\n            yy : '%d vite'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sq;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'pre %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay  : '[јуче у] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past   : 'пре %s',\n            s      : 'неколико секунди',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'дан',\n            dd     : translator.translate,\n            M      : 'месец',\n            MM     : translator.translate,\n            y      : 'годину',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ss = moment.defineLocale('ss', {\n        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Namuhla nga] LT',\n            nextDay : '[Kusasa nga] LT',\n            nextWeek : 'dddd [nga] LT',\n            lastDay : '[Itolo nga] LT',\n            lastWeek : 'dddd [leliphelile] [nga] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'nga %s',\n            past : 'wenteka nga %s',\n            s : 'emizuzwana lomcane',\n            ss : '%d mzuzwana',\n            m : 'umzuzu',\n            mm : '%d emizuzu',\n            h : 'lihora',\n            hh : '%d emahora',\n            d : 'lilanga',\n            dd : '%d emalanga',\n            M : 'inyanga',\n            MM : '%d tinyanga',\n            y : 'umnyaka',\n            yy : '%d iminyaka'\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : '%d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ss;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sv = moment.defineLocale('sv', {\n        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : 'för %s sedan',\n            s : 'några sekunder',\n            ss : '%d sekunder',\n            m : 'en minut',\n            mm : '%d minuter',\n            h : 'en timme',\n            hh : '%d timmar',\n            d : 'en dag',\n            dd : '%d dagar',\n            M : 'en månad',\n            MM : '%d månader',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'e' :\n                (b === 1) ? 'a' :\n                (b === 2) ? 'a' :\n                (b === 3) ? 'e' : 'e';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sw = moment.defineLocale('sw', {\n        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[leo saa] LT',\n            nextDay : '[kesho saa] LT',\n            nextWeek : '[wiki ijayo] dddd [saat] LT',\n            lastDay : '[jana] LT',\n            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s baadaye',\n            past : 'tokea %s',\n            s : 'hivi punde',\n            ss : 'sekunde %d',\n            m : 'dakika moja',\n            mm : 'dakika %d',\n            h : 'saa limoja',\n            hh : 'masaa %d',\n            d : 'siku moja',\n            dd : 'masiku %d',\n            M : 'mwezi mmoja',\n            MM : 'miezi %d',\n            y : 'mwaka mmoja',\n            yy : 'miaka %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '௧',\n        '2': '௨',\n        '3': '௩',\n        '4': '௪',\n        '5': '௫',\n        '6': '௬',\n        '7': '௭',\n        '8': '௮',\n        '9': '௯',\n        '0': '௦'\n    }, numberMap = {\n        '௧': '1',\n        '௨': '2',\n        '௩': '3',\n        '௪': '4',\n        '௫': '5',\n        '௬': '6',\n        '௭': '7',\n        '௮': '8',\n        '௯': '9',\n        '௦': '0'\n    };\n\n    var ta = moment.defineLocale('ta', {\n        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, HH:mm',\n            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n        },\n        calendar : {\n            sameDay : '[இன்று] LT',\n            nextDay : '[நாளை] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[நேற்று] LT',\n            lastWeek : '[கடந்த வாரம்] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s இல்',\n            past : '%s முன்',\n            s : 'ஒரு சில விநாடிகள்',\n            ss : '%d விநாடிகள்',\n            m : 'ஒரு நிமிடம்',\n            mm : '%d நிமிடங்கள்',\n            h : 'ஒரு மணி நேரம்',\n            hh : '%d மணி நேரம்',\n            d : 'ஒரு நாள்',\n            dd : '%d நாட்கள்',\n            M : 'ஒரு மாதம்',\n            MM : '%d மாதங்கள்',\n            y : 'ஒரு வருடம்',\n            yy : '%d ஆண்டுகள்'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal : function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை';  // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var te = moment.defineLocale('te', {\n        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[నేడు] LT',\n            nextDay : '[రేపు] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[నిన్న] LT',\n            lastWeek : '[గత] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s లో',\n            past : '%s క్రితం',\n            s : 'కొన్ని క్షణాలు',\n            ss : '%d సెకన్లు',\n            m : 'ఒక నిమిషం',\n            mm : '%d నిమిషాలు',\n            h : 'ఒక గంట',\n            hh : '%d గంటలు',\n            d : 'ఒక రోజు',\n            dd : '%d రోజులు',\n            M : 'ఒక నెల',\n            MM : '%d నెలలు',\n            y : 'ఒక సంవత్సరం',\n            yy : '%d సంవత్సరాలు'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n        ordinal : '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return te;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tet = moment.defineLocale('tet', {\n        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'iha %s',\n            past : '%s liuba',\n            s : 'minutu balun',\n            ss : 'minutu %d',\n            m : 'minutu ida',\n            mm : 'minutu %d',\n            h : 'oras ida',\n            hh : 'oras %d',\n            d : 'loron ida',\n            dd : 'loron %d',\n            M : 'fulan ida',\n            MM : 'fulan %d',\n            y : 'tinan ida',\n            yy : 'tinan %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tet;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум'\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Имрӯз соати] LT',\n            nextDay : '[Пагоҳ соати] LT',\n            lastDay : '[Дирӯз соати] LT',\n            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'баъди %s',\n            past : '%s пеш',\n            s : 'якчанд сония',\n            m : 'як дақиқа',\n            mm : '%d дақиқа',\n            h : 'як соат',\n            hh : '%d соат',\n            d : 'як рӯз',\n            dd : '%d рӯз',\n            M : 'як моҳ',\n            MM : '%d моҳ',\n            y : 'як сол',\n            yy : '%d сол'\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1th is the first week of the year.\n        }\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var th = moment.defineLocale('th', {\n        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY เวลา H:mm',\n            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar : {\n            sameDay : '[วันนี้ เวลา] LT',\n            nextDay : '[พรุ่งนี้ เวลา] LT',\n            nextWeek : 'dddd[หน้า เวลา] LT',\n            lastDay : '[เมื่อวานนี้ เวลา] LT',\n            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'อีก %s',\n            past : '%sที่แล้ว',\n            s : 'ไม่กี่วินาที',\n            ss : '%d วินาที',\n            m : '1 นาที',\n            mm : '%d นาที',\n            h : '1 ชั่วโมง',\n            hh : '%d ชั่วโมง',\n            d : '1 วัน',\n            dd : '%d วัน',\n            M : '1 เดือน',\n            MM : '%d เดือน',\n            y : '1 ปี',\n            yy : '%d ปี'\n        }\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'MM/D/YYYY',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY HH:mm',\n            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'sa loob ng %s',\n            past : '%s ang nakalipas',\n            s : 'ilang segundo',\n            ss : '%d segundo',\n            m : 'isang minuto',\n            mm : '%d minuto',\n            h : 'isang oras',\n            hh : '%d oras',\n            d : 'isang araw',\n            dd : '%d araw',\n            M : 'isang buwan',\n            MM : '%d buwan',\n            y : 'isang taon',\n            yy : '%d taon'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlPh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'leS' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'waQ' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'nem' :\n        time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'Hu’' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'wen' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'ben' :\n        time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n        ten = Math.floor((number % 100) / 10),\n        one = number % 10,\n        word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n        }\n        return (word === '') ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : translateFuture,\n            past : translatePast,\n            s : 'puS lup',\n            ss : translate,\n            m : 'wa’ tup',\n            mm : translate,\n            h : 'wa’ rep',\n            hh : translate,\n            d : 'wa’ jaj',\n            dd : translate,\n            M : 'wa’ jar',\n            MM : translate,\n            y : 'wa’ DIS',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlh;\n\n})));\n","\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    var suffixes = {\n        1: '\\'inci',\n        5: '\\'inci',\n        8: '\\'inci',\n        70: '\\'inci',\n        80: '\\'inci',\n        2: '\\'nci',\n        7: '\\'nci',\n        20: '\\'nci',\n        50: '\\'nci',\n        3: '\\'üncü',\n        4: '\\'üncü',\n        100: '\\'üncü',\n        6: '\\'ncı',\n        9: '\\'uncu',\n        10: '\\'uncu',\n        30: '\\'uncu',\n        60: '\\'ıncı',\n        90: '\\'ıncı'\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[yarın saat] LT',\n            nextWeek : '[gelecek] dddd [saat] LT',\n            lastDay : '[dün] LT',\n            lastWeek : '[geçen] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s önce',\n            s : 'birkaç saniye',\n            ss : '%d saniye',\n            m : 'bir dakika',\n            mm : '%d dakika',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir yıl',\n            yy : '%d yıl'\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {  // special case for zero\n                        return number + '\\'ıncı';\n                    }\n                    var a = number % 10,\n                        b = number % 100 - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM [dallas] YYYY',\n            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM : function (input) {\n            return 'd\\'o' === input.toLowerCase();\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'd\\'o' : 'D\\'O';\n            } else {\n                return isLower ? 'd\\'a' : 'D\\'A';\n            }\n        },\n        calendar : {\n            sameDay : '[oxhi à] LT',\n            nextDay : '[demà à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[ieiri à] LT',\n            lastWeek : '[sür el] dddd [lasteu à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'osprei %s',\n            past : 'ja%s',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['viensas secunds', '\\'iensas secunds'],\n            'ss': [number + ' secunds', '' + number + ' secunds'],\n            'm': ['\\'n míut', '\\'iens míut'],\n            'mm': [number + ' míuts', '' + number + ' míuts'],\n            'h': ['\\'n þora', '\\'iensa þora'],\n            'hh': [number + ' þoras', '' + number + ' þoras'],\n            'd': ['\\'n ziua', '\\'iensa ziua'],\n            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n            'M': ['\\'n mes', '\\'iens mes'],\n            'MM': [number + ' mesen', '' + number + ' mesen'],\n            'y': ['\\'n ar', '\\'iens ar'],\n            'yy': [number + ' ars', '' + number + ' ars']\n        };\n        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzm = moment.defineLocale('tzm', {\n        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past : 'ⵢⴰⵏ %s',\n            s : 'ⵉⵎⵉⴽ',\n            ss : '%d ⵉⵎⵉⴽ',\n            m : 'ⵎⵉⵏⵓⴺ',\n            mm : '%d ⵎⵉⵏⵓⴺ',\n            h : 'ⵙⴰⵄⴰ',\n            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d : 'ⴰⵙⵙ',\n            dd : '%d oⵙⵙⴰⵏ',\n            M : 'ⴰⵢoⵓⵔ',\n            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n            y : 'ⴰⵙⴳⴰⵙ',\n            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'dadkh s yan %s',\n            past : 'yan %s',\n            s : 'imik',\n            ss : '%d imik',\n            m : 'minuḍ',\n            mm : '%d minuḍ',\n            h : 'saɛa',\n            hh : '%d tassaɛin',\n            d : 'ass',\n            dd : '%d ossan',\n            M : 'ayowr',\n            MM : '%d iyyirn',\n            y : 'asgas',\n            yy : '%d isgasn'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js language configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل'\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ugCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            'dd': 'день_дні_днів',\n            'MM': 'місяць_місяці_місяців',\n            'yy': 'рік_роки_років'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n        };\n\n        if (m === true) {\n            return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n            'accusative' :\n            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n                'genitive' :\n                'nominative');\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months : {\n            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n        },\n        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n        weekdays : weekdaysCaseReplace,\n        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY р.',\n            LLL : 'D MMMM YYYY р., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n        },\n        calendar : {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past : '%s тому',\n            s : 'декілька секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'годину',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'місяць',\n            MM : relativeTimeWithPlural,\n            y : 'рік',\n            yy : relativeTimeWithPlural\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوری',\n        'فروری',\n        'مارچ',\n        'اپریل',\n        'مئی',\n        'جون',\n        'جولائی',\n        'اگست',\n        'ستمبر',\n        'اکتوبر',\n        'نومبر',\n        'دسمبر'\n    ];\n    var days = [\n        'اتوار',\n        'پیر',\n        'منگل',\n        'بدھ',\n        'جمعرات',\n        'جمعہ',\n        'ہفتہ'\n    ];\n\n    var ur = moment.defineLocale('ur', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[آج بوقت] LT',\n            nextDay : '[کل بوقت] LT',\n            nextWeek : 'dddd [بوقت] LT',\n            lastDay : '[گذشتہ روز بوقت] LT',\n            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s بعد',\n            past : '%s قبل',\n            s : 'چند سیکنڈ',\n            ss : '%d سیکنڈ',\n            m : 'ایک منٹ',\n            mm : '%d منٹ',\n            h : 'ایک گھنٹہ',\n            hh : '%d گھنٹے',\n            d : 'ایک دن',\n            dd : '%d دن',\n            M : 'ایک ماہ',\n            MM : '%d ماہ',\n            y : 'ایک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uz = moment.defineLocale('uz', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бугун соат] LT [да]',\n            nextDay : '[Эртага] LT [да]',\n            nextWeek : 'dddd [куни соат] LT [да]',\n            lastDay : '[Кеча соат] LT [да]',\n            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Якин %s ичида',\n            past : 'Бир неча %s олдин',\n            s : 'фурсат',\n            ss : '%d фурсат',\n            m : 'бир дакика',\n            mm : '%d дакика',\n            h : 'бир соат',\n            hh : '%d соат',\n            d : 'бир кун',\n            dd : '%d кун',\n            M : 'бир ой',\n            MM : '%d ой',\n            y : 'бир йил',\n            yy : '%d йил'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bugun soat] LT [da]',\n            nextDay : '[Ertaga] LT [da]',\n            nextWeek : 'dddd [kuni soat] LT [da]',\n            lastDay : '[Kecha soat] LT [da]',\n            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Yaqin %s ichida',\n            past : 'Bir necha %s oldin',\n            s : 'soniya',\n            ss : '%d soniya',\n            m : 'bir daqiqa',\n            mm : '%d daqiqa',\n            h : 'bir soat',\n            hh : '%d soat',\n            d : 'bir kun',\n            dd : '%d kun',\n            M : 'bir oy',\n            MM : '%d oy',\n            y : 'bir yil',\n            yy : '%d yil'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var vi = moment.defineLocale('vi', {\n        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /sa|ch/i,\n        isPM : function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [năm] YYYY',\n            LLL : 'D MMMM [năm] YYYY HH:mm',\n            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n            l : 'DD/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần rồi lúc] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s tới',\n            past : '%s trước',\n            s : 'vài giây',\n            ss : '%d giây' ,\n            m : 'một phút',\n            mm : '%d phút',\n            h : 'một giờ',\n            hh : '%d giờ',\n            d : 'một ngày',\n            dd : '%d ngày',\n            M : 'một tháng',\n            MM : '%d tháng',\n            y : 'một năm',\n            yy : '%d năm'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[T~ódá~ý át] LT',\n            nextDay : '[T~ómó~rró~w át] LT',\n            nextWeek : 'dddd [át] LT',\n            lastDay : '[Ý~ést~érdá~ý át] LT',\n            lastWeek : '[L~ást] dddd [át] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'í~ñ %s',\n            past : '%s á~gó',\n            s : 'á ~féw ~sécó~ñds',\n            ss : '%d s~écóñ~ds',\n            m : 'á ~míñ~úté',\n            mm : '%d m~íñú~tés',\n            h : 'á~ñ hó~úr',\n            hh : '%d h~óúrs',\n            d : 'á ~dáý',\n            dd : '%d d~áýs',\n            M : 'á ~móñ~th',\n            MM : '%d m~óñt~hs',\n            y : 'á ~ýéár',\n            yy : '%d ý~éárs'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var yo = moment.defineLocale('yo', {\n        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Ònì ni] LT',\n            nextDay : '[Ọ̀la ni] LT',\n            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n            lastDay : '[Àna ni] LT',\n            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ní %s',\n            past : '%s kọjá',\n            s : 'ìsẹjú aayá die',\n            ss :'aayá %d',\n            m : 'ìsẹjú kan',\n            mm : 'ìsẹjú %d',\n            h : 'wákati kan',\n            hh : 'wákati %d',\n            d : 'ọjọ́ kan',\n            dd : 'ọjọ́ %d',\n            M : 'osù kan',\n            MM : 'osù %d',\n            y : 'ọdún kan',\n            yy : 'ọdún %d'\n        },\n        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n        ordinal : 'ọjọ́ %d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return yo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日Ah点mm分',\n            LLLL : 'YYYY年M月D日ddddAh点mm分',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' ||\n                    meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s内',\n            past : '%s前',\n            s : '几秒',\n            ss : '%d 秒',\n            m : '1 分钟',\n            mm : '%d 分钟',\n            h : '1 小时',\n            hh : '%d 小时',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 个月',\n            MM : '%d 个月',\n            y : '1 年',\n            yy : '%d 年'\n        },\n        week : {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天] LT',\n            nextDay : '[明天] LT',\n            nextWeek : '[下]dddd LT',\n            lastDay : '[昨天] LT',\n            lastWeek : '[上]dddd LT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhTw;\n\n})));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nexports.__esModule = true;\nexports.reactFormatter = exports.ReactTabulatorExample = exports.React15Tabulator = exports.ReactTabulator = void 0;\nvar ReactTabulator_1 = require(\"./ReactTabulator\");\n__createBinding(exports, ReactTabulator_1, \"default\", \"ReactTabulator\");\nvar React15Tabulator_1 = require(\"./React15Tabulator\");\n__createBinding(exports, React15Tabulator_1, \"default\", \"React15Tabulator\");\nvar ReactTabulatorExample_1 = require(\"./ReactTabulatorExample\");\n__createBinding(exports, ReactTabulatorExample_1, \"default\", \"ReactTabulatorExample\");\nvar Utils_1 = require(\"./Utils\");\n__createBinding(exports, Utils_1, \"reactFormatter\");\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version   v4.2.8+1e68dce6\n */\n","export function objectOrFunction(x) {\n  var type = typeof x;\n  return x !== null && (type === 'object' || type === 'function');\n}\n\nexport function isFunction(x) {\n  return typeof x === 'function';\n}\n\nexport function isMaybeThenable(x) {\n  return x !== null && typeof x === 'object';\n}\n\nvar _isArray = void 0;\nif (Array.isArray) {\n  _isArray = Array.isArray;\n} else {\n  _isArray = function (x) {\n    return Object.prototype.toString.call(x) === '[object Array]';\n  };\n}\n\nexport var isArray = _isArray;","var len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nexport var asap = function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 2, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    if (customSchedulerFn) {\n      customSchedulerFn(flush);\n    } else {\n      scheduleFlush();\n    }\n  }\n};\n\nexport function setScheduler(scheduleFn) {\n  customSchedulerFn = scheduleFn;\n}\n\nexport function setAsap(asapFn) {\n  asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // see https://github.com/cujojs/when/issues/410 for details\n  return function () {\n    return process.nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  // Store setTimeout reference so es6-promise will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var globalSetTimeout = setTimeout;\n  return function () {\n    return globalSetTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertx() {\n  try {\n    var vertx = Function('return this')().require('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n  scheduleFlush = attemptVertx();\n} else {\n  scheduleFlush = useSetTimeout();\n}","import { invokeCallback, subscribe, FULFILLED, REJECTED, noop, makePromise, PROMISE_ID } from './-internal';\n\nimport { asap } from './asap';\n\nexport default function then(onFulfillment, onRejection) {\n  var parent = this;\n\n  var child = new this.constructor(noop);\n\n  if (child[PROMISE_ID] === undefined) {\n    makePromise(child);\n  }\n\n  var _state = parent._state;\n\n\n  if (_state) {\n    var callback = arguments[_state - 1];\n    asap(function () {\n      return invokeCallback(_state, child, callback, parent._result);\n    });\n  } else {\n    subscribe(parent, child, onFulfillment, onRejection);\n  }\n\n  return child;\n}","import { noop, resolve as _resolve } from '../-internal';\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @static\n  @param {Any} value value that the returned promise will be resolved with\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nexport default function resolve(object) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop);\n  _resolve(promise, object);\n  return promise;\n}","import { objectOrFunction, isFunction } from './utils';\n\nimport { asap } from './asap';\n\nimport originalThen from './then';\nimport originalResolve from './promise/resolve';\n\nexport var PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n  return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n  try {\n    then.call(value, fulfillmentHandler, rejectionHandler);\n  } catch (e) {\n    return e;\n  }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n  asap(function (promise) {\n    var sealed = false;\n    var error = tryThen(then, thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable !== value) {\n        resolve(promise, value);\n      } else {\n        fulfill(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && error) {\n      sealed = true;\n      reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      return resolve(promise, value);\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then) {\n  if (maybeThenable.constructor === promise.constructor && then === originalThen && maybeThenable.constructor.resolve === originalResolve) {\n    handleOwnThenable(promise, maybeThenable);\n  } else {\n    if (then === undefined) {\n      fulfill(promise, maybeThenable);\n    } else if (isFunction(then)) {\n      handleForeignThenable(promise, maybeThenable, then);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n}\n\nfunction resolve(promise, value) {\n  if (promise === value) {\n    reject(promise, selfFulfillment());\n  } else if (objectOrFunction(value)) {\n    var then = void 0;\n    try {\n      then = value.then;\n    } catch (error) {\n      reject(promise, error);\n      return;\n    }\n    handleMaybeThenable(promise, value, then);\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nfunction publishRejection(promise) {\n  if (promise._onerror) {\n    promise._onerror(promise._result);\n  }\n\n  publish(promise);\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length !== 0) {\n    asap(publish, promise);\n  }\n}\n\nfunction reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n\n  asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n  var _subscribers = parent._subscribers;\n  var length = _subscribers.length;\n\n\n  parent._onerror = null;\n\n  _subscribers[length] = child;\n  _subscribers[length + FULFILLED] = onFulfillment;\n  _subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    asap(publish, parent);\n  }\n}\n\nfunction publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = void 0,\n      callback = void 0,\n      detail = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, detail);\n    } else {\n      callback(detail);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n  var hasCallback = isFunction(callback),\n      value = void 0,\n      error = void 0,\n      succeeded = true;\n\n  if (hasCallback) {\n    try {\n      value = callback(detail);\n    } catch (e) {\n      succeeded = false;\n      error = e;\n    }\n\n    if (promise === value) {\n      reject(promise, cannotReturnOwn());\n      return;\n    }\n  } else {\n    value = detail;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (hasCallback && succeeded) {\n    resolve(promise, value);\n  } else if (succeeded === false) {\n    reject(promise, error);\n  } else if (settled === FULFILLED) {\n    fulfill(promise, value);\n  } else if (settled === REJECTED) {\n    reject(promise, value);\n  }\n}\n\nfunction initializePromise(promise, resolver) {\n  try {\n    resolver(function resolvePromise(value) {\n      resolve(promise, value);\n    }, function rejectPromise(reason) {\n      reject(promise, reason);\n    });\n  } catch (e) {\n    reject(promise, e);\n  }\n}\n\nvar id = 0;\nfunction nextId() {\n  return id++;\n}\n\nfunction makePromise(promise) {\n  promise[PROMISE_ID] = id++;\n  promise._state = undefined;\n  promise._result = undefined;\n  promise._subscribers = [];\n}\n\nexport { nextId, makePromise, noop, resolve, reject, fulfill, subscribe, publish, publishRejection, initializePromise, invokeCallback, FULFILLED, REJECTED, PENDING, handleMaybeThenable };","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isArray, isMaybeThenable } from './utils';\nimport { noop, reject, fulfill, subscribe, FULFILLED, REJECTED, PENDING, handleMaybeThenable } from './-internal';\n\nimport then from './then';\nimport Promise from './promise';\nimport originalResolve from './promise/resolve';\nimport originalThen from './then';\nimport { makePromise, PROMISE_ID } from './-internal';\n\nfunction validationError() {\n  return new Error('Array Methods must be provided an Array');\n};\n\nvar Enumerator = function () {\n  function Enumerator(Constructor, input) {\n    this._instanceConstructor = Constructor;\n    this.promise = new Constructor(noop);\n\n    if (!this.promise[PROMISE_ID]) {\n      makePromise(this.promise);\n    }\n\n    if (isArray(input)) {\n      this.length = input.length;\n      this._remaining = input.length;\n\n      this._result = new Array(this.length);\n\n      if (this.length === 0) {\n        fulfill(this.promise, this._result);\n      } else {\n        this.length = this.length || 0;\n        this._enumerate(input);\n        if (this._remaining === 0) {\n          fulfill(this.promise, this._result);\n        }\n      }\n    } else {\n      reject(this.promise, validationError());\n    }\n  }\n\n  Enumerator.prototype._enumerate = function _enumerate(input) {\n    for (var i = 0; this._state === PENDING && i < input.length; i++) {\n      this._eachEntry(input[i], i);\n    }\n  };\n\n  Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n    var c = this._instanceConstructor;\n    var resolve = c.resolve;\n\n\n    if (resolve === originalResolve) {\n      var _then = void 0;\n      var error = void 0;\n      var didError = false;\n      try {\n        _then = entry.then;\n      } catch (e) {\n        didError = true;\n        error = e;\n      }\n\n      if (_then === originalThen && entry._state !== PENDING) {\n        this._settledAt(entry._state, i, entry._result);\n      } else if (typeof _then !== 'function') {\n        this._remaining--;\n        this._result[i] = entry;\n      } else if (c === Promise) {\n        var promise = new c(noop);\n        if (didError) {\n          reject(promise, error);\n        } else {\n          handleMaybeThenable(promise, entry, _then);\n        }\n        this._willSettleAt(promise, i);\n      } else {\n        this._willSettleAt(new c(function (resolve) {\n          return resolve(entry);\n        }), i);\n      }\n    } else {\n      this._willSettleAt(resolve(entry), i);\n    }\n  };\n\n  Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n    var promise = this.promise;\n\n\n    if (promise._state === PENDING) {\n      this._remaining--;\n\n      if (state === REJECTED) {\n        reject(promise, value);\n      } else {\n        this._result[i] = value;\n      }\n    }\n\n    if (this._remaining === 0) {\n      fulfill(promise, this._result);\n    }\n  };\n\n  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n    var enumerator = this;\n\n    subscribe(promise, undefined, function (value) {\n      return enumerator._settledAt(FULFILLED, i, value);\n    }, function (reason) {\n      return enumerator._settledAt(REJECTED, i, reason);\n    });\n  };\n\n  return Enumerator;\n}();\n\nexport default Enumerator;\n;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isFunction } from './utils';\nimport { noop, nextId, PROMISE_ID, initializePromise } from './-internal';\nimport { asap, setAsap, setScheduler } from './asap';\n\nimport all from './promise/all';\nimport race from './promise/race';\nimport Resolve from './promise/resolve';\nimport Reject from './promise/reject';\nimport then from './then';\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise's eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @param {Function} resolver\n  Useful for tooling.\n  @constructor\n*/\n\nvar Promise = function () {\n  function Promise(resolver) {\n    this[PROMISE_ID] = nextId();\n    this._result = this._state = undefined;\n    this._subscribers = [];\n\n    if (noop !== resolver) {\n      typeof resolver !== 'function' && needsResolver();\n      this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n    }\n  }\n\n  /**\n  The primary way of interacting with a promise is through its `then` method,\n  which registers callbacks to receive either a promise's eventual value or the\n  reason why the promise cannot be fulfilled.\n   ```js\n  findUser().then(function(user){\n    // user is available\n  }, function(reason){\n    // user is unavailable, and you are given the reason why\n  });\n  ```\n   Chaining\n  --------\n   The return value of `then` is itself a promise.  This second, 'downstream'\n  promise is resolved with the return value of the first promise's fulfillment\n  or rejection handler, or rejected if the handler throws an exception.\n   ```js\n  findUser().then(function (user) {\n    return user.name;\n  }, function (reason) {\n    return 'default name';\n  }).then(function (userName) {\n    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n    // will be `'default name'`\n  });\n   findUser().then(function (user) {\n    throw new Error('Found user, but still unhappy');\n  }, function (reason) {\n    throw new Error('`findUser` rejected and we're unhappy');\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n    // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n  });\n  ```\n  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n   ```js\n  findUser().then(function (user) {\n    throw new PedagogicalException('Upstream error');\n  }).then(function (value) {\n    // never reached\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // The `PedgagocialException` is propagated all the way down to here\n  });\n  ```\n   Assimilation\n  ------------\n   Sometimes the value you want to propagate to a downstream promise can only be\n  retrieved asynchronously. This can be achieved by returning a promise in the\n  fulfillment or rejection handler. The downstream promise will then be pending\n  until the returned promise is settled. This is called *assimilation*.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // The user's comments are now available\n  });\n  ```\n   If the assimliated promise rejects, then the downstream promise will also reject.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // If `findCommentsByAuthor` fulfills, we'll have the value here\n  }, function (reason) {\n    // If `findCommentsByAuthor` rejects, we'll have the reason here\n  });\n  ```\n   Simple Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let result;\n   try {\n    result = findResult();\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n  findResult(function(result, err){\n    if (err) {\n      // failure\n    } else {\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findResult().then(function(result){\n    // success\n  }, function(reason){\n    // failure\n  });\n  ```\n   Advanced Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let author, books;\n   try {\n    author = findAuthor();\n    books  = findBooksByAuthor(author);\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n   function foundBooks(books) {\n   }\n   function failure(reason) {\n   }\n   findAuthor(function(author, err){\n    if (err) {\n      failure(err);\n      // failure\n    } else {\n      try {\n        findBoooksByAuthor(author, function(books, err) {\n          if (err) {\n            failure(err);\n          } else {\n            try {\n              foundBooks(books);\n            } catch(reason) {\n              failure(reason);\n            }\n          }\n        });\n      } catch(error) {\n        failure(err);\n      }\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findAuthor().\n    then(findBooksByAuthor).\n    then(function(books){\n      // found books\n  }).catch(function(reason){\n    // something went wrong\n  });\n  ```\n   @method then\n  @param {Function} onFulfilled\n  @param {Function} onRejected\n  Useful for tooling.\n  @return {Promise}\n  */\n\n  /**\n  `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n  as the catch block of a try/catch statement.\n  ```js\n  function findAuthor(){\n  throw new Error('couldn't find that author');\n  }\n  // synchronous\n  try {\n  findAuthor();\n  } catch(reason) {\n  // something went wrong\n  }\n  // async with promises\n  findAuthor().catch(function(reason){\n  // something went wrong\n  });\n  ```\n  @method catch\n  @param {Function} onRejection\n  Useful for tooling.\n  @return {Promise}\n  */\n\n\n  Promise.prototype.catch = function _catch(onRejection) {\n    return this.then(null, onRejection);\n  };\n\n  /**\n    `finally` will be invoked regardless of the promise's fate just as native\n    try/catch/finally behaves\n  \n    Synchronous example:\n  \n    ```js\n    findAuthor() {\n      if (Math.random() > 0.5) {\n        throw new Error();\n      }\n      return new Author();\n    }\n  \n    try {\n      return findAuthor(); // succeed or fail\n    } catch(error) {\n      return findOtherAuther();\n    } finally {\n      // always runs\n      // doesn't affect the return value\n    }\n    ```\n  \n    Asynchronous example:\n  \n    ```js\n    findAuthor().catch(function(reason){\n      return findOtherAuther();\n    }).finally(function(){\n      // author was either found, or not\n    });\n    ```\n  \n    @method finally\n    @param {Function} callback\n    @return {Promise}\n  */\n\n\n  Promise.prototype.finally = function _finally(callback) {\n    var promise = this;\n    var constructor = promise.constructor;\n\n    if (isFunction(callback)) {\n      return promise.then(function (value) {\n        return constructor.resolve(callback()).then(function () {\n          return value;\n        });\n      }, function (reason) {\n        return constructor.resolve(callback()).then(function () {\n          throw reason;\n        });\n      });\n    }\n\n    return promise.then(callback, callback);\n  };\n\n  return Promise;\n}();\n\nPromise.prototype.then = then;\nexport default Promise;\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = Resolve;\nPromise.reject = Reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;","import Enumerator from '../enumerator';\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @static\n  @param {Array} entries array of promises\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nexport default function all(entries) {\n  return new Enumerator(this, entries).promise;\n}","import { isArray } from \"../utils\";\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @static\n  @param {Array} promises array of promises to observe\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nexport default function race(entries) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (!isArray(entries)) {\n    return new Constructor(function (_, reject) {\n      return reject(new TypeError('You must pass an array to race.'));\n    });\n  } else {\n    return new Constructor(function (resolve, reject) {\n      var length = entries.length;\n      for (var i = 0; i < length; i++) {\n        Constructor.resolve(entries[i]).then(resolve, reject);\n      }\n    });\n  }\n}","import { noop, reject as _reject } from '../-internal';\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @static\n  @param {Any} reason value that the returned promise will be rejected with.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop);\n  _reject(promise, reason);\n  return promise;\n}","import Promise from './es6-promise/promise';\nimport polyfill from './es6-promise/polyfill';\n\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\nexport default Promise;","/*global self*/\nimport Promise from './promise';\n\nexport default function polyfill() {\n  var local = void 0;\n\n  if (typeof global !== 'undefined') {\n    local = global;\n  } else if (typeof self !== 'undefined') {\n    local = self;\n  } else {\n    try {\n      local = Function('return this')();\n    } catch (e) {\n      throw new Error('polyfill failed because global object is unavailable in this environment');\n    }\n  }\n\n  var P = local.Promise;\n\n  if (P) {\n    var promiseToString = null;\n    try {\n      promiseToString = Object.prototype.toString.call(P.resolve());\n    } catch (e) {\n      // silently ignored\n    }\n\n    if (promiseToString === '[object Promise]' && !P.cast) {\n      return;\n    }\n  }\n\n  local.Promise = Promise;\n}","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nexports.__esModule = true;\nvar React = require(\"react\");\nvar ReactDOM = require(\"react-dom\");\nvar pick_react_known_prop_1 = require(\"pick-react-known-prop\");\nvar ConfigUtils_1 = require(\"./ConfigUtils\");\nvar Utils_1 = require(\"./Utils\");\n/* tslint:disable-next-line */\nvar tabulator_tables_1 = require(\"tabulator-tables\");\nvar default_1 = /** @class */ (function (_super) {\n    __extends(default_1, _super);\n    function default_1() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = {\n            data: [],\n            columns: _this.props.columns\n        };\n        _this.ref = null;\n        _this.htmlProps = null;\n        _this.mainId = \"tabulator-\" + +new Date() + \"-\" + Math.floor(Math.random() * 9999999); // random id\n        _this.table = null; // will be set once Tabulator instantiated\n        _this.pickValidHTMLProps = function () {\n            // run once\n            if (!_this.htmlProps) {\n                _this.htmlProps = pick_react_known_prop_1.pickHTMLProps(_this.props); // pick valid html props\n                delete _this.htmlProps['data']; // don't render data & columns as attributes\n                delete _this.htmlProps['columns'];\n            }\n        };\n        return _this;\n    }\n    default_1.prototype.componentDidMount = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var domEle, that, _a, columns, data, options, propOptions;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        domEle = ReactDOM.findDOMNode(this.ref);\n                        that = this;\n                        _a = this.props, columns = _a.columns, data = _a.data, options = _a.options;\n                        return [4 /*yield*/, ConfigUtils_1.propsToOptions(this.props)];\n                    case 1:\n                        propOptions = _b.sent();\n                        new tabulator_tables_1[\"default\"](domEle, __assign(__assign(__assign(__assign({ columns: columns }, propOptions), { layout: 'fitColumns', // fit columns to width of table (optional)\n                            tableBuilding: function () {\n                                that.table = this; // keep table instance\n                                that.props.tableBuilding ? that.props.tableBuilding() : '';\n                            },\n                            dataLoaded: function () {\n                                that.props.dataLoaded ? that.props.dataLoaded() : '';\n                            }, invalidOptionWarnings: false }), options), { data: data }));\n                        // await table.setData(data);\n                        // console.log('- componentDidMount');\n                        if (data && data.length > 0) {\n                            this.setState({ data: data });\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    default_1.prototype.componentWillUnmount = function () {\n        this.table && this.table.destroy();\n    };\n    // this is for React 15.x only\n    default_1.prototype.componentWillReceiveProps = function (props) {\n        var _this = this;\n        if (!Utils_1.isSameArray(this.state.data, props.data)) {\n            // console.log('- data changed');\n            this.setState({ data: props.data }, function () {\n                _this.table && _this.table.setData(_this.state.data);\n            });\n        }\n        if (!Utils_1.isSameArray(this.state.columns, props.columns)) {\n            // console.log('- columns changed');\n            this.setState({ columns: props.columns }, function () {\n                _this.table && _this.table.setColumns(_this.state.columns);\n            });\n        }\n    };\n    default_1.prototype.render = function () {\n        var _this = this;\n        // console.log('*** render');\n        this.pickValidHTMLProps();\n        var className = this.props.className;\n        return React.createElement(\"div\", __assign({ ref: function (ref) { return (_this.ref = ref); }, \"data-instance\": this.mainId }, this.htmlProps, { className: className }));\n    };\n    return default_1;\n}(React.Component));\nexports[\"default\"] = default_1;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar _a;\nexports.__esModule = true;\nvar React = require(\"react\");\nvar ReactTabulator_1 = require(\"./ReactTabulator\");\nvar DateEditor_1 = require(\"./editors/DateEditor\");\nvar MultiSelectEditor_1 = require(\"./editors/MultiSelectEditor\");\nvar MultiValueFormatter_1 = require(\"./formatters/MultiValueFormatter\");\nvar Utils_1 = require(\"./Utils\");\nfunction SimpleButton(props) {\n    var rowData = props.cell._cell.row.data;\n    var cellValue = props.cell._cell.value || 'Edit | Show';\n    return React.createElement(\"button\", { onClick: function () { return alert(rowData.name); } }, cellValue);\n}\nvar columns = [\n    { title: 'Name', field: 'name', width: 150 },\n    { title: 'Age', field: 'age', hozAlign: 'left', formatter: 'progress' },\n    { title: 'Favourite Color', field: 'color' },\n    { title: 'Date Of Birth', field: 'dob', sorter: 'date' },\n    { title: 'Rating', field: 'rating', hozAlign: 'center', formatter: 'star' },\n    { title: 'Passed?', field: 'passed', hozAlign: 'center', formatter: 'tickCross' },\n    { title: 'Custom', field: 'custom', hozAlign: 'center', editor: 'input', formatter: Utils_1.reactFormatter(React.createElement(SimpleButton, null)) },\n];\nvar data = [\n    { id: 1, name: 'Oli Bob', age: '12', color: 'red', dob: '01/01/1980', rating: 5, passed: true, pets: ['cat', 'dog'] },\n    { id: 2, name: 'Mary May', age: '1', color: 'green', dob: '12/05/1989', rating: 4, passed: true, pets: ['cat'] },\n    { id: 3, name: 'Christine Lobowski', age: '42', color: 'green', dob: '10/05/1985', rating: 4, passed: false },\n    { id: 4, name: 'Brendon Philips', age: '125', color: 'red', dob: '01/08/1980', rating: 4.5, passed: true },\n    { id: 5, name: 'Margret Marmajuke', age: '16', color: 'yellow', dob: '07/01/1999', rating: 4, passed: false },\n    {\n        id: 6,\n        name: 'Van Ng',\n        age: '37',\n        color: 'green',\n        dob: '06/10/1982',\n        rating: 4,\n        passed: true,\n        pets: ['dog', 'fish']\n    },\n    { id: 7, name: 'Duc Ng', age: '37', color: 'yellow', dob: '10/10/1982', rating: 4, passed: true, pets: ['dog'] }\n];\n// Editable Example:\nvar colorOptions = (_a = {}, _a[''] = '&nbsp;', _a.red = 'red', _a.green = 'green', _a.yellow = 'yellow', _a);\nvar petOptions = [{ id: 'cat', name: 'cat' }, { id: 'dog', name: 'dog' }, { id: 'fish', name: 'fish' }];\nvar editableColumns = [\n    { title: 'Name', field: 'name', width: 150, editor: 'input', headerFilter: 'input' },\n    { title: 'Age', field: 'age', hozAlign: 'left', formatter: 'progress', editor: 'progress' },\n    {\n        title: 'Favourite Color',\n        field: 'color',\n        editor: 'select',\n        editorParams: { allowEmpty: true, showListOnEmpty: true, values: colorOptions },\n        headerFilter: 'select',\n        headerFilterParams: { values: colorOptions }\n    },\n    { title: 'Date Of Birth', field: 'dob', editor: DateEditor_1[\"default\"], editorParams: { format: 'MM/DD/YYYY' } },\n    {\n        title: 'Pets',\n        field: 'pets',\n        sorter: function (a, b) { return a.toString().localeCompare(b.toString()); },\n        editor: MultiSelectEditor_1[\"default\"],\n        editorParams: { values: petOptions },\n        formatter: MultiValueFormatter_1[\"default\"],\n        formatterParams: { style: 'PILL' }\n    },\n    { title: 'Passed?', field: 'passed', hozAlign: 'center', formatter: 'tickCross', editor: true }\n];\nvar default_1 = /** @class */ (function (_super) {\n    __extends(default_1, _super);\n    function default_1() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = {\n            data: [],\n            selectedName: ''\n        };\n        _this.ref = null;\n        _this.rowClick = function (e, row) {\n            console.log('ref table: ', _this.ref.table); // this is the Tabulator table instance\n            console.log('rowClick id: ${row.getData().id}', row, e);\n            _this.setState({ selectedName: row.getData().name });\n        };\n        _this.setData = function () {\n            _this.setState({ data: data });\n        };\n        _this.clearData = function () {\n            _this.setState({ data: [] });\n        };\n        _this.renderAjaxScrollExample = function () {\n            var columns = [\n                { title: 'First Name', field: 'first_name', width: 150 },\n                { title: 'Last Name', field: 'last_name', width: 150 },\n                { title: 'Email', field: 'email', width: 150 },\n            ];\n            var options = {\n                height: 150,\n                movableRows: true,\n                ajaxProgressiveLoad: 'scroll',\n                ajaxProgressiveLoadDelay: 200,\n                ajaxProgressiveLoadScrollMargin: 100,\n                ajaxURL: 'https://reqres.in/api/users',\n                paginationDataSent: {\n                    page: 'page',\n                    size: 'per_page' // change 'size' param to 'per_page'\n                },\n                paginationDataReceived: {\n                    last_page: 'total_pages'\n                },\n                current_page: 1,\n                paginationSize: 3,\n                ajaxResponse: function (url, params, response) {\n                    console.log('ajaxResponse', url);\n                    return response; //return the response data to tabulator\n                },\n                ajaxError: function (error) {\n                    console.log('ajaxError', error);\n                }\n            };\n            return (React.createElement(ReactTabulator_1[\"default\"], { ref: function (ref) { return (_this.ref = ref); }, columns: columns, data: [], options: options }));\n        };\n        return _this;\n    }\n    default_1.prototype.render = function () {\n        var _this = this;\n        var options = {\n            height: 150,\n            movableRows: true\n        };\n        return (React.createElement(\"div\", null,\n            React.createElement(ReactTabulator_1[\"default\"], { ref: function (ref) { return (_this.ref = ref); }, columns: columns, data: data, rowClick: this.rowClick, options: options, \"data-custom-attr\": \"test-custom-attribute\", className: \"custom-css-class\" }),\n            React.createElement(\"i\", null,\n                \"Selected Name: \",\n                React.createElement(\"strong\", null, this.state.selectedName)),\n            React.createElement(\"h3\", null,\n                \"Asynchronous data: (e.g. fetch) - \",\n                React.createElement(\"button\", { onClick: this.setData }, \"Set Data\"),\n                ' ',\n                React.createElement(\"button\", { onClick: this.clearData }, \"Clear\")),\n            React.createElement(ReactTabulator_1[\"default\"], { columns: columns, data: this.state.data }),\n            React.createElement(\"h3\", null, \"Editable Table\"),\n            React.createElement(ReactTabulator_1[\"default\"], { columns: editableColumns, data: data, cellEdited: function (cell) { return console.log('cellEdited', cell); }, dataChanged: function (newData) { return console.log('dataChanged', newData); }, footerElement: React.createElement(\"span\", null, \"Footer\"), options: { movableColumns: true, movableRows: true } }),\n            React.createElement(\"h3\", null, \"Infinite Scrolling with Ajax Requests\"),\n            this.renderAjaxScrollExample(),\n            React.createElement(\"p\", null,\n                React.createElement(\"a\", { href: \"https://github.com/ngduc/react-tabulator\", target: \"_blank\" }, \"Back to: Github Repo: react-tabulator\")),\n            React.createElement(\"p\", null,\n                React.createElement(\"a\", { href: \"http://tabulator.info/examples/4.0\", target: \"_blank\" }, \"More Tabulator's Examples\"))));\n    };\n    return default_1;\n}(React.Component));\nexports[\"default\"] = default_1;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nvar React = require(\"react\");\nvar react_dom_1 = require(\"react-dom\");\n// import { parse, format } from 'date-fns';\nvar DateEditorUtils_1 = require(\"./DateEditorUtils\");\nvar DEFAULT_DATE_INPUT_FORMAT = 'YYYY-MM-DD'; // date-fns 'yyyy-MM-dd';\nvar inputCss = {\n    width: '100%',\n    height: '100%',\n    fontSize: '1em',\n    fontFamily: 'inherit'\n};\nvar Editor = /** @class */ (function (_super) {\n    __extends(Editor, _super);\n    function Editor() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = { value: '' };\n        _this.ref = null;\n        // date-fns format 'MM/dd/yyyy'\n        _this.format = _this.props.editorParams.format || 'MM/DD/YYYY'; // TODO: detect from user locale & set default.\n        _this.setValueOnSuccess = function (value) {\n            if (value === void 0) { value = _this.state.value; }\n            var success = _this.props.success;\n            if (!value) {\n                // user deleted value in the cell => set to ''\n                // const result = format(new Date(), this.format);\n                success('');\n                return;\n            }\n            var result = value;\n            try {\n                if (result.indexOf('-') > 0) {\n                    // value is \"yyyy-MM-dd\" => parse it\n                    var valueDate = DateEditorUtils_1.parse(value, 'YYYY-MM-DD');\n                    result = DateEditorUtils_1.format(valueDate, _this.format);\n                }\n            }\n            catch (err) {\n                console.error('ERROR', err);\n                result = DateEditorUtils_1.format(new Date(), DEFAULT_DATE_INPUT_FORMAT);\n            }\n            success(result);\n        };\n        _this.onChange = function (ev) {\n            var value = ev.target.value;\n            _this.setState({ value: value });\n        };\n        _this.onKeyPress = function (ev) {\n            var cancel = _this.props.cancel;\n            if (ev.keyCode === 13) {\n                // Enter pressed. If value is '' => set to today:\n                var today = DateEditorUtils_1.format(new Date(), DEFAULT_DATE_INPUT_FORMAT);\n                var value = _this.state.value || today;\n                _this.setValueOnSuccess(value);\n            }\n            else if (ev.keyCode === 27) {\n                cancel();\n            }\n        };\n        _this.onBlur = function () {\n            _this.setValueOnSuccess();\n        };\n        return _this;\n    }\n    Editor.prototype.componentDidMount = function () {\n        var _this = this;\n        this.props.onRendered(function () {\n            var value = _this.props.cell.getValue();\n            _this.setState({ value: value });\n            _this.ref.focus();\n        });\n    };\n    Editor.prototype.render = function () {\n        var _this = this;\n        var cell = this.props.cell;\n        var valueDt = DateEditorUtils_1.parse(cell.getValue(), this.format);\n        // console.log('this.format', this.format);\n        // console.log('cell.getValue()', cell.getValue());\n        // console.log('valueDt', valueDt);\n        var value = DateEditorUtils_1.format(new Date(), DEFAULT_DATE_INPUT_FORMAT);\n        try {\n            value = DateEditorUtils_1.format(valueDt, DEFAULT_DATE_INPUT_FORMAT);\n        }\n        catch (err) { }\n        return (React.createElement(\"input\", { type: \"date\", ref: function (r) { return (_this.ref = r); }, defaultValue: value, \n            // value={value}\n            onBlur: this.onBlur, onChange: this.onChange, onKeyUp: this.onKeyPress, style: inputCss }));\n    };\n    return Editor;\n}(React.Component));\nfunction default_1(cell, onRendered, success, cancel, editorParams) {\n    var container = document.createElement('div');\n    container.style.height = '100%';\n    react_dom_1.render(React.createElement(Editor, { cell: cell, onRendered: onRendered, success: success, cancel: cancel, editorParams: editorParams }), container);\n    return container;\n}\nexports[\"default\"] = default_1;\n","\"use strict\";\nexports.__esModule = true;\nexports.setGlobalDateMasks = exports.setGlobalDateI18n = exports.defaultI18n = exports.parse = exports.format = exports.assign = void 0;\n// source: https://github.com/taylorhakes/fecha\nvar token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\nvar twoDigitsOptional = '[1-9]\\\\d?';\nvar twoDigits = '\\\\d\\\\d';\nvar threeDigits = '\\\\d{3}';\nvar fourDigits = '\\\\d{4}';\nvar word = '[^\\\\s]+';\nvar literal = /\\[([^]*?)\\]/gm;\nfunction shorten(arr, sLen) {\n    var newArr = [];\n    for (var i = 0, len = arr.length; i < len; i++) {\n        newArr.push(arr[i].substr(0, sLen));\n    }\n    return newArr;\n}\nvar monthUpdate = function (arrName) { return function (v, i18n) {\n    var lowerCaseArr = i18n[arrName].map(function (v) { return v.toLowerCase(); });\n    var index = lowerCaseArr.indexOf(v.toLowerCase());\n    if (index > -1) {\n        return index;\n    }\n    return null;\n}; };\nfunction assign(origObj) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n        var obj = args_1[_a];\n        for (var key in obj) {\n            // @ts-ignore ex\n            origObj[key] = obj[key];\n        }\n    }\n    return origObj;\n}\nexports.assign = assign;\nvar dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nvar monthNames = [\n    'January',\n    'February',\n    'March',\n    'April',\n    'May',\n    'June',\n    'July',\n    'August',\n    'September',\n    'October',\n    'November',\n    'December'\n];\nvar monthNamesShort = shorten(monthNames, 3);\nvar dayNamesShort = shorten(dayNames, 3);\nvar defaultI18n = {\n    dayNamesShort: dayNamesShort,\n    dayNames: dayNames,\n    monthNamesShort: monthNamesShort,\n    monthNames: monthNames,\n    amPm: ['am', 'pm'],\n    DoFn: function (dayOfMonth) {\n        return (dayOfMonth +\n            ['th', 'st', 'nd', 'rd'][dayOfMonth % 10 > 3 ? 0 : ((dayOfMonth - (dayOfMonth % 10) !== 10 ? 1 : 0) * dayOfMonth) % 10]);\n    }\n};\nexports.defaultI18n = defaultI18n;\nvar globalI18n = assign({}, defaultI18n);\nvar setGlobalDateI18n = function (i18n) { return (globalI18n = assign(globalI18n, i18n)); };\nexports.setGlobalDateI18n = setGlobalDateI18n;\nvar regexEscape = function (str) { return str.replace(/[|\\\\{()[^$+*?.-]/g, '\\\\$&'); };\nvar pad = function (val, len) {\n    if (len === void 0) { len = 2; }\n    val = String(val);\n    while (val.length < len) {\n        val = '0' + val;\n    }\n    return val;\n};\nvar formatFlags = {\n    D: function (dateObj) { return String(dateObj.getDate()); },\n    DD: function (dateObj) { return pad(dateObj.getDate()); },\n    Do: function (dateObj, i18n) { return i18n.DoFn(dateObj.getDate()); },\n    d: function (dateObj) { return String(dateObj.getDay()); },\n    dd: function (dateObj) { return pad(dateObj.getDay()); },\n    ddd: function (dateObj, i18n) { return i18n.dayNamesShort[dateObj.getDay()]; },\n    dddd: function (dateObj, i18n) { return i18n.dayNames[dateObj.getDay()]; },\n    M: function (dateObj) { return String(dateObj.getMonth() + 1); },\n    MM: function (dateObj) { return pad(dateObj.getMonth() + 1); },\n    MMM: function (dateObj, i18n) { return i18n.monthNamesShort[dateObj.getMonth()]; },\n    MMMM: function (dateObj, i18n) { return i18n.monthNames[dateObj.getMonth()]; },\n    YY: function (dateObj) { return pad(String(dateObj.getFullYear()), 4).substr(2); },\n    YYYY: function (dateObj) { return pad(dateObj.getFullYear(), 4); },\n    h: function (dateObj) { return String(dateObj.getHours() % 12 || 12); },\n    hh: function (dateObj) { return pad(dateObj.getHours() % 12 || 12); },\n    H: function (dateObj) { return String(dateObj.getHours()); },\n    HH: function (dateObj) { return pad(dateObj.getHours()); },\n    m: function (dateObj) { return String(dateObj.getMinutes()); },\n    mm: function (dateObj) { return pad(dateObj.getMinutes()); },\n    s: function (dateObj) { return String(dateObj.getSeconds()); },\n    ss: function (dateObj) { return pad(dateObj.getSeconds()); },\n    S: function (dateObj) { return String(Math.round(dateObj.getMilliseconds() / 100)); },\n    SS: function (dateObj) { return pad(Math.round(dateObj.getMilliseconds() / 10), 2); },\n    SSS: function (dateObj) { return pad(dateObj.getMilliseconds(), 3); },\n    a: function (dateObj, i18n) { return (dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1]); },\n    A: function (dateObj, i18n) {\n        return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\n    },\n    ZZ: function (dateObj) {\n        var offset = dateObj.getTimezoneOffset();\n        return (offset > 0 ? '-' : '+') + pad(Math.floor(Math.abs(offset) / 60) * 100 + (Math.abs(offset) % 60), 4);\n    },\n    Z: function (dateObj) {\n        var offset = dateObj.getTimezoneOffset();\n        return (offset > 0 ? '-' : '+') + pad(Math.floor(Math.abs(offset) / 60), 2) + ':' + pad(Math.abs(offset) % 60, 2);\n    }\n};\nvar monthParse = function (v) { return +v - 1; };\nvar emptyDigits = [null, twoDigitsOptional];\nvar emptyWord = [null, word];\nvar amPm = [\n    'isPm',\n    word,\n    function (v, i18n) {\n        var val = v.toLowerCase();\n        if (val === i18n.amPm[0]) {\n            return 0;\n        }\n        else if (val === i18n.amPm[1]) {\n            return 1;\n        }\n        return null;\n    }\n];\nvar timezoneOffset = [\n    'timezoneOffset',\n    '[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?',\n    function (v) {\n        var parts = (v + '').match(/([+-]|\\d\\d)/gi);\n        if (parts) {\n            var minutes = +parts[1] * 60 + parseInt(parts[2], 10);\n            return parts[0] === '+' ? minutes : -minutes;\n        }\n        return 0;\n    }\n];\nvar parseFlags = {\n    D: ['day', twoDigitsOptional],\n    DD: ['day', twoDigits],\n    Do: ['day', twoDigitsOptional + word, function (v) { return parseInt(v, 10); }],\n    M: ['month', twoDigitsOptional, monthParse],\n    MM: ['month', twoDigits, monthParse],\n    YY: [\n        'year',\n        twoDigits,\n        function (v) {\n            var now = new Date();\n            var cent = +('' + now.getFullYear()).substr(0, 2);\n            return +('' + (+v > 68 ? cent - 1 : cent) + v);\n        }\n    ],\n    h: ['hour', twoDigitsOptional, undefined, 'isPm'],\n    hh: ['hour', twoDigits, undefined, 'isPm'],\n    H: ['hour', twoDigitsOptional],\n    HH: ['hour', twoDigits],\n    m: ['minute', twoDigitsOptional],\n    mm: ['minute', twoDigits],\n    s: ['second', twoDigitsOptional],\n    ss: ['second', twoDigits],\n    YYYY: ['year', fourDigits],\n    S: ['millisecond', '\\\\d', function (v) { return +v * 100; }],\n    SS: ['millisecond', twoDigits, function (v) { return +v * 10; }],\n    SSS: ['millisecond', threeDigits],\n    d: emptyDigits,\n    dd: emptyDigits,\n    ddd: emptyWord,\n    dddd: emptyWord,\n    MMM: ['month', word, monthUpdate('monthNamesShort')],\n    MMMM: ['month', word, monthUpdate('monthNames')],\n    a: amPm,\n    A: amPm,\n    ZZ: timezoneOffset,\n    Z: timezoneOffset\n};\n// Some common format strings\nvar globalMasks = {\n    \"default\": 'ddd MMM DD YYYY HH:mm:ss',\n    shortDate: 'M/D/YY',\n    mediumDate: 'MMM D, YYYY',\n    longDate: 'MMMM D, YYYY',\n    fullDate: 'dddd, MMMM D, YYYY',\n    isoDate: 'YYYY-MM-DD',\n    isoDateTime: 'YYYY-MM-DDTHH:mm:ssZ',\n    shortTime: 'HH:mm',\n    mediumTime: 'HH:mm:ss',\n    longTime: 'HH:mm:ss.SSS'\n};\nvar setGlobalDateMasks = function (masks) { return assign(globalMasks, masks); };\nexports.setGlobalDateMasks = setGlobalDateMasks;\n/***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n * @returns {string} Formatted date string\n */\nvar format = function (dateObj, mask, i18n) {\n    if (mask === void 0) { mask = globalMasks['default']; }\n    if (i18n === void 0) { i18n = {}; }\n    if (typeof dateObj === 'number') {\n        dateObj = new Date(dateObj);\n    }\n    if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {\n        throw new Error('Invalid Date pass to format');\n    }\n    mask = globalMasks[mask] || mask;\n    var literals = [];\n    // Make literals inactive by replacing them with @@@\n    mask = mask.replace(literal, function ($0, $1) {\n        literals.push($1);\n        return '@@@';\n    });\n    var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n    // Apply formatting rules\n    mask = mask.replace(token, function ($0) { return formatFlags[$0](dateObj, combinedI18nSettings); });\n    // Inline literal values back into the formatted value\n    return mask.replace(/@@@/g, function () { return literals.shift(); });\n};\nexports.format = format;\n/**\n * Parse a date string into a Javascript Date object /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @param {i18n} I18nSettingsOptional Full or subset of I18N settings\n * @returns {Date|null} Returns Date object. Returns null what date string is invalid or doesn't match format\n */\nfunction parse(dateStr, format, i18n) {\n    if (i18n === void 0) { i18n = {}; }\n    if (typeof format !== 'string') {\n        throw new Error('Invalid format in fecha parse');\n    }\n    // Check to see if the format is actually a mask\n    format = globalMasks[format] || format;\n    // Avoid regular expression denial of service, fail early for really long strings\n    // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n    if (dateStr.length > 1000) {\n        return null;\n    }\n    // Default to the beginning of the year.\n    var today = new Date();\n    var dateInfo = {\n        year: today.getFullYear(),\n        month: 0,\n        day: 1,\n        hour: 0,\n        minute: 0,\n        second: 0,\n        millisecond: 0,\n        isPm: null,\n        timezoneOffset: null\n    };\n    var parseInfo = [];\n    var literals = [];\n    // Replace all the literals with @@@. Hopefully a string that won't exist in the format\n    var newFormat = format.replace(literal, function ($0, $1) {\n        literals.push(regexEscape($1));\n        return '@@@';\n    });\n    var specifiedFields = {};\n    var requiredFields = {};\n    // Change every token that we find into the correct regex\n    newFormat = regexEscape(newFormat).replace(token, function ($0) {\n        var info = parseFlags[$0];\n        var field = info[0], regex = info[1], requiredField = info[3];\n        // Check if the person has specified the same field twice. This will lead to confusing results.\n        if (specifiedFields[field]) {\n            throw new Error(\"Invalid format. \" + field + \" specified twice in format\");\n        }\n        specifiedFields[field] = true;\n        // Check if there are any required fields. For instance, 12 hour time requires AM/PM specified\n        if (requiredField) {\n            requiredFields[requiredField] = true;\n        }\n        parseInfo.push(info);\n        return '(' + regex + ')';\n    });\n    // Check all the required fields are present\n    Object.keys(requiredFields).forEach(function (field) {\n        if (!specifiedFields[field]) {\n            throw new Error(\"Invalid format. \" + field + \" is required in specified format\");\n        }\n    });\n    // Add back all the literals after\n    newFormat = newFormat.replace(/@@@/g, function () { return literals.shift(); });\n    // Check if the date string matches the format. If it doesn't return null\n    var matches = dateStr.match(new RegExp(newFormat, 'i'));\n    if (!matches) {\n        return null;\n    }\n    var combinedI18nSettings = assign(assign({}, globalI18n), i18n);\n    // For each match, call the parser function for that date part\n    for (var i = 1; i < matches.length; i++) {\n        var _a = parseInfo[i - 1], field = _a[0], parser = _a[2];\n        var value = parser ? parser(matches[i], combinedI18nSettings) : +matches[i];\n        // If the parser can't make sense of the value, return null\n        if (value == null) {\n            return null;\n        }\n        dateInfo[field] = value;\n    }\n    if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) {\n        dateInfo.hour = +dateInfo.hour + 12;\n    }\n    else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) {\n        dateInfo.hour = 0;\n    }\n    var dateWithoutTZ = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);\n    var validateFields = [\n        ['month', 'getMonth'],\n        ['day', 'getDate'],\n        ['hour', 'getHours'],\n        ['minute', 'getMinutes'],\n        ['second', 'getSeconds']\n    ];\n    for (var i = 0, len = validateFields.length; i < len; i++) {\n        // Check to make sure the date field is within the allowed range. Javascript dates allows values\n        // outside the allowed range. If the values don't match the value was invalid\n        if (specifiedFields[validateFields[i][0]] &&\n            dateInfo[validateFields[i][0]] !== dateWithoutTZ[validateFields[i][1]]()) {\n            return null;\n        }\n    }\n    if (dateInfo.timezoneOffset == null) {\n        return dateWithoutTZ;\n    }\n    return new Date(Date.UTC(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute - dateInfo.timezoneOffset, dateInfo.second, dateInfo.millisecond));\n}\nexports.parse = parse;\nexports[\"default\"] = {\n    format: format,\n    parse: parse,\n    defaultI18n: defaultI18n,\n    setGlobalDateI18n: setGlobalDateI18n,\n    setGlobalDateMasks: setGlobalDateMasks\n};\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nvar React = require(\"react\");\nvar react_dom_1 = require(\"react-dom\");\nvar Utils_1 = require(\"../Utils\");\n// import { parse, format } from 'date-fns';\n// import ReactTags from 'react-tag-autocomplete';\nvar ReactTags = require('react-tag-autocomplete');\nvar DEFAULT_DATE_INPUT_FORMAT = 'yyyy-MM-dd';\nvar inputCss = {\n    width: '100%',\n    height: '100%',\n    fontSize: '1em',\n    fontFamily: 'inherit'\n};\nvar Editor = /** @class */ (function (_super) {\n    __extends(Editor, _super);\n    function Editor() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.state = { value: '', values: [], autofocus: false };\n        _this.ref = null;\n        _this.setValueOnSuccess = function (values) {\n            if (values === void 0) { values = _this.state.values; }\n            var _a = _this.props, success = _a.success, cancel = _a.cancel;\n            // console.log('setValueOnSuccess: ', values);\n            success(values);\n            // cancel();\n        };\n        _this.handleDelete = function (i) {\n            // console.log('- handleDelete ', i);\n            var values = _this.state.values;\n            var newValues = values.filter(function (item, index) { return index !== i; });\n            _this.setState({ values: newValues }, function () {\n                _this.setValueOnSuccess(newValues);\n            });\n        };\n        _this.handleAddition = function (item) {\n            var values = _this.state.values;\n            if (item.name) {\n                // console.log('- handleAddition: ', item);\n                values.push({ id: item.name, name: item.name });\n                _this.setState({ values: values }, function () {\n                    _this.setValueOnSuccess(values);\n                });\n            }\n        };\n        // order: handleBlur => sucess() => grid's cellEdited => grid's dataChanged => handleAddition\n        _this.handleBlur = function () {\n            var cancel = _this.props.cancel;\n            var newValue = _this.ref.input.input.value;\n            if (newValue) {\n                // console.log(111, newValue, this.ref);\n                var values = Utils_1.clone(_this.state.values);\n                values.push({ id: newValue, name: newValue });\n                // console.log('- handleBlur ', values);\n                _this.setValueOnSuccess(values);\n            }\n            else {\n                cancel();\n            }\n            var el = react_dom_1.findDOMNode(_this.ref);\n            if (el && el.parentElement.parentElement.parentElement) {\n                el.parentElement.parentElement.parentElement.style.overflow = 'hidden';\n            }\n            // console.log('- handleBlur END');\n        };\n        return _this;\n    }\n    Editor.prototype.componentDidMount = function () {\n        var _this = this;\n        this.props.onRendered(function () {\n            var el = react_dom_1.findDOMNode(_this.ref);\n            el.style.zIndex = 1;\n            el.parentElement.parentElement.parentElement.style.overflow = 'inherit';\n            el.querySelector('input').focus();\n            var values = (_this.props.cell.getValue() || []).map(function (item) {\n                return typeof item === 'string' ? { id: item, name: item } : item;\n            });\n            _this.setState({ values: values });\n        });\n    };\n    Editor.prototype.render = function () {\n        var _this = this;\n        var editorParams = this.props.editorParams;\n        var values = this.state.values;\n        var suggestions = editorParams.values;\n        return (React.createElement(\"div\", null,\n            React.createElement(ReactTags, { ref: function (ref) { return (_this.ref = ref); }, placeholder: \"Select or Type\", tags: values, suggestions: suggestions, allowNew: true, autoresize: true, autofocus: this.state.autofocus, handleAddition: this.handleAddition, handleDelete: this.handleDelete, handleBlur: this.handleBlur, minQueryLength: 0 })));\n    };\n    return Editor;\n}(React.Component));\nfunction default_1(cell, onRendered, success, cancel, editorParams) {\n    var container = document.createElement('div');\n    container.style.height = '100%';\n    react_dom_1.render(React.createElement(Editor, { cell: cell, onRendered: onRendered, success: success, cancel: cancel, editorParams: editorParams }), container);\n    return container;\n}\nexports[\"default\"] = default_1;\n","'use strict'\n\nvar React = require('react')\nvar PropTypes = require('prop-types')\nvar Tag = require('./Tag')\nvar Input = require('./Input')\nvar Suggestions = require('./Suggestions')\n\nvar KEYS = {\n  ENTER: 13,\n  TAB: 9,\n  BACKSPACE: 8,\n  UP_ARROW: 38,\n  DOWN_ARROW: 40\n}\n\nvar CLASS_NAMES = {\n  root: 'react-tags',\n  rootFocused: 'is-focused',\n  selected: 'react-tags__selected',\n  selectedTag: 'react-tags__selected-tag',\n  selectedTagName: 'react-tags__selected-tag-name',\n  search: 'react-tags__search',\n  searchInput: 'react-tags__search-input',\n  suggestions: 'react-tags__suggestions',\n  suggestionActive: 'is-active',\n  suggestionDisabled: 'is-disabled'\n}\n\nvar ReactTags = /*@__PURE__*/(function (superclass) {\n  function ReactTags (props) {\n    superclass.call(this, props)\n\n    this.state = {\n      query: '',\n      focused: false,\n      expandable: false,\n      selectedIndex: -1,\n      classNames: Object.assign({}, CLASS_NAMES, this.props.classNames)\n    }\n\n    this.inputEventHandlers = {\n      // Provide a no-op function to the input component to avoid warnings\n      // <https://github.com/i-like-robots/react-tags/issues/135>\n      // <https://github.com/facebook/react/issues/13835>\n      onChange: function () { },\n      onBlur: this.handleBlur.bind(this),\n      onFocus: this.handleFocus.bind(this),\n      onInput: this.handleInput.bind(this),\n      onKeyDown: this.handleKeyDown.bind(this)\n    }\n\n    this.container = React.createRef()\n  }\n\n  if ( superclass ) ReactTags.__proto__ = superclass;\n  ReactTags.prototype = Object.create( superclass && superclass.prototype );\n  ReactTags.prototype.constructor = ReactTags;\n\n  ReactTags.prototype.componentWillReceiveProps = function componentWillReceiveProps (newProps) {\n    this.setState({\n      classNames: Object.assign({}, CLASS_NAMES, newProps.classNames)\n    })\n  };\n\n  ReactTags.prototype.handleInput = function handleInput (e) {\n    var query = e.target.value\n\n    if (this.props.handleInputChange) {\n      this.props.handleInputChange(query)\n    }\n\n    this.setState({ query: query })\n  };\n\n  ReactTags.prototype.handleKeyDown = function handleKeyDown (e) {\n    var ref = this.state;\n    var query = ref.query;\n    var selectedIndex = ref.selectedIndex;\n    var ref$1 = this.props;\n    var delimiters = ref$1.delimiters;\n    var delimiterChars = ref$1.delimiterChars;\n\n    // when one of the terminating keys is pressed, add current query to the tags.\n    if (delimiters.indexOf(e.keyCode) > -1 || delimiterChars.indexOf(e.key) > -1) {\n      if (query || selectedIndex > -1) {\n        e.preventDefault()\n      }\n\n      this.handleDelimiter()\n    }\n\n    // when backspace key is pressed and query is blank, delete the last tag\n    if (e.keyCode === KEYS.BACKSPACE && query.length === 0 && this.props.allowBackspace) {\n      this.deleteTag(this.props.tags.length - 1)\n    }\n\n    if (e.keyCode === KEYS.UP_ARROW) {\n      e.preventDefault()\n\n      // if last item, cycle to the bottom\n      if (selectedIndex <= 0) {\n        this.setState({ selectedIndex: this.suggestions.state.options.length - 1 })\n      } else {\n        this.setState({ selectedIndex: selectedIndex - 1 })\n      }\n    }\n\n    if (e.keyCode === KEYS.DOWN_ARROW) {\n      e.preventDefault()\n\n      this.setState({ selectedIndex: (selectedIndex + 1) % this.suggestions.state.options.length })\n    }\n  };\n\n  ReactTags.prototype.handleDelimiter = function handleDelimiter () {\n    var ref = this.state;\n    var query = ref.query;\n    var selectedIndex = ref.selectedIndex;\n\n    if (query.length >= this.props.minQueryLength) {\n      // Check if the user typed in an existing suggestion.\n      var match = this.suggestions.state.options.findIndex(function (suggestion) {\n        return suggestion.name.search(new RegExp((\"^\" + query + \"$\"), 'i')) === 0\n      })\n\n      var index = selectedIndex === -1 ? match : selectedIndex\n\n      if (index > -1 && this.suggestions.state.options[index]) {\n        this.addTag(this.suggestions.state.options[index])\n      } else if (this.props.allowNew) {\n        this.addTag({ name: query })\n      }\n    }\n  };\n\n  ReactTags.prototype.handleClick = function handleClick (e) {\n    if (document.activeElement !== e.target) {\n      this.input.input.focus()\n    }\n  };\n\n  ReactTags.prototype.handleBlur = function handleBlur () {\n    this.setState({ focused: false, selectedIndex: -1 })\n\n    if (this.props.handleBlur) {\n      this.props.handleBlur()\n    }\n\n    if (this.props.addOnBlur) {\n      this.handleDelimiter()\n    }\n  };\n\n  ReactTags.prototype.handleFocus = function handleFocus () {\n    this.setState({ focused: true })\n\n    if (this.props.handleFocus) {\n      this.props.handleFocus()\n    }\n  };\n\n  ReactTags.prototype.handleDeleteTag = function handleDeleteTag (index, event) {\n    // Because we'll destroy the element with cursor focus we need to ensure\n    // it does not get lost and move it to the next interactive element\n    if (this.container.current) {\n      var interactiveEls = this.container.current.querySelectorAll('a,button,input')\n\n      var currentEl = Array.prototype.findIndex.call(interactiveEls, function (element) {\n        return element === event.currentTarget\n      })\n\n      var nextEl = interactiveEls[currentEl - 1] || interactiveEls[currentEl + 1]\n\n      if (nextEl) {\n        nextEl.focus()\n      }\n    }\n\n    this.deleteTag(index)\n  };\n\n  ReactTags.prototype.addTag = function addTag (tag) {\n    if (tag.disabled) {\n      return\n    }\n\n    if (typeof this.props.handleValidate === 'function' && !this.props.handleValidate(tag)) {\n      return\n    }\n\n    this.props.handleAddition(tag)\n\n    // reset the state\n    this.setState({\n      query: '',\n      selectedIndex: -1\n    })\n  };\n\n  ReactTags.prototype.deleteTag = function deleteTag (i) {\n    this.props.handleDelete(i)\n\n    if (this.props.clearInputOnDelete && this.state.query !== '') {\n      this.setState({ query: '' })\n    }\n  };\n\n  ReactTags.prototype.render = function render () {\n    var this$1 = this;\n\n    var listboxId = 'ReactTags-listbox'\n\n    var TagComponent = this.props.tagComponent || Tag\n\n    var tags = this.props.tags.map(function (tag, i) { return (\n      React.createElement( TagComponent, {\n        key: i, tag: tag, classNames: this$1.state.classNames, onDelete: this$1.handleDeleteTag.bind(this$1, i) })\n    ); })\n\n    var expandable = this.state.focused && this.state.query.length >= this.props.minQueryLength\n    var classNames = [this.state.classNames.root]\n\n    this.state.focused && classNames.push(this.state.classNames.rootFocused)\n\n    return (\n      React.createElement( 'div', { ref: this.container, className: classNames.join(' '), onClick: this.handleClick.bind(this) },\n        React.createElement( 'div', { className: this.state.classNames.selected, 'aria-live': 'polite', 'aria-relevant': 'additions removals' },\n          tags\n        ),\n        React.createElement( 'div', { className: this.state.classNames.search },\n          React.createElement( Input, Object.assign({},\n            this.state, { inputAttributes: this.props.inputAttributes, inputEventHandlers: this.inputEventHandlers, ref: function (c) { this$1.input = c }, listboxId: listboxId, autofocus: this.props.autofocus, autoresize: this.props.autoresize, expandable: expandable, placeholder: this.props.placeholder, ariaLabel: this.props.ariaLabel })),\n          React.createElement( Suggestions, Object.assign({},\n            this.state, { ref: function (c) { this$1.suggestions = c }, listboxId: listboxId, expandable: expandable, noSuggestionsText: this.props.noSuggestionsText, suggestions: this.props.suggestions, suggestionsFilter: this.props.suggestionsFilter, addTag: this.addTag.bind(this), maxSuggestionsLength: this.props.maxSuggestionsLength }))\n        )\n      )\n    )\n  };\n\n  return ReactTags;\n}(React.Component));\n\nReactTags.defaultProps = {\n  tags: [],\n  placeholder: 'Add new tag',\n  noSuggestionsText: null,\n  suggestions: [],\n  suggestionsFilter: null,\n  autofocus: true,\n  autoresize: true,\n  delimiters: [KEYS.TAB, KEYS.ENTER],\n  delimiterChars: [],\n  minQueryLength: 2,\n  maxSuggestionsLength: 6,\n  allowNew: false,\n  allowBackspace: true,\n  tagComponent: null,\n  inputAttributes: {},\n  addOnBlur: false,\n  clearInputOnDelete: true\n}\n\nReactTags.propTypes = {\n  tags: PropTypes.arrayOf(PropTypes.object),\n  placeholder: PropTypes.string,\n  ariaLabel: PropTypes.string,\n  noSuggestionsText: PropTypes.string,\n  suggestions: PropTypes.arrayOf(PropTypes.object),\n  suggestionsFilter: PropTypes.func,\n  autofocus: PropTypes.bool,\n  autoresize: PropTypes.bool,\n  delimiters: PropTypes.arrayOf(PropTypes.number),\n  delimiterChars: PropTypes.arrayOf(PropTypes.string),\n  handleDelete: PropTypes.func.isRequired,\n  handleAddition: PropTypes.func.isRequired,\n  handleInputChange: PropTypes.func,\n  handleFocus: PropTypes.func,\n  handleBlur: PropTypes.func,\n  handleValidate: PropTypes.func,\n  minQueryLength: PropTypes.number,\n  maxSuggestionsLength: PropTypes.number,\n  classNames: PropTypes.object,\n  allowNew: PropTypes.bool,\n  allowBackspace: PropTypes.bool,\n  tagComponent: PropTypes.oneOfType([\n    PropTypes.func,\n    PropTypes.element\n  ]),\n  inputAttributes: PropTypes.object,\n  addOnBlur: PropTypes.bool,\n  clearInputOnDelete: PropTypes.bool\n}\n\nmodule.exports = ReactTags\n","'use strict'\n\nvar React = require('react')\n\nmodule.exports = function (props) { return (\n  React.createElement( 'button', { type: 'button', className: props.classNames.selectedTag, title: 'Click to remove tag', onClick: props.onDelete },\n    React.createElement( 'span', { className: props.classNames.selectedTagName }, props.tag.name)\n  )\n); }\n","'use strict'\n\nvar React = require('react')\n\nvar SIZER_STYLES = {\n  position: 'absolute',\n  width: 0,\n  height: 0,\n  visibility: 'hidden',\n  overflow: 'scroll',\n  whiteSpace: 'pre'\n}\n\nvar STYLE_PROPS = [\n  'fontSize',\n  'fontFamily',\n  'fontWeight',\n  'fontStyle',\n  'letterSpacing',\n  'textTransform'\n]\n\nvar Input = /*@__PURE__*/(function (superclass) {\n  function Input (props) {\n    superclass.call(this, props)\n    this.state = { inputWidth: null }\n  }\n\n  if ( superclass ) Input.__proto__ = superclass;\n  Input.prototype = Object.create( superclass && superclass.prototype );\n  Input.prototype.constructor = Input;\n\n  Input.prototype.componentDidMount = function componentDidMount () {\n    if (this.props.autoresize) {\n      this.copyInputStyles()\n      this.updateInputWidth()\n    }\n\n    if (this.props.autofocus) {\n      this.input.focus()\n    }\n  };\n\n  Input.prototype.componentDidUpdate = function componentDidUpdate (ref) {\n    var query = ref.query;\n    var placeholder = ref.placeholder;\n\n    if (query !== this.props.query || placeholder !== this.props.placeholder) {\n      this.updateInputWidth()\n    }\n  };\n\n  Input.prototype.copyInputStyles = function copyInputStyles () {\n    var this$1 = this;\n\n    var inputStyle = window.getComputedStyle(this.input)\n\n    STYLE_PROPS.forEach(function (prop) {\n      this$1.sizer.style[prop] = inputStyle[prop]\n    })\n  };\n\n  Input.prototype.updateInputWidth = function updateInputWidth () {\n    var inputWidth\n\n    if (this.props.autoresize) {\n      // scrollWidth is designed to be fast not accurate.\n      // +2 is completely arbitrary but does the job.\n      inputWidth = Math.ceil(this.sizer.scrollWidth) + 2\n    }\n\n    if (inputWidth !== this.state.inputWidth) {\n      this.setState({ inputWidth: inputWidth })\n    }\n  };\n\n  Input.prototype.render = function render () {\n    var this$1 = this;\n\n    var ref = this.props;\n    var inputAttributes = ref.inputAttributes;\n    var inputEventHandlers = ref.inputEventHandlers;\n    var query = ref.query;\n    var placeholder = ref.placeholder;\n    var expandable = ref.expandable;\n    var listboxId = ref.listboxId;\n    var selectedIndex = ref.selectedIndex;\n    var ariaLabel = ref.ariaLabel;\n\n    return (\n      React.createElement( 'div', { className: this.props.classNames.searchInput },\n        React.createElement( 'input', Object.assign({},\n          inputAttributes, inputEventHandlers, { ref: function (c) { this$1.input = c }, value: query, placeholder: placeholder, role: 'combobox', 'aria-autocomplete': 'list', 'aria-label': ariaLabel || placeholder, 'aria-owns': listboxId, 'aria-activedescendant': selectedIndex > -1 ? (listboxId + \"-\" + selectedIndex) : null, 'aria-expanded': expandable, style: { width: this.state.inputWidth } })),\n        React.createElement( 'div', { ref: function (c) { this$1.sizer = c }, style: SIZER_STYLES }, query || placeholder)\n      )\n    )\n  };\n\n  return Input;\n}(React.Component));\n\nmodule.exports = Input\n","'use strict'\n\nvar React = require('react')\n\nfunction escapeForRegExp (query) {\n  return query.replace(/[-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n}\n\nfunction markIt (input, query) {\n  if (query) {\n    var regex = RegExp(escapeForRegExp(query), 'gi')\n    input = input.replace(regex, '<mark>$&</mark>')\n  }\n\n  return {\n    __html: input\n  }\n}\n\nfunction filterSuggestions (query, suggestions, length, suggestionsFilter, noSuggestionsText) {\n  if (!suggestionsFilter) {\n    var regex = new RegExp((\"(?:^|\\\\s)\" + (escapeForRegExp(query))), 'i')\n    suggestionsFilter = function (item) { return regex.test(item.name); }\n  }\n\n  var filtered = suggestions.filter(function (item) { return suggestionsFilter(item, query); }).slice(0, length)\n\n  if (filtered.length === 0 && noSuggestionsText) {\n    filtered.push({ id: 0, name: noSuggestionsText, disabled: true, disableMarkIt: true })\n  }\n\n  return filtered\n}\n\nvar Suggestions = /*@__PURE__*/(function (superclass) {\n  function Suggestions (props) {\n    superclass.call(this, props)\n\n    this.state = {\n      options: filterSuggestions(this.props.query, this.props.suggestions, this.props.maxSuggestionsLength, this.props.suggestionsFilter, this.props.noSuggestionsText)\n    }\n  }\n\n  if ( superclass ) Suggestions.__proto__ = superclass;\n  Suggestions.prototype = Object.create( superclass && superclass.prototype );\n  Suggestions.prototype.constructor = Suggestions;\n\n  Suggestions.prototype.componentWillReceiveProps = function componentWillReceiveProps (newProps) {\n    this.setState({\n      options: filterSuggestions(newProps.query, newProps.suggestions, newProps.maxSuggestionsLength, newProps.suggestionsFilter, newProps.noSuggestionsText)\n    })\n  };\n\n  Suggestions.prototype.handleMouseDown = function handleMouseDown (item, e) {\n    // focus is shifted on mouse down but calling preventDefault prevents this\n    e.preventDefault()\n    this.props.addTag(item)\n  };\n\n  Suggestions.prototype.render = function render () {\n    var this$1 = this;\n\n    if (!this.props.expandable || !this.state.options.length) {\n      return null\n    }\n\n    var options = this.state.options.map(function (item, i) {\n      var key = (this$1.props.listboxId) + \"-\" + i\n      var classNames = []\n\n      if (this$1.props.selectedIndex === i) {\n        classNames.push(this$1.props.classNames.suggestionActive)\n      }\n\n      if (item.disabled) {\n        classNames.push(this$1.props.classNames.suggestionDisabled)\n      }\n\n      return (\n        React.createElement( 'li', {\n          id: key, key: key, role: 'option', className: classNames.join(' '), 'aria-disabled': item.disabled === true, onMouseDown: this$1.handleMouseDown.bind(this$1, item) },\n          item.disableMarkIt ? item.name\n            : React.createElement( 'span', { dangerouslySetInnerHTML: markIt(item.name, this$1.props.query, item.markInput) })\n        )\n      )\n    })\n\n    return (\n      React.createElement( 'div', { className: this.props.classNames.suggestions },\n        React.createElement( 'ul', { role: 'listbox', id: this.props.listboxId }, options)\n      )\n    )\n  };\n\n  return Suggestions;\n}(React.Component));\n\nmodule.exports = Suggestions\n","\"use strict\";\nexports.__esModule = true;\nvar React = require(\"react\");\nvar react_dom_1 = require(\"react-dom\");\nvar createCellEl = function () {\n    var el = document.createElement('div');\n    el.style.height = '100%';\n    return el;\n};\n// example: { title: 'Pets', field: 'pets', formatter: MultiValueFormatter, formatterParams: { style: 'PILL' } }\n// default style: comma separated plain text\n// other styles: PILL\nfunction default_1(cell, formatterParams, onRendered) {\n    var style = formatterParams.style || ''; // comma separated plain text\n    var arr = cell.getValue() || [];\n    var content = arr && arr.length > 0 && typeof arr[0] === 'string' ? React.createElement(\"span\", null, arr.join(', ')) : React.createElement(\"span\", null);\n    if (style === 'PILL') {\n        // TODO: use React.Fragment here to remove unnecessary div. (but will break React 15 example in Codesandbox)\n        content = (React.createElement(\"div\", null, arr.map(function (item) {\n            return typeof item === 'string' ? React.createElement(\"span\", { key: item }, item) : React.createElement(\"span\", { key: item.name }, item.name);\n        })));\n    }\n    var el = createCellEl();\n    el.className = 'multi-value-formatter-content';\n    el.title = arr && arr.length > 0 && typeof arr[0] === 'string' ? arr.join(', ') : '';\n    react_dom_1.render(content, el);\n    return el;\n}\nexports[\"default\"] = default_1;\n"],"sourceRoot":""}